From 9a4b18b4c15136f3fe0c0887f67ff4d6c24a084c Mon Sep 17 00:00:00 2001 From: ITQ Date: Mon, 4 Mar 2024 18:02:03 +0300 Subject: [PATCH] Added posts likes and dislikes --- solution/pulse/api/posts/urls.py | 10 +++++++++ solution/pulse/api/posts/views.py | 36 ++++++++++++++++++++++++++++++ solution/pulse/api/users/models.py | 1 + 3 files changed, 47 insertions(+) diff --git a/solution/pulse/api/posts/urls.py b/solution/pulse/api/posts/urls.py index b4f9044..2a63025 100644 --- a/solution/pulse/api/posts/urls.py +++ b/solution/pulse/api/posts/urls.py @@ -23,4 +23,14 @@ urlpatterns = [ api.posts.views.UserFeedListApiView.as_view(), name="user-feed", ), + path( + "//like", + api.posts.views.LikePostApiView.as_view(), + name="like-post", + ), + path( + "//dislike", + api.posts.views.DislikePostApiView.as_view(), + name="like-post", + ), ] diff --git a/solution/pulse/api/posts/views.py b/solution/pulse/api/posts/views.py index 5c46f73..bc8d575 100644 --- a/solution/pulse/api/posts/views.py +++ b/solution/pulse/api/posts/views.py @@ -82,3 +82,39 @@ class UserFeedListApiView(ListAPIView): offset = serializer.validated_data.get("offset") return user.posts.all()[offset: offset + limit] + + +class LikePostApiView(APIView): + permission_classes = [IsAuthenticated] + + def post(self, request, post_id): + try: + post = Post.objects.get(id=post_id) + self.check_object_permissions(request, post) + request.user.like_post(post) + return Response( + {"status": "ok"}, + status=status.HTTP_200_OK, + ) + except Post.DoesNotExist: + raise NotFound( + {"detail": "Post not found."}, + ) from None + + +class DislikePostApiView(APIView): + permission_classes = [IsAuthenticated] + + def post(self, request, post_id): + try: + post = Post.objects.get(id=post_id) + self.check_object_permissions(request, post) + request.user.dislike_post(post) + return Response( + {"status": "ok"}, + status=status.HTTP_200_OK, + ) + except Post.DoesNotExist: + raise NotFound( + {"detail": "Post not found."}, + ) from None diff --git a/solution/pulse/api/users/models.py b/solution/pulse/api/users/models.py index d33a3ab..339dd65 100644 --- a/solution/pulse/api/users/models.py +++ b/solution/pulse/api/users/models.py @@ -56,6 +56,7 @@ class Profile(models.Model): return self.liked_posts.add(post) def dislike_post(self, post): + print(self, post) self.liked_posts.remove(post) return self.disliked_posts.add(post)