카테고리 없음

영화api 메인화면 즐겨찾기 나오게 수정 하는방법

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

 

 

https://seonggongstory.tistory.com/manage/posts/

 

TISTORY

나를 표현하는 블로그를 만들어보세요.

www.tistory.com

 

 

현재는 리스트 검색시 와 즐겨찾기 가 분리

 

리스트검색시

즐겨찾기 유무가 표시되게 화면수정 하는 작업

 

먼저 설계먼저 수정

영화리스트 가져오는 api

authorization header를 달아줘야 user token 사용

 

class안에도

@jwt_required()하지만 그냥 하면

애초에 계획이 비로그인도 보게하는거였기 때문에 그냥 하면

이럴땐

@jwt_required(optional=True) 해주면 된다

 

두개로 나눠서

로그인되었을때와

안되었을때로 나눠줌

 

 

select  m.id,m.title,ifnull(count(r.movie_id),0) as cnt , ifnull(avg(r.rating),0) as avg , f.*
from movie m
left join rating r
on r.movie_id = m.id
left join favorite f
on f.movie_id = m.id and f.user_id = 1002
group by m.id 
order by cnt desc
limit 0,25;

where절로 따로 빼지말고 그냥 on 합칠때 오른쪽에 and로 붙여줌

 

 

user_id가 null이냐 아니냐로

select  m.id,m.title,ifnull(count(r.movie_id),0) as cnt , ifnull(avg(r.rating),0) as avg , if (f.user_id is null,0,1) as is_favorite
from movie m
left join rating r
on r.movie_id = m.id
left join favorite f
on f.movie_id = m.id and f.user_id = 1002
group by m.id 
order by cnt desc
limit 0,25;

쿼리문안에 넣어주기

 

(기존) → if 비로그인 일때

 

else: 로그인했을때 내가 즐겨찾기 한건지 만건지 까지 나옴

 

 

최종 수정안

class MovieListResource(Resource) :

    @jwt_required(optional=True)
    def get(self) :
        
        user_id = get_jwt_identity()

        print("유저아이디")
        print(user_id)

        if user_id is None :
            print('비회원 유저가 접속함')
        
        else :
            print('회원이 접속함')

        order = request.args.get('order')
        offset = request.args.get('offset')
        limit = request.args.get('limit')

        try :
            connection = get_connection()

            if user_id is None :
           

                query = '''select m.id, m.title, 
                        ifnull(count(r.movie_id), 0) as cnt , 
                        ifnull(avg(r.rating) , 0)  as avg
                        from movie m 
                        left join rating r
                        on m.id = r.movie_id
                        group by m.id
                        order by '''+ order +''' desc
                        limit '''+ offset +''' , '''+ limit +''' ;'''
                
                cursor = connection.cursor(dictionary=True)
                cursor.execute(query)
            
            else:
                query = ''' select  m.id,m.title,ifnull(count(r.movie_id),0) as cnt , ifnull(avg(r.rating),0) as avg , if (f.user_id is null,0,1) as is_favorite
                        from movie m
                        left join rating r
                        on r.movie_id = m.id
                        left join favorite f
                        on f.movie_id = m.id and f.user_id = %s
                        group by m.id 
                        order by cnt desc
                        limit 0,25;  '''
                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


        print(result_list)

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

 

 

 

비로그인

 

 

로그인

 

둘이 다름