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": [ { "id": 2, "name": "Surah Al-Fatiha", "hadis_count": 25, "has_hadis": True, "order": 1, "xmind_file": None, "has_xmind_file": False, "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": [] } ] } ], "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": [ { "id": 5, "name": "Book of Faith", "hadis_count": 50, "has_hadis": True, "order": 1, "xmind_file": None, "has_xmind_file": False, "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": [] } ] } ] } } } ), 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") } )