Westagram # 1. like

이지훈·2021년 7월 5일
0

westagram

목록 보기
1/3
post-thumbnail

좋아요 기능 설계

  • 좋아요 기능은 포스팅된 글이 가 된다고 생각했기 때문에 Postings app에서 작성했습니다.

  • Like라는 instance에서 참조하는 Account(유저) 누를 posting(게시글). 유저 두가지 user field를 만들었고 이 두가지는 모두 다른 인스턴스를 끌어다 써야하므로 FK field를 사용했다.

class Like(models.Model):
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    post = models.ForeignKey(Posting, on_delete=models.CASCADE)

    class Meta:
        db_table = 'likes'
  • 동일한 Account가 같은 Posting에 두번 누를때는 좋아요를 삭제하는 기능을 추가

  • 좋아요한 유저를 filter해서 count하는 기능 추가

#### 좋아요 기능
class LikeView(View):
    def post(self, request):
        data = json.loads(request.body)

        user = Account.objects.get(pk=data['user'])
        post = Posting.objects.get(pk=data['post'])
        try:
            # 같은 유저가 같은 게시물에 좋아요를 2번 누를 때 좋아요 삭제
            if Like.objects.filter(user=user, post=post).exists():
                Like.objects.filter(user=user, post=post).delete()

            Like.objects.create(
                user = user,
                post = post,
            )

            # 좋아요 힙계
            like_count = Like.objects.filter(post=post).count()
            return JsonResponse({'message': 'SUCCESS', 'like_count': like_count}, status=200)
        except KeyError:
            return JsonResponse({"MESSAGE":"ERROR"}, status=400)

    def get(self, request):

        likes = Like.objects.all()

        try:
            result=[]
            for like in likes:
                result.append(
                    {
                    'name'      : like.user_id,
                    'post'      : like.post_id,
                    }
                )
            return JsonResponse({"RESULT":result, "MESSAGE":"SUCCESS"}, status=200)
        except KeyError:
            return JsonResponse({"MESSAGE":"ERROR"}, status=400)

아쉬운 점

  • 데코레이터를 사용해서 토큰에 user를 담았으면 코드가 더 깔끔해지지 않을까

  • 좋아요 2번을 누르면 좋아요가 아예 삭제되게 구현하는 기능 추가하지 않은 것

  • 개념에 대한 이해없이 우선 동작되게만 하자라는 마인드...(이거 좀 고쳐야겠다 진짜로... 😢)

profile
꾸준하게 🐌

0개의 댓글