Browse Source

fix: bookmark

master
mortezaei 1 year ago
parent
commit
4593ed024e
  1. 2
      apps/bookmark/serializers/bookmark.py
  2. 25
      apps/bookmark/views/bookmark.py
  3. 19
      apps/bookmark/views/rate.py

2
apps/bookmark/serializers/bookmark.py

@ -10,7 +10,7 @@ class BookmarkSerializer(serializers.ModelSerializer):
class Meta:
model = Bookmark
fields = ['id', 'user', 'service', 'content_id', 'status', 'created_at', 'updated_at']
read_only_fields = ['id', 'created_at', 'updated_at', 'status']
read_only_fields = ['id', 'created_at', 'updated_at', 'status', 'user']
def validate(self, data):
"""

25
apps/bookmark/views/bookmark.py

@ -4,6 +4,7 @@ from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import CreateAPIView, DestroyAPIView
from rest_framework.exceptions import ValidationError
from drf_yasg.utils import swagger_auto_schema
from apps.bookmark.models import Bookmark
from apps.bookmark.serializers import BookmarkSerializer
@ -17,6 +18,15 @@ class AddBookmarkView(CreateAPIView):
permission_classes = [IsAuthenticated]
serializer_class = BookmarkSerializer
@swagger_auto_schema(
operation_description="Add a bookmark for a specific content in a service. If the bookmark already exists but is inactive, it will be reactivated.",
request_body=BookmarkSerializer,
responses={
201: "Bookmark created successfully.",
200: "Bookmark reactivated or already active.",
400: "Invalid input."
}
)
def create(self, request, *args, **kwargs):
service = request.data.get('service')
content_id = request.data.get('content_id')
@ -67,6 +77,15 @@ class RemoveBookmarkView(DestroyAPIView):
permission_classes = [IsAuthenticated]
serializer_class = BookmarkSerializer
@swagger_auto_schema(
operation_description="Deactivate a bookmark by setting its status to False using content_id and user.",
request_body=BookmarkSerializer,
responses={
204: "Bookmark deactivated successfully.",
400: "Invalid input.",
404: "Bookmark not found or already inactive."
}
)
def get_object(self):
service = self.request.data.get('service')
content_id = self.request.data.get('content_id')
@ -99,6 +118,12 @@ class BookmarkStatusView(APIView):
"""
permission_classes = [IsAuthenticated]
@swagger_auto_schema(
operation_description="Return the count of bookmarks for each service for the current user.",
responses={
200: "A list of bookmark counts for each service.",
}
)
def get(self, request):
# Get all active bookmarks for the current user
user_bookmarks = Bookmark.objects.filter(

19
apps/bookmark/views/rate.py

@ -4,6 +4,8 @@ from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from apps.bookmark.models import Rate
from apps.bookmark.serializers import RateSerializer, RateStatusSerializer, AverageRateSerializer
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
class AddRateView(APIView):
"""
@ -11,6 +13,14 @@ class AddRateView(APIView):
"""
permission_classes = [IsAuthenticated]
@swagger_auto_schema(
operation_description="Add or update a rate for a content.",
request_body=RateSerializer,
responses={
201: "Rate created successfully.",
400: "Invalid input."
}
)
def post(self, request):
"""
Add or update a rate for a content.
@ -27,6 +37,15 @@ class RemoveRateView(APIView):
"""
permission_classes = [IsAuthenticated]
@swagger_auto_schema(
operation_description="Remove a rate by setting its status to False.",
request_body=RateStatusSerializer,
responses={
200: "Rate removed successfully.",
404: "Rate not found.",
400: "Invalid input."
}
)
def post(self, request):
"""
Remove a rate by setting its status to False.

Loading…
Cancel
Save