diff --git a/apps/hadis/urls.py b/apps/hadis/urls.py index 57a2c11..45e7ef0 100644 --- a/apps/hadis/urls.py +++ b/apps/hadis/urls.py @@ -4,45 +4,51 @@ from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, from .views.transmitter import TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView, TransmitterFiltersView from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView, BookAttributeView from .views.info import HadisInfoView +from django.views.decorators.cache import cache_page +from django.views.decorators.vary import vary_on_headers + +# Helper function to avoid ugly nesting +def cached_view(view_func): + return cache_page(60*60*2)(vary_on_headers('Accept-Language')(view_func)) urlpatterns = [ # Most specific first (with parameters) - path('collections/', HadisCollectionListView.as_view(), name='hadis-collection-list'), - path('sync/sects/', HadisCategorySectListView.as_view(), name='hadis-sect-list'), - path('sync/categories/tree/', HadisCategoryTreeView.as_view(), name='hadis-category-tree'), - path('sync/hadis/', HadisSyncView.as_view(), name='hadis-sync'), - path('sync/narrators/', TransmitterSyncView.as_view(), name='transmitter-sync'), - path('sync/references/', BookReferenceSyncView.as_view(), name='reference-sync'), - path('info/', HadisInfoView.as_view(), name='hadis-info'), - + path('collections/', cached_view(HadisCollectionListView.as_view()), name='hadis-collection-list'), + path('sync/sects/', cached_view(HadisCategorySectListView.as_view()), name='hadis-sect-list'), + path('sync/categories/tree/', cached_view(HadisCategoryTreeView.as_view()), name='hadis-category-tree'), + path('sync/hadis/', cached_view(HadisSyncView.as_view()), name='hadis-sync'), + path('sync/narrators/', cached_view(TransmitterSyncView.as_view()), name='transmitter-sync'), + path('sync/references/', cached_view(BookReferenceSyncView.as_view()), name='reference-sync'), + path('info/', cached_view(HadisInfoView.as_view()), name='hadis-info'), + # Category paths (more specific first) - path('categories/tree/', HadisCategoryTreeNormalView.as_view(), name='hadis-category-tree-normal'), - path('categories////', HadisCategorySelectBySectSourceView.as_view(), name='categories-tree-by-sect-source'), - path('categories///', HadisCategorySelectBySectView.as_view(), name='categories-tree-by-sect'), - path('categories//', CategoriesBySectView.as_view(), name='categories-by-sect'), - path('categories/', CategoriesView.as_view(), name='categories'), # ← Least specific LAST - + path('categories/tree/', cached_view(HadisCategoryTreeNormalView.as_view()), name='hadis-category-tree-normal'), + path('categories////', cached_view(HadisCategorySelectBySectSourceView.as_view()), name='categories-tree-by-sect-source'), + path('categories///', cached_view(HadisCategorySelectBySectView.as_view()), name='categories-tree-by-sect'), + path('categories//', cached_view(CategoriesBySectView.as_view()), name='categories-by-sect'), + path('categories/', cached_view(CategoriesView.as_view()), name='categories'), # ← Least specific LAST + # Hadis paths - path('category//', HadisListView.as_view(), name='hadis-list'), - path('arguments/', HadisMainListView.as_view(), name='hadis-main-list'), - path('arguments/filters/', HadisFiltersView.as_view(), name='hadis-filters'), - + path('category//', cached_view(HadisListView.as_view()), name='hadis-list'), + path('arguments/', cached_view(HadisMainListView.as_view()), name='hadis-main-list'), + path('arguments/filters/', cached_view(HadisFiltersView.as_view()), name='hadis-filters'), + # Narrator paths - path('narrators//opinions', TransmitterOpinionView.as_view(), name='narrator-opinions'), - path('narrators//original_texts', TransmitterOriginalTextView.as_view(), name='narrator-original-texts'), - path('narrators/', TransmitterDetailView.as_view(), name='narrator-detail'), - path('narrators/filters/', TransmitterFiltersView.as_view(), name='narrator-filters'), - path('narrators/', TransmitterView.as_view(), name='narrators'), - + path('narrators//opinions', cached_view(TransmitterOpinionView.as_view()), name='narrator-opinions'), + path('narrators//original_texts', cached_view(TransmitterOriginalTextView.as_view()), name='narrator-original-texts'), + path('narrators/', cached_view(TransmitterDetailView.as_view()), name='narrator-detail'), + path('narrators/filters/', cached_view(TransmitterFiltersView.as_view()), name='narrator-filters'), + path('narrators/', cached_view(TransmitterView.as_view()), name='narrators'), + # Reference paths - path('references/', BookDetailView.as_view(), name='reference-detail'), - path('references/', BookReferencesView.as_view(), name='references'), - + path('references/', cached_view(BookDetailView.as_view()), name='reference-detail'), + path('references/', cached_view(BookReferencesView.as_view()), name='references'), + # Hadis detail paths (with slug, more specific) - path('/detail/', HadisDetailView.as_view(), name='hadis-detail'), - path('/transmitters/', HadisTransmittersView.as_view(), name='hadis-transmitters'), - path('/corrections/', HadisCorrectionsView.as_view(), name='hadis-corrections'), - path('/', HadisBasicView.as_view(), name='hadis-basic'), # ← Least specific LAST - + path('/detail/', cached_view(HadisDetailView.as_view()), name='hadis-detail'), + path('/transmitters/', cached_view(HadisTransmittersView.as_view()), name='hadis-transmitters'), + path('/corrections/', cached_view(HadisCorrectionsView.as_view()), name='hadis-corrections'), + path('/', cached_view(HadisBasicView.as_view()), name='hadis-basic'), # ← Least specific LAST + ] diff --git a/apps/hadis/views/hadis.py b/apps/hadis/views/hadis.py index dfd4fed..7f26eb2 100644 --- a/apps/hadis/views/hadis.py +++ b/apps/hadis/views/hadis.py @@ -116,7 +116,6 @@ class HadisMainListView(ListAPIView): serializer_class = HadisListSerializer pagination_class = PageNumberPagination - @hadis_main_list_swagger def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs)