Api 개발/flask

영화추천 api 만들기 즐겨찾기 기능

공부짱짱열심히하기 2023. 1. 10. 13:17

좋아요 하고 즐겨찾기를 따로 만드면 둘다 가능

 

즐겨찾기

 

즐겨찾기 추가 api

post /favorite/movie_id(숫자)

header JWT Token(user id)

movie id는?

 

 

즐겨찾기 삭제 api

delete /favorite/movie_id(숫자)

header jwt token

 

class FavoriteResource(Resource) :

    @jwt_required()
    def post(self,movie_id) :
        pass
    

    @jwt_required()
    def delete(self,movie_id) :
        return

꼭 잊지말고 규칙임 self 옆에 movie_id

app연결하고 워크벤치가서 연습

 

insert into favorite
(user_id,movie_id)
values
(1002,1);

select *
from favorite;

잘되니까 바로 쿼리문 수정하고 레코드 작성후 cursor실행및 닫기 및 오류 시 까지 다 복사

def post(self,movie_id) :
        user_id = get_jwt_identity()
        try :
            connection = get_connection()
            query = '''insert into favorite
                        (user_id,movie_id)
                        values
                        (%s,%s);'''
            record = (user_id,movie_id )

            cursor = connection.cursor(dictionary=True)

            cursor.execute(query, record)

            result_list = cursor.fetchall()

            cursor.close()
            connection.close()

        except Error as e :
            print(e)            
            cursor.close()
            connection.close()
            return {"error" : str(e)}, 500
                

        return {"result" : "success"}

 

 

삭제는 다 똑같고

쿼리만 수정

delete from favorite
where user_id = 1002 and movie_id = 1;

즐겨찾기 리스트 불러오기

 

get /favorite? → 쿼리 스트링

get /favorite?offset=0&limit=25

jwt token

 

class FavoriteListResource(Resource):

    @jwt_required()
    def get(self) :

        user_id = get_jwt_identity()
        # 클라이언트에서 쿼리스트링으로 보내는 데이터는
        # request.args 에 들어있다.
        offset = request.args.get('offset')
        limit = request.args.get('limit')

        try :
            connection = get_connection()

            query = ''' '''

            record = (user_id, )


        return

앱연결하고

 

워크벤치에서 연습

select f.id ,f.movie_id, m.title,m.genre, ifnull(count(r.movie_id),0) as cnt , ifnull(avg(r.rating),0) as avg
from favorite f
join movie m
on f.movie_id = m.id
left join rating r
on r.movie_id = m.id
where f.user_id = 1002
group by f.movie_id 
limit 0,25;
class FavoriteListResource(Resource) :
    @jwt_required()
    def get(self) :

        user_id = get_jwt_identity()
        offset = request.args.get('offset')
        limit = request.args.get('limit')

        try :
            connection = get_connection()
            query = '''select f.id, f.movie_id, m.title, m.genre,
                    ifnull( count(r.movie_id) , 0) as cnt , 
                    ifnull( avg( r.rating ) , 0 )  as avg
                    from favorite f
                    join movie m
                    on f.movie_id = m.id
                    left join rating r 
                    on r.movie_id = m.id
                    where f.user_id = %s
                    group by f.movie_id
                    limit '''+offset+''', '''+limit+''';'''
            
            record = (user_id, )
            cursor = connection.cursor(dictionary=True)
            cursor.execute(query, record)
            result_list = cursor.fetchall()

            i = 0
            for row in result_list :
                result_list[i]['avg'] = float( row['avg'] )
                i = i + 1

            cursor.close()
            connection.close()
        except Error as e :
            print(e)
            cursor.close()
            connection.close()
            return {'error' : str(e)}, 500

        
        return {'result' :'success', 
                'items' : result_list, 
                'count' : len(result_list)}