배민의 경우에는 좀 독특한 방식의 찜하기를 지원하고 있다.
위에서처럼 하트를 누르는 동시에 찜리스트 목록으로 이동한다.
그리고 마치 생김새도 장바구니의 하위 호환처럼 생겼다.
(내가 생각한 찜목록과 전혀 다르다!)
이것을 구현하려면,
또 RESTful
하게 하려면, GET
과 POST
를 한번씩 해야하는건지,
아니면 POST
/GET
에서 다른 것의 역할까지 해야하는지 많은 고민을 했다.
결국 Frontend
에서 두번 요청하는 것으로 하였다.
일단 찜 기능은 회원을 타겟으로 한 기능이기에 login-decorator
기능을 활용했다.
일단 로직자체는 간단하다.
로그인을 성공하면 login-decorator
에서 request.user
에 payload
에 담긴 정보를 담아준다. (유저 id)
그것을 바탕으로 productlike_set
을 활용하여 모든것을 가져온다.
(user
와 productlike
는 M2M 관계다.)
찜을 처음하는 상품이라면 당연히 create
를 하지만, 이미 찜한 상품이라면?!
그럴땐 언팔
의 기능처럼 찜을 취소해야 할 것이다.
그래서 이미 있는 상품에 대해선 delete
를 시켜준다.