from django.urls import path, include from rest_framework.routers import SimpleRouter from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView ,test_deploy,debug_headers,HadisCategoryXMindView from .views.hadis import ( HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView,HadisMainListView, HadisFiltersView, HadisLayersView,PinnedHadisCollectionListView, HadisFiltersSyncAPIView, HadisCorrectionDetailView, HadisInterpretationDetailView ) from .views.transmitter import ( TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView, TransmitterFiltersView, NarratorArgumentsListView , NarratorTeachersView, NarratorStudentsView, TransmitterOriginalTextDetailView ) from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView, BookAttributeView from .views.reference_v2 import BookReferenceV2DetailView, BookReferenceV2SyncView, BookReferenceV2ListView from .views.version import ContentReleaseSyncView from .views.info import HadisInfoView from .views_admin import ( AdminHadisCategoryViewSet, AdminHadisViewSet, AdminHadisCorrectionViewSet, AdminHadisInterpretationViewSet, AdminHadisStatusViewSet, AdminHadisTagViewSet, AdminHadisCollectionViewSet, AdminBookSubjectAreaViewSet, AdminBookTypeViewSet, AdminBookAuthorViewSet, AdminBookAttributeViewSet, AdminBookReferenceImageViewSet, AdminBookReferenceDocumentViewSet, AdminBookReferenceViewSet, AdminTransmitterViewSet, AdminTransmitterReliabilityViewSet, DovodiBookSubjectAreaViewSet, DovodiBookTypeViewSet, DovodiNarratorLayerViewSet, DovodiTransmitterReliabilityViewSet, DovodiOpinionStatusViewSet, DovodiHadisSectViewSet, DovodiHadisCategoryViewSet, AdminCategoryQuranVerseViewSet, AdminHadisTransmitterViewSet ) from .views.reference_v2 import BookAuthorListView, BookAuthorDetailView, AuthorReferencesListView, BookAuthorSyncView 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)) admin_router = SimpleRouter() admin_router.register(r'hadises', AdminHadisViewSet, basename='admin-hadises') admin_router.register(r'categories', AdminHadisCategoryViewSet, basename='admin-hadis-categories') admin_router.register(r'quran-verses', AdminCategoryQuranVerseViewSet, basename='admin-category-quran-verses') admin_router.register(r'dovodi-sects', DovodiHadisSectViewSet, basename='dovodi-hadis-sects') admin_router.register(r'dovodi-categories', DovodiHadisCategoryViewSet, basename='dovodi-hadis-categories') admin_router.register(r'corrections', AdminHadisCorrectionViewSet, basename='admin-hadis-corrections') admin_router.register(r'interpretations', AdminHadisInterpretationViewSet, basename='admin-hadis-interpretations') admin_router.register(r'statuses', AdminHadisStatusViewSet, basename='admin-hadis-statuses') admin_router.register(r'tags', AdminHadisTagViewSet, basename='admin-hadis-tags') admin_router.register(r'collections', AdminHadisCollectionViewSet, basename='admin-hadis-collections') admin_router.register(r'references', AdminBookReferenceViewSet, basename='admin-book-references') admin_router.register(r'subject-areas', AdminBookSubjectAreaViewSet, basename='admin-book-subject-areas') admin_router.register(r'book-types', AdminBookTypeViewSet, basename='admin-book-types') admin_router.register(r'dovodi-subject-areas', DovodiBookSubjectAreaViewSet, basename='dovodi-book-subject-areas') admin_router.register(r'dovodi-book-types', DovodiBookTypeViewSet, basename='dovodi-book-types') admin_router.register(r'book-authors', AdminBookAuthorViewSet, basename='admin-book-authors') admin_router.register(r'book-attributes', AdminBookAttributeViewSet, basename='admin-book-attributes') admin_router.register(r'book-images', AdminBookReferenceImageViewSet, basename='admin-book-images') admin_router.register(r'book-documents', AdminBookReferenceDocumentViewSet, basename='admin-book-documents') admin_router.register(r'transmitters', AdminTransmitterViewSet, basename='admin-transmitters') admin_router.register(r'transmitter-reliabilities', AdminTransmitterReliabilityViewSet, basename='admin-transmitter-reliabilities') admin_router.register(r'dovodi-narrator-layers', DovodiNarratorLayerViewSet, basename='dovodi-narrator-layers') admin_router.register(r'dovodi-transmitter-reliabilities', DovodiTransmitterReliabilityViewSet, basename='dovodi-transmitter-reliabilities') admin_router.register(r'dovodi-opinion-statuses', DovodiOpinionStatusViewSet, basename='dovodi-opinion-statuses') admin_router.register(r'hadis-transmitters', AdminHadisTransmitterViewSet, basename='admin-hadis-transmitters') # Hide admin viewsets from swagger for prefix, viewset, basename in admin_router.registry: viewset.swagger_schema = None urlpatterns = [ path('sync/authors/', BookAuthorSyncView.as_view(), name='sync-author-list'), path('authors/', BookAuthorListView.as_view(), name='author-list'), path('authors//', BookAuthorDetailView.as_view(), name='author-detail'), path('authors//references/', AuthorReferencesListView.as_view(), name='author-references'), # Admin endpoints path('admin/', include(admin_router.urls)), # Most specific first (with parameters) path('pinned-collections/', PinnedHadisCollectionListView.as_view(), name='pinned-hadis-collection-list'), 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('v2/sync/references/', BookReferenceV2SyncView.as_view(), name='reference-sync-v2'), path('sync/version/', ContentReleaseSyncView.as_view(), name='content-release-sync'), path('sync/filters/', HadisFiltersSyncAPIView.as_view(), name='hadis-filters-sync'), path('info/', 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 # Hadis paths path('category//xmind/', HadisCategoryXMindView.as_view(), name='hadis-category-xmind'), # ← Must be before other category 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'), # Narrator paths path('narrators//teachers/', NarratorTeachersView.as_view(), name='narrator-teachers'), path('narrators//students/', NarratorStudentsView.as_view(), name='narrator-students'), path('narrators//arguments', NarratorArgumentsListView.as_view(), name='narrator-arguments'), 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'), # Reference paths path('v2/references//', BookReferenceV2DetailView.as_view(), name='reference-detail-v2'), path('v2/references/', BookReferenceV2ListView.as_view(), name='reference-list-v2'), path('references/', BookDetailView.as_view(), name='reference-detail'), path('references/', 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('/transmitters/layers/', HadisLayersView.as_view(), name='hadis-layers'), path('/corrections/', HadisCorrectionsView.as_view(), name='hadis-corrections'), path('/', HadisBasicView.as_view(), name='hadis-basic'), # ← Least specific LAST # path('test/test-deploy',test_deploy , name='test'), # path('debug-headers',debug_headers , name='headers'), # Interpretation Detail Endpoint (تفسیر بر اساس آی‌دی) path('interpretations//', HadisInterpretationDetailView.as_view(), name='interpretation-detail'), # Correction Detail Endpoint (تصحیح بر اساس اسلاگ) path('corrections//', HadisCorrectionDetailView.as_view(), name='correction-detail'), # Original Text Detail Endpoint (متن اصلی راوی بر اساس اسلاگ) path('original-texts//', TransmitterOriginalTextDetailView.as_view(), name='original-text-detail'), ]