[PROJECT] AIRBNB CLONING #5

Wishlist API

해당 방을 저장하기를 하면 원하는 이름의 위시리스트를 만들고 해당 폴더 안에 저장할 수 있습니다. 그렇기에 모델링을 할 때 wishlist라는 테이블에 이름과 사용자의 테이블이 필요했고, 방과 위시리스트를 잇는 wishlistroom이라는 중간테이블이 필요했습니다.

users/urls

from django.urls import path
from users.views import KakaoSignIn, WishlistView

urlpatterns = [
    path("/login/kakao", KakaoSignIn.as_view()),
    path("/wishlist", WishlistView.as_view()),
]

users/views

import json, jwt, requests, datetime

from django.views     import View
from django.http      import JsonResponse

from rooms.models import Room
from users.models import User, Wishlist, WishlistRoom
from core.utils   import login_decorator
from my_settings  import SECRET_KEY, ALGORITHM

class WishlistView(View):
    @login_decorator
    def post(self, request):
        try:
            data      = json.loads(request.body)
            room_id   = data['room_id']
            list_id   = data['list_id']
            list_name = data['list_name']
            
            rooms = Room.objects.get(id=room_id)
            user = request.user

            if not Wishlist.objects.filter(id=list_id, user=user).exists():
                wishlist = Wishlist.objects.create(
                    user = user,
                    name = list_name
                )
            else:
                wishlist = Wishlist.objects.get(id=list_id, user=user)
                
            WishlistRoom.objects.create(
                room     = rooms,
                wishlist = wishlist
            )
            return  JsonResponse({'message' : 'LIKED'}, status = 201)
            
        except KeyError:
            return JsonResponse({'message' : 'KEY_ERROR'}, status = 400)        
        except Room.DoesNotExist:
            return JsonResponse({'message' : 'ROOM_DOES_NOT_EXIST'}, status = 400)

body에 room_id, list_id, list_name의 항목을 담아 json으로 실어보냅니다.

userlogin_decorator의 request.user로 받아 사용하며 해당 방에게 wishlist를 저장해야 하므로 id=room_id로 지정하였습니다.

만약 Wishlist에 객체가 없다면 생성을 하고 그렇지 않다면 get을 합니다. 그러면서 중간테이블인 wishlistroom을 동시에 생성하도록 하는 로직입니다.

에러가 생길 경우를 대비해 적절한 예외처리를 해주었습니다.

좋은 웹페이지 즐겨찾기