import json from django.shortcuts import render from django.views import View from django.contrib.admin.views.decorators import staff_member_required from django.utils.decorators import method_decorator @method_decorator(staff_member_required, name='dispatch') class CustomAPIDocumentationView(View): """ Custom API Documentation view with collapsible sidebar navigation Requires admin login to access """ def get(self, request): api_structure = self._get_api_structure() context = { 'api_structure': api_structure, 'request': request, 'title': 'Imam Javad API Documentation', 'description': 'Comprehensive API documentation with interactive examples for the Imam Javad project', } return render(request, 'api/documentation.html', context) def _get_api_structure(self): """ Define the API structure for the Imam Javad project with all apps and endpoints """ return { 'account': { 'name': 'Account Management', 'description': 'User authentication, registration, and profile management', 'endpoints': [ { 'name': 'User Registration', 'method': 'POST', 'url': '/api/account/register/', 'description': 'Register a new user account with email verification', 'parameters': [ {'name': 'email', 'type': 'string', 'description': 'User email address', 'required': True}, {'name': 'password', 'type': 'string', 'description': 'User password', 'required': True}, {'name': 'password_confirm', 'type': 'string', 'description': 'Password confirmation', 'required': True}, {'name': 'fullname', 'type': 'string', 'description': 'User full name', 'required': True}, ], 'response_examples': { 'success': json.dumps({ "message": "Registration successful. Please check your email for verification code.", "user_id": 123, "email": "user@example.com" }, indent=2), 'error': json.dumps({ "error": "Email already exists", "details": "A user with this email address already exists." }, indent=2) } }, { 'name': 'Email Verification', 'method': 'POST', 'url': '/api/account/verify/', 'description': 'Verify user email with verification code', 'parameters': [ {'name': 'email', 'type': 'string', 'description': 'User email address', 'required': True}, {'name': 'code', 'type': 'string', 'description': 'Verification code from email', 'required': True}, ], 'response_examples': { 'success': json.dumps({ "message": "Email verified successfully", "token": "abc123def456...", "user": { "id": 123, "email": "user@example.com", "fullname": "John Doe", "is_verified": True } }, indent=2) } }, { 'name': 'User Login', 'method': 'POST', 'url': '/api/account/login/', 'description': 'Authenticate user and get access token', 'parameters': [ {'name': 'email', 'type': 'string', 'description': 'User email address', 'required': True}, {'name': 'password', 'type': 'string', 'description': 'User password', 'required': True}, {'name': 'fcm', 'type': 'string', 'description': 'FCM token for notifications', 'required': False}, {'name': 'device_id', 'type': 'string', 'description': 'Device identifier', 'required': False}, ], 'response_examples': { 'success': json.dumps({ "token": "abc123def456...", "user": { "id": 123, "email": "user@example.com", "fullname": "John Doe", "is_verified": True, "profile_image": None } }, indent=2) } }, { 'name': 'User Profile', 'method': 'GET', 'url': '/api/account/profile/', 'description': 'Get current user profile information', 'parameters': [ {'name': 'Authorization', 'type': 'header', 'description': 'Token ', 'required': True}, ], 'response_examples': { 'success': json.dumps({ "id": 123, "email": "user@example.com", "fullname": "John Doe", "phone": "+989123456789", "profile_image": "https://example.com/media/profiles/user.jpg", "is_verified": True, "date_joined": "2024-01-15T10:30:00Z" }, indent=2) } } ] }, 'courses': { 'name': 'Course Management', 'description': 'Educational courses, lessons, and learning progress', 'endpoints': [ { 'name': 'Course Categories', 'method': 'GET', 'url': '/api/courses/categories/', 'description': 'Get list of all course categories', 'parameters': [], 'response_examples': { 'success': json.dumps({ "count": 5, "results": [ { "id": 1, "title": "Islamic Studies", "description": "Courses related to Islamic knowledge", "image": "https://example.com/media/categories/islamic.jpg", "courses_count": 12 }, { "id": 2, "title": "Arabic Language", "description": "Arabic language learning courses", "image": "https://example.com/media/categories/arabic.jpg", "courses_count": 8 } ] }, indent=2) } }, { 'name': 'Course List', 'method': 'GET', 'url': '/api/courses/', 'description': 'Get paginated list of courses with filtering options', 'parameters': [ {'name': 'category', 'type': 'integer', 'description': 'Filter by category ID', 'required': False}, {'name': 'search', 'type': 'string', 'description': 'Search in course titles', 'required': False}, {'name': 'page', 'type': 'integer', 'description': 'Page number for pagination', 'required': False}, ], 'response_examples': { 'success': json.dumps({ "count": 25, "next": "http://example.com/api/courses/?page=2", "previous": None, "results": [ { "id": 1, "title": "Introduction to Islamic Jurisprudence", "slug": "intro-islamic-jurisprudence", "category": { "id": 1, "title": "Islamic Studies" }, "professor": { "id": 1, "name": "Dr. Ahmad Hassan", "bio": "Expert in Islamic Law" }, "thumbnail": "https://example.com/media/courses/course1.jpg", "duration": "8 weeks", "lessons_count": 24, "participants_count": 156, "price": "50.00", "is_free": False } ] }, indent=2) } } ] }, 'hadis': { 'name': 'Hadis Collection', 'description': 'Islamic hadis texts organized by categories and sects', 'endpoints': [ { 'name': 'Hadis Sects', 'method': 'GET', 'url': '/api/hadis/categories/', 'description': 'Get list of hadis sects grouped by type (Shia/Sunni)', 'parameters': [], 'response_examples': { 'success': json.dumps({ "count": 4, "results": { "shia": [ { "id": 1, "title": "Twelver Shia", "seo_field": None } ], "sunni": [ { "id": 3, "title": "Hanafi", "seo_field": None } ] } }, indent=2) } }, { 'name': 'Hadis Categories', 'method': 'GET', 'url': '/api/hadis/categories//', 'description': 'Get hadis categories tree structure by sect ID', 'parameters': [ {'name': 'sect_id', 'type': 'integer', 'description': 'Hadis sect ID', 'required': True}, ], 'response_examples': { 'success': json.dumps({ "count": 10, "results": { "quran": [ { "id": 1, "title": "Quranic Interpretations", "order": 1, "children": [ { "id": 2, "title": "Tafsir al-Mizan", "order": 1, "hadis_count": 45 } ] } ], "hadith": [ { "id": 10, "title": "Prophetic Traditions", "order": 1, "children": [] } ] } }, indent=2) } } ] }, 'library': { 'name': 'Digital Library', 'description': 'Books, documents, and downloadable resources', 'endpoints': [ { 'name': 'Book Categories', 'method': 'GET', 'url': '/api/library/categories/', 'description': 'Get list of book categories', 'parameters': [], 'response_examples': { 'success': json.dumps({ "count": 8, "results": [ { "id": 1, "title": "Islamic Jurisprudence", "description": "Books on Islamic law and jurisprudence", "books_count": 45 } ] }, indent=2) } }, { 'name': 'Book List', 'method': 'GET', 'url': '/api/library/books/', 'description': 'Get paginated list of books', 'parameters': [ {'name': 'category', 'type': 'integer', 'description': 'Filter by category ID', 'required': False}, {'name': 'search', 'type': 'string', 'description': 'Search in book titles and authors', 'required': False}, ], 'response_examples': { 'success': json.dumps({ "count": 120, "results": [ { "id": 1, "title": "Al-Kafi", "author": "Muhammad ibn Ya'qub al-Kulayni", "description": "One of the most important Shia hadith collections", "cover_image": "https://example.com/media/books/alkafi.jpg", "file_size": "15.2 MB", "pages": 1200, "language": "Arabic", "download_count": 2456 } ] }, indent=2) } } ] }, 'videos': { 'name': 'Video Content', 'description': 'Educational and religious video content', 'endpoints': [ { 'name': 'Video Categories', 'method': 'GET', 'url': '/api/videos/categories/', 'description': 'Get list of video categories', 'parameters': [], 'response_examples': { 'success': json.dumps({ "count": 6, "results": [ { "id": 1, "title": "Lectures", "description": "Educational lectures and talks", "videos_count": 89 } ] }, indent=2) } }, { 'name': 'Video List', 'method': 'GET', 'url': '/api/videos/list/', 'description': 'Get paginated list of videos', 'parameters': [ {'name': 'category', 'type': 'integer', 'description': 'Filter by category ID', 'required': False}, {'name': 'search', 'type': 'string', 'description': 'Search in video titles', 'required': False}, ], 'response_examples': { 'success': json.dumps({ "count": 156, "results": [ { "id": 1, "title": "Introduction to Islamic Philosophy", "slug": "intro-islamic-philosophy", "description": "A comprehensive introduction to Islamic philosophical thought", "thumbnail": "https://example.com/media/videos/thumb1.jpg", "duration": "45:30", "views_count": 1234, "speaker": "Dr. Ali Rezaei", "upload_date": "2024-01-15" } ] }, indent=2) } } ] }, 'podcast': { 'name': 'Podcast Platform', 'description': 'Audio content and podcast episodes', 'endpoints': [ { 'name': 'Podcast Categories', 'method': 'GET', 'url': '/api/podcast/categories/', 'description': 'Get list of podcast categories', 'parameters': [], 'response_examples': { 'success': json.dumps({ "count": 4, "results": [ { "id": 1, "title": "Religious Discussions", "description": "Discussions on religious topics", "podcasts_count": 23 } ] }, indent=2) } } ] }, 'quiz': { 'name': 'Quiz System', 'description': 'Interactive quizzes and assessments', 'endpoints': [ { 'name': 'Quiz Detail', 'method': 'GET', 'url': '/api/quiz//', 'description': 'Get quiz details and questions', 'parameters': [ {'name': 'quiz_id', 'type': 'integer', 'description': 'Quiz ID', 'required': True}, ], 'response_examples': { 'success': json.dumps({ "id": 1, "title": "Islamic History Quiz", "description": "Test your knowledge of Islamic history", "each_question_timing": 30, "questions": [ { "id": 1, "question": "When was the Battle of Badr fought?", "options": [ {"id": 1, "text": "624 CE"}, {"id": 2, "text": "625 CE"}, {"id": 3, "text": "626 CE"}, {"id": 4, "text": "627 CE"} ] } ] }, indent=2) } } ] }, 'bookmarks': { 'name': 'Bookmarks & Ratings', 'description': 'User bookmarks and content ratings', 'endpoints': [ { 'name': 'Add Bookmark', 'method': 'POST', 'url': '/api/bookmarks/add/', 'description': 'Add content to user bookmarks', 'parameters': [ {'name': 'content_type', 'type': 'string', 'description': 'Type of content (course, video, etc.)', 'required': True}, {'name': 'object_id', 'type': 'integer', 'description': 'ID of the content object', 'required': True}, ], 'response_examples': { 'success': json.dumps({ "message": "Bookmark added successfully", "bookmark_id": 123 }, indent=2) } } ] } }