|
|
@ -264,16 +264,29 @@ class HadisListView(ListAPIView): |
|
|
if not HadisCategory.objects.filter(slug=category_slug).exists(): |
|
|
if not HadisCategory.objects.filter(slug=category_slug).exists(): |
|
|
return Hadis.objects.none() |
|
|
return Hadis.objects.none() |
|
|
|
|
|
|
|
|
return Hadis.objects.filter( |
|
|
|
|
|
|
|
|
queryset = Hadis.objects.filter( |
|
|
category__slug=category_slug, |
|
|
category__slug=category_slug, |
|
|
status=True |
|
|
status=True |
|
|
).order_by('number').annotate( |
|
|
|
|
|
|
|
|
).annotate( |
|
|
# distinct=True is CRITICAL here. |
|
|
# distinct=True is CRITICAL here. |
|
|
# Without it, if 3 narrators are from "Layer 1", it counts as 3. |
|
|
# Without it, if 3 narrators are from "Layer 1", it counts as 3. |
|
|
# With it, it counts as 1 (unique layer). |
|
|
# With it, it counts as 1 (unique layer). |
|
|
layer_count=Count('transmitters__narrator_layer', distinct=True) |
|
|
layer_count=Count('transmitters__narrator_layer', distinct=True) |
|
|
).select_related('category') |
|
|
).select_related('category') |
|
|
|
|
|
|
|
|
|
|
|
# Filter by bookmarks if provided |
|
|
|
|
|
is_bookmark = self.request.query_params.get('is_bookmark', '').lower() |
|
|
|
|
|
if is_bookmark == 'true' and self.request.user.is_authenticated: |
|
|
|
|
|
from apps.bookmark.models.bookmark import Bookmark |
|
|
|
|
|
bookmarked_ids = Bookmark.objects.filter( |
|
|
|
|
|
user=self.request.user, |
|
|
|
|
|
service=Bookmark.ServiceChoices.HADITH, |
|
|
|
|
|
status=True |
|
|
|
|
|
).values_list('content_id', flat=True) |
|
|
|
|
|
queryset = queryset.filter(id__in=bookmarked_ids) |
|
|
|
|
|
|
|
|
|
|
|
return queryset |
|
|
|
|
|
|
|
|
def get_serializer_context(self): |
|
|
def get_serializer_context(self): |
|
|
"""Add user bookmarks to serializer context to avoid caching issues""" |
|
|
"""Add user bookmarks to serializer context to avoid caching issues""" |
|
|
context = super().get_serializer_context() |
|
|
context = super().get_serializer_context() |
|
|
@ -328,6 +341,17 @@ class HadisMainListView(ListAPIView): |
|
|
if category_filter: |
|
|
if category_filter: |
|
|
queryset = queryset.filter(category__title__icontains=category_filter) |
|
|
queryset = queryset.filter(category__title__icontains=category_filter) |
|
|
|
|
|
|
|
|
|
|
|
# Filter by bookmarks if provided |
|
|
|
|
|
is_bookmark = self.request.query_params.get('is_bookmark', '').lower() |
|
|
|
|
|
if is_bookmark == 'true' and self.request.user.is_authenticated: |
|
|
|
|
|
from apps.bookmark.models.bookmark import Bookmark |
|
|
|
|
|
bookmarked_ids = Bookmark.objects.filter( |
|
|
|
|
|
user=self.request.user, |
|
|
|
|
|
service=Bookmark.ServiceChoices.HADITH, |
|
|
|
|
|
status=True |
|
|
|
|
|
).values_list('content_id', flat=True) |
|
|
|
|
|
queryset = queryset.filter(id__in=bookmarked_ids) |
|
|
|
|
|
|
|
|
return queryset |
|
|
return queryset |
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs): |
|
|
def list(self, request, *args, **kwargs): |
|
|
@ -569,7 +593,20 @@ class HadisCorrectionsView(ListAPIView): |
|
|
hadis = Hadis.objects.get(slug=hadis_slug, status=True) |
|
|
hadis = Hadis.objects.get(slug=hadis_slug, status=True) |
|
|
if not HadisCorrection.objects.filter(hadis=hadis).exists(): |
|
|
if not HadisCorrection.objects.filter(hadis=hadis).exists(): |
|
|
return Hadis.objects.none() |
|
|
return Hadis.objects.none() |
|
|
return HadisCorrection.objects.filter(hadis=hadis) |
|
|
|
|
|
|
|
|
queryset = HadisCorrection.objects.filter(hadis=hadis) |
|
|
|
|
|
|
|
|
|
|
|
# Filter by bookmarks if provided |
|
|
|
|
|
is_bookmark = self.request.query_params.get('is_bookmark', '').lower() |
|
|
|
|
|
if is_bookmark == 'true' and self.request.user.is_authenticated: |
|
|
|
|
|
from apps.bookmark.models.bookmark import Bookmark |
|
|
|
|
|
bookmarked_ids = Bookmark.objects.filter( |
|
|
|
|
|
user=self.request.user, |
|
|
|
|
|
service=Bookmark.ServiceChoices.HADITH_CORRECTION, |
|
|
|
|
|
status=True |
|
|
|
|
|
).values_list('content_id', flat=True) |
|
|
|
|
|
queryset = queryset.filter(id__in=bookmarked_ids) |
|
|
|
|
|
|
|
|
|
|
|
return queryset |
|
|
except Hadis.DoesNotExist: |
|
|
except Hadis.DoesNotExist: |
|
|
return HadisCorrection.objects.none() |
|
|
return HadisCorrection.objects.none() |
|
|
|
|
|
|
|
|
|