from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from rest_framework import status # Swagger documentation for HadisSectListView hadis_sect_list_swagger = swagger_auto_schema( operation_description="Get list of all active Hadis sects grouped by sect type (Shia/Sunni)", operation_summary="List Hadis Sects", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="List of hadis sects grouped by type with count", examples={ "application/json": { "count": 4, "results": { "shia": [ { "id": 1, "title": "Twelver Shia", "seo_field": None }, { "id": 2, "title": "Ismaili Shia", "seo_field": None } ], "sunni": [ { "id": 3, "title": "Hanafi", "seo_field": None }, { "id": 4, "title": "Maliki", "seo_field": None } ] } } } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for HadisCategoryTreeView hadis_category_tree_swagger = swagger_auto_schema( operation_description="Get hierarchical tree structure of Hadis categories for a specific sect, grouped by source type (Quran/Hadith)", operation_summary="Get Hadis Category Tree by Sect", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'sect_id', openapi.IN_PATH, description="ID of the Hadis sect", type=openapi.TYPE_INTEGER, required=True ) ], responses={ status.HTTP_200_OK: openapi.Response( description="Hierarchical tree structure of categories with total count", examples={ "application/json": { "count": 6, "results": { "quran": [ { "id": 1, "name": "Tafsir", "hadis_count": 150, "has_hadis": False, "order": 1, "xmind_file": "http://example.com/media/xmind/tafsir.xmind", "has_xmind_file": True, "children_count": 2, "children": [ { "id": 2, "name": "Surah Al-Fatiha", "hadis_count": 25, "has_hadis": True, "order": 1, "xmind_file": None, "has_xmind_file": False, "children_count": 0, "children": [] }, { "id": 3, "name": "Surah Al-Baqarah", "hadis_count": 125, "has_hadis": True, "order": 2, "xmind_file": "http://example.com/media/xmind/baqarah.xmind", "has_xmind_file": True, "children_count": 0, "children": [] } ] } ], "hadith": [ { "id": 4, "name": "Sahih Bukhari", "hadis_count": 300, "has_hadis": False, "order": 1, "xmind_file": "http://example.com/media/xmind/bukhari.xmind", "has_xmind_file": True, "children_count": 2, "children": [ { "id": 5, "name": "Book of Faith", "hadis_count": 50, "has_hadis": True, "order": 1, "xmind_file": None, "has_xmind_file": False, "children_count": 0, "children": [] }, { "id": 6, "name": "Book of Prayer", "hadis_count": 250, "has_hadis": True, "order": 2, "xmind_file": "http://example.com/media/xmind/prayer.xmind", "has_xmind_file": True, "children_count": 0, "children": [] } ] } ] } } } ), status.HTTP_404_NOT_FOUND: openapi.Response( description="Sect not found" ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for HadisListView hadis_list_swagger = swagger_auto_schema( operation_description="Get paginated list of Hadis for a specific category with translations based on request language", operation_summary="List Hadis by Category", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'category_id', openapi.IN_PATH, description="ID of the Hadis category", type=openapi.TYPE_INTEGER, required=True ), openapi.Parameter( 'page', openapi.IN_QUERY, description="Page number for pagination", type=openapi.TYPE_INTEGER, required=False ), openapi.Parameter( 'Accept-Language', openapi.IN_HEADER, description="Language code for translations (en, fa, ar, ur)", type=openapi.TYPE_STRING, required=False, default='en' ) ], responses={ status.HTTP_200_OK: openapi.Response( description="Paginated list of hadis", examples={ "application/json": { "count": 150, "next": "http://example.com/api/hadis/category/1/hadis/?page=2", "previous": None, "results": [ { "id": 1, "number": 1, "title": "The first hadis about faith", "category": { "id": 1, "title": "Book of Faith" }, "translation": "This is the English translation of the hadis" }, { "id": 2, "number": 2, "title": "The second hadis about prayer", "category": { "id": 1, "title": "Book of Faith" }, "translation": "This is the English translation of the second hadis" } ] } } ), status.HTTP_404_NOT_FOUND: openapi.Response( description="Category not found" ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) hadis_detail_swagger = swagger_auto_schema( operation_summary="Get Hadis Details", operation_description="Retrieve detailed information about a specific hadis including status, tags, transmitters, and references", tags=['Hadis'], responses={ 200: openapi.Response( description="Hadis details retrieved successfully", schema=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER, description='Hadis ID'), 'number': openapi.Schema(type=openapi.TYPE_INTEGER, description='Hadis number'), 'title': openapi.Schema(type=openapi.TYPE_STRING, description='Hadis title'), 'text': openapi.Schema(type=openapi.TYPE_STRING, description='Arabic text of hadis'), 'translation': openapi.Schema(type=openapi.TYPE_STRING, description='Translation in request language'), 'explanation': openapi.Schema(type=openapi.TYPE_STRING, description='Detailed explanation'), 'address': openapi.Schema(type=openapi.TYPE_STRING, description='Source address'), 'hadis_status_text': openapi.Schema(type=openapi.TYPE_STRING, description='Status description'), 'links': openapi.Schema( type=openapi.TYPE_ARRAY, items=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'title': openapi.Schema(type=openapi.TYPE_STRING), 'link': openapi.Schema(type=openapi.TYPE_STRING) } ), description='Related links' ), 'status': openapi.Schema(type=openapi.TYPE_BOOLEAN, description='Active status'), 'category': openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'title': openapi.Schema(type=openapi.TYPE_STRING), 'category_type': openapi.Schema(type=openapi.TYPE_STRING) } ), 'hadis_status': openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'title': openapi.Schema(type=openapi.TYPE_STRING), 'color': openapi.Schema(type=openapi.TYPE_STRING) } ), 'tags': openapi.Schema( type=openapi.TYPE_ARRAY, items=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'title': openapi.Schema(type=openapi.TYPE_STRING) } ) ), 'transmitters': openapi.Schema( type=openapi.TYPE_ARRAY, items=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'order': openapi.Schema(type=openapi.TYPE_INTEGER), 'is_gap': openapi.Schema(type=openapi.TYPE_BOOLEAN), 'transmitter': openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'full_name': openapi.Schema(type=openapi.TYPE_STRING), 'birth_year_hijri': openapi.Schema(type=openapi.TYPE_INTEGER), 'death_year_hijri': openapi.Schema(type=openapi.TYPE_INTEGER), 'description': openapi.Schema(type=openapi.TYPE_STRING) } ) } ) ), 'references': openapi.Schema( type=openapi.TYPE_ARRAY, items=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'page_number': openapi.Schema(type=openapi.TYPE_STRING), 'hadis_number_in_book': openapi.Schema(type=openapi.TYPE_STRING), 'description': openapi.Schema(type=openapi.TYPE_STRING), 'book': openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'title': openapi.Schema(type=openapi.TYPE_STRING), 'summary_title': openapi.Schema(type=openapi.TYPE_STRING), 'publisher': openapi.Schema(type=openapi.TYPE_STRING), 'year_of_publication': openapi.Schema(type=openapi.TYPE_STRING) } ), 'images': openapi.Schema( type=openapi.TYPE_ARRAY, items=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'id': openapi.Schema(type=openapi.TYPE_INTEGER), 'thumbnail': openapi.Schema(type=openapi.TYPE_STRING), 'priority': openapi.Schema(type=openapi.TYPE_INTEGER) } ) ) } ) ) } ) ), 404: openapi.Response(description="Hadis not found") } ) # Swagger documentation for HadisCollectionListView hadis_collections_swagger = swagger_auto_schema( operation_description="Get list of all active hadis collections for browsing and categorization", operation_summary="List Hadis Collections", operation_id="getHadisCollections", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="List of hadis collections", examples={ "application/json": [ { "id": 1, "title": "Collection Title", "description": "Collection description", "order": 1, "status": True } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for HadisInfoView hadis_info_swagger = swagger_auto_schema( operation_description="Get statistical information about hadis database including counts of categories, references, bookmarks, and narrators", operation_summary="Get Hadis Statistics", operation_id="getHadisInfo", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="Hadis database statistics", examples={ "application/json": { "category_count": 25, "reference_count": 150, "bookmark_count": 75, "narrator_count": 200 } } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for HadisSyncView hadis_sync_swagger = swagger_auto_schema( operation_description="Get complete hadis data for offline synchronization including all categories, hadis, and related information", operation_summary="Sync Hadis Data", operation_id="syncHadisData", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="Complete hadis data for synchronization", examples={ "application/json": { "categories": [], "hadis": [], "references": [], "transmitters": [] } } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for TransmitterView transmitter_list_swagger = swagger_auto_schema( operation_description="Get list of transmitters (narrators) with optional filtering by status, madhhab, and generation", operation_summary="List Transmitters", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'status', openapi.IN_QUERY, description='Filter by reliability status (very_reliable, reliable, acceptable, weak, very_weak, unknown)', type=openapi.TYPE_STRING, required=False ), openapi.Parameter( 'madhhab', openapi.IN_QUERY, description='Filter by madhhab/school (shia, sunni, hanafi, maliki, shafii, hanbali, other, unknown)', type=openapi.TYPE_STRING, required=False ), openapi.Parameter( 'generation', openapi.IN_QUERY, description='Filter by generation (1-10 representing narrator layers/classes)', type=openapi.TYPE_INTEGER, required=False ), ], responses={ status.HTTP_200_OK: openapi.Response( description="List of transmitters with optional filtering applied", examples={ "application/json": [ { "id": 1, "full_name": "Abu Daud Sulaiman ibn al-Ash'ath al-Azdi al-Sijistani", "birth_year_hijri": 202, "death_year_hijri": 275, "description": "Imam Abu Daud, compiler of Sunan Abu Daud, one of the six major hadith collections" }, { "id": 2, "full_name": "Muhammad ibn Isma'il al-Bukhari", "birth_year_hijri": 194, "death_year_hijri": 256, "description": "Imam Bukhari, compiler of Sahih al-Bukhari, the most authentic hadith collection" } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for TransmitterDetailView transmitter_detail_swagger = swagger_auto_schema( operation_description="Get detailed information about a specific transmitter including their scholarly opinions and hadith transmissions", operation_summary="Get Transmitter Details", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'transmitters_id', openapi.IN_PATH, description="ID of the transmitter", type=openapi.TYPE_INTEGER, required=True ) ], responses={ status.HTTP_200_OK: openapi.Response( description="Detailed transmitter information with nested opinions and transmissions", examples={ "application/json": { "id": 1, "full_name": "Abu Daud Sulaiman ibn al-Ash'ath al-Azdi al-Sijistani", "kunya": "Abu Daud", "known_as": "Imam Abu Daud", "nickname": "Al-Sijistani", "origin": "Sijistan (modern Sistan)", "lived_in": "Basra, Baghdad", "died_in": "Basra", "birth_year_hijri": 202, "death_year_hijri": 275, "age_at_death": 73, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_bukhari": False, "in_sahih_muslim": True, "description": "Imam Abu Daud, compiler of Sunan Abu Daud", "thumbnail": "http://example.com/media/transmitters/abu_daud.jpg", "opinions": [ { "id": 1, "scholar_name": "Ibn Hajar al-Asqalani", "opinion_text": "Abu Daud was a reliable and trustworthy narrator", "status": "confirmed", "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z" } ], "hadis_transmissions": [ { "id": 1, "hadis": { "id": 1001, "number": 1, "title": "The first hadith", "category": { "id": 1, "title": "Book of Faith" }, "translation": "Actions are by intentions" }, "order": 1, "status": "reliable", "narrator_layer": 1, "created_at": "2024-01-01T00:00:00Z" } ] } } ), status.HTTP_404_NOT_FOUND: openapi.Response( description="Transmitter not found" ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for BookReferencesView book_references_list_swagger = swagger_auto_schema( operation_description="Get list of all book references used in hadith studies including their metadata, images, and volume counts", operation_summary="List Book References", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="List of all book references", examples={ "application/json": [ { "id": 1, "title": "Sahih al-Bukhari", "description": "The most authentic collection of hadith compiled by Imam Bukhari", "rate": 5.0, "image": [ { "id": 1, "image": "http://example.com/media/books/bukhari_cover.jpg", "order": 1, "description": "Front cover of Sahih al-Bukhari", "created_at": "2024-01-01T00:00:00Z" } ], "volume_count": 9 }, { "id": 2, "title": "Sahih Muslim", "description": "The second most authentic collection of hadith compiled by Imam Muslim", "rate": 4.9, "image": [], "volume_count": 7 } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for BookAuthorView book_authors_list_swagger = swagger_auto_schema( operation_description="Get list of all book authors who have contributed to hadith literature", operation_summary="List Book Authors", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="List of all book authors", examples={ "application/json": [ { "id": 1, "name": "Muhammad ibn Isma'il al-Bukhari", "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z" }, { "id": 2, "name": "Muslim ibn al-Hajjaj al-Qushayri", "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z" } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for BookDetailView book_detail_swagger = swagger_auto_schema( operation_description="Get detailed information about a specific book reference including authors, images, and related hadiths", operation_summary="Get Book Reference Details", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'bookreference_id', openapi.IN_PATH, description="ID of the book reference", type=openapi.TYPE_INTEGER, required=True ) ], responses={ status.HTTP_200_OK: openapi.Response( description="Detailed book reference information", examples={ "application/json": { "id": 1, "title": "Sahih al-Bukhari", "description": "The most authentic collection of hadith compiled by Imam Bukhari", "language": "Arabic", "isbn": "978-1234567890", "volume": "9 volumes", "year_of_publication": "846", "number_page": 4200, "rate": 5.0, "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z", "author": [ { "id": 1, "name": "Muhammad ibn Isma'il al-Bukhari", "created_at": "2024-01-01T00:00:00Z", "updated_at": "2024-01-01T00:00:00Z" } ], "image": [ { "id": 1, "image": "http://example.com/media/books/bukhari_cover.jpg", "order": 1, "description": "Front cover of Sahih al-Bukhari", "created_at": "2024-01-01T00:00:00Z" } ], "hadis": [ { "id": 1, "number": 1, "title": "The first hadith about faith", "category": { "id": 1, "title": "Book of Faith" }, "translation": "Actions are by intentions" } ] } } ), status.HTTP_404_NOT_FOUND: openapi.Response( description="Book reference not found" ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for CategoriesView categories_list_swagger = swagger_auto_schema( operation_description="Get list of all hadith categories with their associated sect information", operation_summary="List All Categories", tags=['Hadis'], responses={ status.HTTP_200_OK: openapi.Response( description="List of all hadith categories", examples={ "application/json": [ { "id": 1, "title": "Book of Faith", "sect_id": 1, "sect_type": "sunni", "source_type": "hadith", "description": "Hadiths related to Islamic faith and beliefs", "order": 1, "slug": "book-of-faith", "xmind_file": "http://example.com/media/xmind/faith.xmind", "children_count": 3 }, { "id": 2, "title": "Book of Prayer", "sect_id": 1, "sect_type": "sunni", "source_type": "hadith", "description": "Hadiths about salah (prayer) and related rulings", "order": 2, "slug": "book-of-prayer", "xmind_file": None, "children_count": 0 } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for CategoriesBySectView categories_by_sect_swagger = swagger_auto_schema( operation_description="Get list of hadith categories filtered by sect type (shia or sunni)", operation_summary="List Categories by Sect", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'sect_type', openapi.IN_PATH, description="Type of Islamic sect (shia or sunni)", type=openapi.TYPE_STRING, enum=['shia', 'sunni'], required=True ) ], responses={ status.HTTP_200_OK: openapi.Response( description="List of hadith categories filtered by sect type", examples={ "application/json": [ { "id": 1, "title": "Book of Faith", "sect_id": 1, "sect_type": "sunni", "source_type": "hadith", "description": "Hadiths related to Islamic faith and beliefs", "order": 1, "slug": "book-of-faith", "xmind_file": "http://example.com/media/xmind/faith.xmind", "children_count": 3 }, { "id": 2, "title": "Book of Prayer", "sect_id": 1, "sect_type": "sunni", "source_type": "hadith", "description": "Hadiths about salah (prayer) and related rulings", "order": 2, "slug": "book-of-prayer", "xmind_file": None, "children_count": 0 } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for HadisCategoryTreeBySectView categories_tree_by_sect_swagger = swagger_auto_schema( operation_description="Retrieve child categories of a specific parent category (identified by slug) within a given Islamic sect type", operation_summary="Get Category Children by Sect and Slug", operation_id="getCategoryChildrenBySectAndSlug", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'sect_type', openapi.IN_PATH, description="Type of Islamic sect (shia or sunni)", type=openapi.TYPE_STRING, enum=['shia', 'sunni'], required=True ), openapi.Parameter( 'slug', openapi.IN_PATH, description="URL slug of the parent category", type=openapi.TYPE_STRING, required=True ) ], responses={ status.HTTP_200_OK: openapi.Response( description="List of child categories belonging to the specified parent category (identified by slug) within the given sect type", examples={ "application/json": [ { "id": 330, "title": "Толкование суры Аль-Фатиха", "source_type": "quran", "slug": "-1", "sect_id": 20, "sect_type": "shia", "children_count": 0 }, { "id": 331, "title": "Толкование суры Аль-Бакара", "source_type": "quran", "slug": "-19", "sect_id": 20, "sect_type": "shia", "children_count": 0 }, { "id": 332, "title": "Толкование суры Аль Имран", "source_type": "quran", "slug": "-33", "sect_id": 20, "sect_type": "shia", "children_count": 0 } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } ) # Swagger documentation for HadisCategoryTreeBySectSourceView categories_tree_by_sect_source_swagger = swagger_auto_schema( operation_description="Retrieve child categories of a specific parent category (identified by slug) within a given Islamic sect type, additionally filtered by source material type", operation_summary="Get Category Children by Sect, Slug and Source", operation_id="getCategoryChildrenBySectSlugAndSource", tags=['Hadis'], manual_parameters=[ openapi.Parameter( 'sect_type', openapi.IN_PATH, description="Type of Islamic sect (shia or sunni)", type=openapi.TYPE_STRING, enum=['shia', 'sunni'], required=True ), openapi.Parameter( 'slug', openapi.IN_PATH, description="URL slug of the parent category", type=openapi.TYPE_STRING, required=True ), openapi.Parameter( 'source_type', openapi.IN_PATH, description="Type of source material (quran, hadith, history, fatwa, quote)", type=openapi.TYPE_STRING, enum=['quran', 'hadith', 'history', 'fatwa', 'quote'], required=True ) ], responses={ status.HTTP_200_OK: openapi.Response( description="List of child categories belonging to the specified parent category (identified by slug) within the given sect type, additionally filtered by source type", examples={ "application/json": [ { "id": 330, "title": "Толкование суры Аль-Фатиха", "source_type": "quran", "slug": "-1", "sect_id": 20, "sect_type": "shia", "children_count": 0, "has_hadis": False }, { "id": 331, "title": "Толкование суры Аль-Бакара", "source_type": "quran", "slug": "-19", "sect_id": 20, "sect_type": "shia", "children_count": 0, "has_hadis": False }, { "id": 332, "title": "Толкование суры Аль Имран", "source_type": "quran", "slug": "-33", "sect_id": 20, "sect_type": "shia", "children_count": 0, "has_hadis": False } ] } ), status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response( description="Internal server error" ) } )