""" URL configuration for mac_attendance project. The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/5.2/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path, include from django.http import JsonResponse from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated @api_view(['GET']) @permission_classes([IsAuthenticated]) def api_root(request): """API root endpoint - Returns comprehensive API information (Protected)""" return JsonResponse({ 'name': 'Sistema de Asistencia MAC - API', 'version': '1.0.0', 'description': 'API REST para el Sistema de Asistencia MAC - FES Acatlán UNAM', 'documentation': { 'main': '/api/docs/', 'swagger': '/api/swagger/', 'redoc': '/api/redoc/', }, 'endpoints': { 'authentication': { 'login': { 'url': '/api/auth/login/', 'method': 'POST', 'description': 'Iniciar sesión con número de cuenta', 'auth_required': False, }, 'logout': { 'url': '/api/auth/logout/', 'method': 'POST', 'description': 'Cerrar sesión', 'auth_required': True, }, 'profile': { 'url': '/api/auth/profile/', 'method': 'GET', 'description': 'Obtener perfil de usuario', 'auth_required': True, }, 'check_auth': { 'url': '/api/auth/check-auth/', 'method': 'GET', 'description': 'Verificar estado de autenticación', 'auth_required': False, }, 'token_refresh': { 'url': '/api/auth/token/refresh/', 'method': 'POST', 'description': 'Refrescar access token', 'auth_required': False, }, 'system_config': { 'url': '/api/auth/system-config/', 'method': 'GET', 'description': 'Obtener configuración del sistema', 'auth_required': True, }, }, 'events': { 'list': { 'url': '/api/events/', 'method': 'GET', 'description': 'Listar todos los eventos', 'auth_required': False, }, 'register_external': { 'url': '/api/events/external/register/', 'method': 'POST', 'description': 'Registrar usuario externo', 'auth_required': True, }, 'search_external': { 'url': '/api/events/external/search/', 'method': 'GET', 'description': 'Buscar usuarios externos', 'auth_required': True, }, 'approve_external': { 'url': '/api/events/external//approve/', 'method': 'POST', 'description': 'Aprobar usuario externo', 'auth_required': True, }, }, 'attendance': { 'register': { 'url': '/api/attendance/', 'method': 'POST', 'description': 'Registrar asistencia a evento', 'auth_required': True, }, 'stats': { 'url': '/api/attendance/stats/', 'method': 'GET', 'description': 'Obtener estadísticas de asistencia', 'auth_required': True, }, 'recent': { 'url': '/api/attendance/recent/', 'method': 'GET', 'description': 'Obtener asistencias recientes', 'auth_required': True, }, 'my_attendances': { 'url': '/api/attendance/my/', 'method': 'GET', 'description': 'Obtener mis asistencias', 'auth_required': True, }, }, }, 'authentication': { 'type': 'JWT Bearer Token', 'header': 'Authorization: Bearer ', 'token_lifetime': '1 hour', 'refresh_token_lifetime': '7 days', }, 'status': 'operational', 'server_time': request.build_absolute_uri(), }) @api_view(['GET']) @permission_classes([IsAuthenticated]) def api_docs(request): """API documentation endpoint (Protected)""" from django.http import HttpResponse html_content = """ API Documentation - Sistema MAC

📚 API Documentation

Sistema de Asistencia MAC - FES Acatlán UNAM

Version: 1.0.0 | Base URL: /api/

🔐 Authentication Endpoints

POST /api/auth/login/

Iniciar sesión con número de cuenta

{
  "account_number": "1234567"
}

GET /api/auth/profile/ AUTH

Obtener perfil del usuario autenticado

POST /api/auth/token/refresh/

Refrescar access token

📅 Events Endpoints

GET /api/events/

Listar todos los eventos activos

POST /api/events/external/register/ AUTH

Registrar un usuario externo para eventos

✅ Attendance Endpoints

POST /api/attendance/ AUTH

Registrar asistencia a un evento

GET /api/attendance/stats/ AUTH

Obtener estadísticas de asistencia del usuario

GET /api/attendance/my/ AUTH

Obtener mis asistencias registradas

🔑 Authentication

La API utiliza JWT (JSON Web Tokens) para autenticación.

Para endpoints que requieren autenticación, incluye el header:

Authorization: Bearer <your_access_token>
""" return HttpResponse(html_content) urlpatterns = [ path('', api_root, name='api_root'), path('api/', api_root, name='api_root_alt'), path('api/docs/', api_docs, name='api_docs'), path('admin/', admin.site.urls), path('api/auth/', include('authentication.urls')), path('api/events/', include('events.urls')), path('api/attendance/', include('attendance.urls')), ]