Files
LibraryApp/backend/apps/shelf_books/views.py
2026-03-22 14:19:17 +01:00

84 lines
2.4 KiB
Python

from rest_framework import generics
from apps.shelf_books.models import ShelfBook
from apps.shelves.models import Shelf
from apps.shelf_books.serializers import ShelfBookSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
from drf_spectacular.utils import extend_schema, extend_schema_view
@extend_schema_view(
get=extend_schema(tags=["Shelf Books"]),
post=extend_schema(tags=["Shelf Books"]),
)
class ShelfBooks(generics.ListCreateAPIView):
queryset = ShelfBook.objects.all()
serializer_class = ShelfBookSerializer
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get_queryset(self):
shelf_id = self.kwargs["shelf_id"]
return ShelfBook.objects.filter(
shelf__id=shelf_id,
shelf__user_id=self.request.user.pk,
).select_related("book", "shelf").prefetch_related("book__authors")
def get_serializer_context(self):
context = super().get_serializer_context()
shelf_id = self.kwargs["shelf_id"]
shelf = Shelf.objects.filter(
id=shelf_id,
user=self.request.user
).first()
context["shelf"] = shelf
return context
@extend_schema_view(
get=extend_schema(tags=["Shelf Books"]),
put=extend_schema(tags=["Shelf Books"]),
patch=extend_schema(tags=["Shelf Books"]),
delete=extend_schema(tags=["Shelf Books"]),
)
class SelectedShelfBook(generics.RetrieveUpdateDestroyAPIView):
queryset = ShelfBook.objects.all()
serializer_class = ShelfBookSerializer
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
lookup_url_kwarg = "book_id"
def get_queryset(self):
return ShelfBook.objects.filter(
shelf_id=self.kwargs["shelf_id"],
shelf__user=self.request.user,
).select_related("book", "shelf").prefetch_related("book__authors")
def get_object(self):
queryset = self.get_queryset()
return generics.get_object_or_404(
queryset,
book_id=self.kwargs["book_id"]
)
def get_serializer_context(self):
context = super().get_serializer_context()
shelf = Shelf.objects.filter(
id=self.kwargs["shelf_id"],
user=self.request.user
).first()
context["shelf"] = shelf
return context