from rest_framework import generics from ..models import BookReference from ..serializers.reference_v2 import BookReferenceV2DetailSerializer from drf_yasg.utils import swagger_auto_schema class BookReferenceV2DetailView(generics.RetrieveAPIView): """ V2 View to retrieve Book Reference details, formatted with tabs (Information, Excerpts, Volumes) and supporting multiple editions per book. """ queryset = BookReference.objects.all() serializer_class = BookReferenceV2DetailSerializer lookup_field = 'slug' def get_queryset(self): return ( BookReference.objects .filter(slug=self.kwargs.get('slug')) .prefetch_related( 'authors', 'editions__volumes', 'volumes', 'hadis_references__hadis' ) ) @swagger_auto_schema( operation_summary="Get V2 Book Reference Detail", operation_description="Retrieve structured metadata for a book reference, including its editions, related hadiths (excerpts), and volumes.", tags=['Dobodbi - Hadis (V2)'], responses={200: BookReferenceV2DetailSerializer} ) def get(self, request, *args, **kwargs): return super().get(request, *args, **kwargs) from utils.pagination import NoPagination from ..serializers.reference_v2 import BookReferenceV2SyncSerializer class BookReferenceV2SyncView(generics.ListAPIView): """ API view to sync all V2 book reference data for offline mode Returns all book references with editions, volumes, and related hadises """ serializer_class = BookReferenceV2SyncSerializer pagination_class = NoPagination @swagger_auto_schema( operation_summary="Sync V2 Book References", operation_description="Returns all book references for offline sync.", tags=['Dobodbi - Hadis (V2)'], responses={200: BookReferenceV2SyncSerializer(many=True)} ) def get(self, request, *args, **kwargs): return super().get(request, *args, **kwargs) def get_queryset(self): return ( BookReference.objects .select_related() .prefetch_related( 'authors', 'attributes', 'images', 'editions__volumes', 'volumes', 'hadis_references__hadis' ) .order_by('id') )