|
|
@ -8,10 +8,74 @@ from rest_framework.response import Response |
|
|
from django.db.models import Count |
|
|
from django.db.models import Count |
|
|
from django.db.models import Prefetch |
|
|
from django.db.models import Prefetch |
|
|
from ..serializers.category import get_localized_text |
|
|
from ..serializers.category import get_localized_text |
|
|
from ..models import HadisCategory, Hadis, HadisCollection,HadisTransmitter , HadisCorrection ,HadisReference, HadisStatus ,ReferenceImage |
|
|
|
|
|
from ..serializers import HadisListSerializer, HadisBasicSerializer, HadisDetailSerializer, HadisCollectionListSerializer, HadisSyncSerializer,HadisCorrectionSerializer,HadisTransmitterListSerializer , SimpleCategory, NarratorLayerSerializer |
|
|
|
|
|
|
|
|
from ..models import Transmitters, HadisCategory, Hadis, HadisCollection,HadisTransmitter , HadisCorrection ,HadisReference, HadisStatus ,ReferenceImage |
|
|
|
|
|
from ..serializers import HadisListSerializer, HadisBasicSerializer, HadisDetailSerializer, HadisCollectionListSerializer, HadisSyncSerializer,HadisCorrectionSerializer,HadisTransmitterListSerializer , SimpleCategory, NarratorLayerSerializer , PinnedHadisCollectionSerializer |
|
|
from ..docs import arguments_filters_swagger ,hadis_list_swagger, hadis_detail_swagger, hadis_collections_swagger, hadis_sync_swagger, hadis_transmitters_swagger, hadis_corrections_swagger, hadis_basic_swagger, hadis_main_list_swagger, hadis_layers_swagger |
|
|
from ..docs import arguments_filters_swagger ,hadis_list_swagger, hadis_detail_swagger, hadis_collections_swagger, hadis_sync_swagger, hadis_transmitters_swagger, hadis_corrections_swagger, hadis_basic_swagger, hadis_main_list_swagger, hadis_layers_swagger |
|
|
|
|
|
|
|
|
|
|
|
from rest_framework import status |
|
|
|
|
|
|
|
|
|
|
|
class PinnedHadisCollectionListView(ListAPIView): |
|
|
|
|
|
""" |
|
|
|
|
|
API view to list pinned hadis collections with metadata info |
|
|
|
|
|
""" |
|
|
|
|
|
serializer_class = PinnedHadisCollectionSerializer |
|
|
|
|
|
pagination_class = NoPagination |
|
|
|
|
|
permission_classes = [IsAuthenticated] |
|
|
|
|
|
authentication_classes = [TokenAuthentication] |
|
|
|
|
|
|
|
|
|
|
|
@hadis_collections_swagger |
|
|
|
|
|
def get(self, request, *args, **kwargs): |
|
|
|
|
|
return self.list(request, *args, **kwargs) |
|
|
|
|
|
|
|
|
|
|
|
def get_queryset(self): |
|
|
|
|
|
return HadisCollection.objects.filter( |
|
|
|
|
|
status=True, |
|
|
|
|
|
pin_top=True |
|
|
|
|
|
).order_by('order', '-created_at') |
|
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs): |
|
|
|
|
|
# 1. گرفتن خروجی استاندارد لیست مجموعهها |
|
|
|
|
|
response = super().list(request, *args, **kwargs) |
|
|
|
|
|
|
|
|
|
|
|
# 2. محاسبه آمار (Info) |
|
|
|
|
|
# تعداد کتگوریهای فعال |
|
|
|
|
|
categories_count = HadisCategory.objects.count() |
|
|
|
|
|
|
|
|
|
|
|
# تعداد نریتورها (راویان) |
|
|
|
|
|
narrators_count = Transmitters.objects.count() |
|
|
|
|
|
|
|
|
|
|
|
# تعداد سورسها (کتابهای منبع) |
|
|
|
|
|
# فرض بر این است که BookReference مدل منابع شماست |
|
|
|
|
|
from apps.hadis.models import BookReference |
|
|
|
|
|
sources_count = BookReference.objects.count() |
|
|
|
|
|
|
|
|
|
|
|
# تعداد بوکمارکهای کاربر در سرویس حدیث |
|
|
|
|
|
from apps.bookmark.models.bookmark import Bookmark |
|
|
|
|
|
bookmarks_count = Bookmark.objects.filter( |
|
|
|
|
|
user=request.user, |
|
|
|
|
|
service=Bookmark.ServiceChoices.HADITH, |
|
|
|
|
|
status=True |
|
|
|
|
|
).count() |
|
|
|
|
|
|
|
|
|
|
|
# 3. ساختن دیکشنری info |
|
|
|
|
|
info = { |
|
|
|
|
|
"categories_count": categories_count, |
|
|
|
|
|
# "bookmarks_count": bookmarks_count, |
|
|
|
|
|
"narrators_count": narrators_count, |
|
|
|
|
|
"sources_count": sources_count, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
# 4. بازسازی دیتای نهایی مشابه اپ ویدیو |
|
|
|
|
|
custom_data = { |
|
|
|
|
|
"count": len(response.data) if isinstance(response.data, list) else response.data.get("count"), |
|
|
|
|
|
"next": response.data.get("next") if isinstance(response.data, dict) else None, |
|
|
|
|
|
"previous": response.data.get("previous") if isinstance(response.data, dict) else None, |
|
|
|
|
|
"info": info, |
|
|
|
|
|
"results": response.data if isinstance(response.data, list) else response.data.get("results") |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return Response(custom_data, status=status.HTTP_200_OK) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HadisCollectionListView(ListAPIView): |
|
|
class HadisCollectionListView(ListAPIView): |
|
|
""" |
|
|
""" |
|
|
|