84 lines
2.4 KiB
Python
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
|
|
|
|
|