[2차 프로젝트] 좋아요 기능 구현

이태연·2021년 12월 19일
0

좋아요 기능 구현

2차 프로젝트에서 제가 담당한 기능 중 하나는 바로 좋아요 기능입니다.

좋아요 기능을 구현하면서 처음에는 댓글처럼 post함수와 delete함수를 따로 만들어야겠다고 생각했습니다.

하지만 생각해보니 좋아요의 경우 댓글과 달리
기존에 강의에 좋아요를 누르지 않았으면 좋아요가 생성되고
기존에 강의에 좋아요를 누른 상태에서 또 누르면 좋아요가 삭제되는 방식으로 기능을 구현해야 했습니다.

해당 부분을 어떻게 구현할까 고민하다 get_or_create 메소드를 사용하였습니다.

class LikeView(View):
    @Authorize
    def post(self,request,course_id):
        try:
           
            like, is_like = Like.objects.get_or_create(course_id=course_id, user_id=request.user.id)
            
            if not is_like:
                like.delete()
                return JsonResponse({"message" : "DELETE_LIKE"}, status=200)
            return JsonResponse({"message" : "SUCCESS_LIKE"}, status=200)

        except IntegrityError:
            return JsonResponse({"message": "INVALID_VALUE"}, status=401)

get_or_create의 경우 (objects, created) 라는 튜플형식으로 반환을 합니다.

두번째 인자인 created는 boolean flag인데 첫번째 objects가 존재하면 True를 반환하고 존재하지 않으면 False를 반환합니다.

Like.objects.get_or_create(course_id=course_id, user_id=request.user.id)
            
if not is_like:
	like.delete()

즉, 위 코드는 지금 로그인한 유저(user_id=request.user.id)가 해당 강의(course_id=course_id)에 좋아요를 누르지 않았으면 is_like가 true가 되면서 좋아요가 생성되고 이미 좋아요를 누른 상태면 is_like가 false가 되면서 댓글이 삭제됩니다(like.delete())

profile
주니어 백엔드 웹 개발자입니다.

0개의 댓글