from django.urls import path from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView,HadisMainListView, HadisFiltersView 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,key_prefix='hadis_api')(vary_on_headers('Accept-Language')(view_func)) urlpatterns = [ # Most specific first (with parameters) 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/', 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//', 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', 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/', 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/', 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 ]