From d6afe2cc54c0991217480b02454ecc9ab2c8bf74 Mon Sep 17 00:00:00 2001 From: "H.shokhmgar86" Date: Mon, 10 Aug 2026 14:28:29 +0330 Subject: [PATCH] feat: implement REST API views for article, hadis, library, podcast, and video modules --- apps/article/views.py | 5 +++-- apps/hadis/views/hadis.py | 5 +++-- apps/library/views.py | 5 +++-- apps/podcast/views.py | 5 +++-- apps/video/views.py | 5 +++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/article/views.py b/apps/article/views.py index 472ceb0..7609ca8 100755 --- a/apps/article/views.py +++ b/apps/article/views.py @@ -64,8 +64,9 @@ class PinnedArticleCollectionListView(generics.ListAPIView): def get_queryset(self): return PinnedArticleCollection.objects.filter( status=True, - display_position=ArticleCollection.DisplayPosition.PINNED - ).order_by('order', '-created_at') + display_position=ArticleCollection.DisplayPosition.PINNED, + articles__isnull=False + ).distinct().order_by('order', '-created_at') def list(self, request, *args, **kwargs): response = super().list(request, *args, **kwargs) diff --git a/apps/hadis/views/hadis.py b/apps/hadis/views/hadis.py index 64831d8..b67f4d1 100644 --- a/apps/hadis/views/hadis.py +++ b/apps/hadis/views/hadis.py @@ -33,8 +33,9 @@ class PinnedHadisCollectionListView(ListAPIView): def get_queryset(self): return HadisCollection.objects.filter( status=True, - display_position=HadisCollection.DisplayPosition.PINNED - ).order_by('order', '-created_at') + display_position=HadisCollection.DisplayPosition.PINNED, + hadis_items__isnull=False + ).distinct().order_by('order', '-created_at') def list(self, request, *args, **kwargs): # 1. گرفتن خروجی استاندارد لیست مجموعه‌ها diff --git a/apps/library/views.py b/apps/library/views.py index 7d1e23a..127a928 100644 --- a/apps/library/views.py +++ b/apps/library/views.py @@ -67,8 +67,9 @@ class PinnedBookCollectionListView(ListAPIView): def get_queryset(self): return BookCollection.objects.filter( status=True, - display_position=BookCollection.DisplayPosition.PINNED - ).order_by('order', '-created_at') + display_position=BookCollection.DisplayPosition.PINNED, + books__isnull=False + ).distinct().order_by('order', '-created_at') def list(self, request, *args, **kwargs): diff --git a/apps/podcast/views.py b/apps/podcast/views.py index b0bba13..361fcf6 100644 --- a/apps/podcast/views.py +++ b/apps/podcast/views.py @@ -71,8 +71,9 @@ class PinnedPodcastCollectionListView(generics.ListAPIView): def get_queryset(self): return PinnedPodcastCollection.objects.filter( status=True, - display_position=PodcastCollection.DisplayPosition.PINNED - ).order_by('order', '-created_at') + display_position=PodcastCollection.DisplayPosition.PINNED, + podcasts__isnull=False + ).distinct().order_by('order', '-created_at') def list(self, request, *args, **kwargs): response = super().list(request, *args, **kwargs) diff --git a/apps/video/views.py b/apps/video/views.py index 8641286..30b260f 100644 --- a/apps/video/views.py +++ b/apps/video/views.py @@ -84,8 +84,9 @@ class PinnedVideoCollectionListView(generics.ListAPIView): def get_queryset(self): queryset = PinnedVideoCollection.objects.filter( status=True, - display_position=VideoCollection.DisplayPosition.PINNED - ).order_by('order', '-created_at') + display_position=VideoCollection.DisplayPosition.PINNED, + related_playlists__isnull=False + ).distinct().order_by('order', '-created_at') # Filter by bookmarks if requested is_bookmark = self.request.query_params.get('is_bookmark', '').lower()