feat(roadmap): implementar Sprints 1, 2 y 3 (MVC, Stateless JWT API y Spring Security)

This commit is contained in:
Carlos Tello
2026-09-05 01:46:57 -03:00
parent fa878cb0d5
commit 69b8b7ccef
34 changed files with 1750 additions and 21 deletions
+37 -13
View File
@@ -265,6 +265,7 @@ admin-edu-space/
│ │ └── reservation.py # Reservas de aulas y horarios
│ ├── models/ # Modelos relacionales SQLAlchemy
│ │ ├── academic_term.py # Ciclos lectivos y períodos académicos (activo/histórico)
│ │ ├── audit_log.py # Bitácora inmutable de auditoría de eventos
│ │ ├── building.py # Sedes y edificios institucionales
│ │ ├── career.py # Carreras y titulaciones universitarias
│ │ ├── classroom.py # Aulas físicas y virtuales con capacidades
@@ -274,16 +275,39 @@ admin-edu-space/
│ │ ├── role.py # Roles y matriz de permisos granulares RBAC
│ │ ├── subject.py # Asignaturas, materias y comisiones de cursada
│ │ └── user.py # Usuarios, credenciales y asignación de roles
│ ├── repositories/ # Capa de persistencia desacoplada (Patrón Repository)
│ │ ├── base_repository.py # CRUD genérico tipado BaseRepository[T]
│ │ ├── classroom_repository.py # Filtrado de aulas físicas y virtuales
│ │ ├── reservation_repository.py# Detección de solapamiento y consultas temporales
│ │ └── user_repository.py # Consultas seguras de usuarios y roles
│ ├── schemas/ # Contratos DTOs con validación Pydantic v2
│ │ ├── auth_dto.py # Esquemas de login y refresh tokens
│ │ ├── classroom_dto.py # Contratos de creación y edición de aulas
│ │ └── reservation_dto.py # Validación de franjas horarias y aforo
│ ├── security/ # Pipeline de seguridad inspirado en Spring Security
│ │ ├── filter_chain.py # SecurityFilterChain (OWASP Headers & Rate Limiting)
│ │ └── decorators.py # @require_permission declarativo a nivel método
│ ├── services/ # Capa de servicios y lógica de negocio
│ │ ├── audit_service.py # Registro y consulta de auditoría inmutable
│ │ ├── classroom_service.py # Lógica de asignación, aforo y validación áulica
│ │ ├── jwt_service.py # Emisión de tokens (Dual Token) y lista negra
│ │ ├── reservation_service.py # Motor de resolución de conflictos de cronograma
│ │ ├── sheets_importer.py # Parser y sincronizador de Google Sheets
│ │ └── user_service.py # Autenticación y perfil con matriz RBAC
│ ├── routes/ # Controladores y rutas modulares (Blueprints)
│ │ ├── admin.py # Carreras, Asignaturas, Ciclo Lectivo, Tipificaciones, Métricas, Usuarios y Roles
│ │ ├── auth.py # Autenticación, sesiones y perfil
│ │ ├── api/ # Endpoints RESTful (v1) con Stateless JWT
│ │ │ ├── auth.py # /api/v1/auth (login, refresh, logout, me)
│ │ │ ├── classrooms.py # /api/v1/classrooms (CRUD REST tipado)
│ │ │ └── reservations.py # /api/v1/reservations (Gestión y disponibilidad)
│ │ ├── admin.py # Carreras, Asignaturas, Tipificaciones, Métricas, Usuarios
│ │ ├── auth.py # Autenticación web tradicional Jinja2
│ │ ├── buildings.py # Gestión de sedes y edificios
│ │ ├── classrooms.py # Aulas presenciales vs. Campus Virtual a demanda y métricas de uso
│ │ ├── genetic_algorithm.py # Optimizador heurístico de asignación de espacios
│ │ ├── classrooms.py # Aulas presenciales vs. Virtuales (controlador delgado)
│ │ ├── genetic_algorithm.py # Optimizador heurístico de asignación
│ │ ├── main.py # Dashboard principal y métricas rápidas
│ │ └── schedule.py # Calendario interactivo, cartelera del día, comisiones y reservas
│ ├── services/ # Servicios y lógica de negocio
│ │ └── sheets_importer.py # Parser y sincronizador bidireccional de Google Sheets
│ │ └── schedule.py # Calendario interactivo, cartelera del día y reservas
│ ├── utils/ # Utilidades transversales
│ │ └── jwt_decorators.py # @jwt_required y @jwt_role_required
│ ├── static/ # Recursos estáticos web (CSS, JS, imágenes institucionales)
│ └── templates/ # Vistas Jinja2 renderizadas con Bootstrap 5
├── config/ # Configuraciones de entorno (desarrollo, testing, prod)
@@ -339,12 +363,12 @@ En respuesta a los requerimientos y sugerencias docentes, se formaliza el plan d
### 📅 2. Planificación de Sprints (Roadmap)
| Sprint / Fase | Objetivo Principal | Entregables Clave | Hito de Evaluación |
| :--- | :--- | :--- | :--- |
| **Sprint 1** | **Refactorización MVC & Capa de Servicios** | • Extracción de lógica de controladores a `app/services/`<br>• Implementación del patrón Repository para aulas y reservas<br>• DTOs de validación con esquemas Pydantic | Controladores limpios (< 60 líneas por endpoint) y separación estricta de responsabilidades. |
| **Sprint 2** | **Autenticación Stateless JWT & API Gateway** | • Endpoints `/api/auth/login`, `/refresh`, `/logout`<br>• Decoradores `@jwt_required` y claim parser<br>• Middleware Bearer Token para interoperabilidad | Autenticación y consumo seguro desde Postman y aplicaciones externas sin cookies de sesión. |
| **Sprint 3** | **Sprint Security & Gobernanza RBAC Avanzada** | • Pipeline `SecurityFilterChain` centralizado<br>• Decorador `@require_permission(module, level)` a nivel servicio<br>• Rate Limiting en login y endpoints públicos<br>• Módulo de auditoría inmutable de eventos (`AuditLog`) | Aprobación de pentest simulado OWASP Top 10 y matriz de permisos auditada. |
| **Sprint 4** | **Optimizador Heurístico & Alta Concurrencia** | • Paralelización del algoritmo genético con multiprocessing/workers<br>• Colas asíncronas para optimizaciones pesadas<br>• Integración con microservicio Spring Boot vía REST/JWT | Optimización de 200+ comisiones en menos de 5 segundos con 0 colisiones horarias. |
| Sprint / Fase | Objetivo Principal | Entregables Clave | Estado | Hito de Evaluación |
| :--- | :--- | :--- | :--- | :--- |
| **Sprint 1** | **Refactorización MVC & Capa de Servicios** | • Extracción de lógica a `app/services/`<br>• Patrón Repository para aulas y reservas (`app/repositories/`)<br>• DTOs tipados de validación con esquemas Pydantic v2 | **✔ Completado** | Controladores delgados (< 60 líneas), desacoplamiento Clean Architecture y persistencia aislada. |
| **Sprint 2** | **Autenticación Stateless JWT & API Gateway** | • Endpoints `/api/v1/auth/login`, `/refresh`, `/logout`, `/me`<br>• Endpoints RESTful de aulas y reservas<br>• Decoradores `@jwt_required` y middleware Bearer Token | **✔ Completado** | Consumo seguro desde Swagger/Postman y clientes externos con Dual Token Pattern (15 min + 7 días). |
| **Sprint 3** | **Sprint Security & Gobernanza RBAC** | • Pipeline centralizado `SecurityFilterChain`<br>• Rate Limiting dinámico (fuerza bruta / DoS)<br>• Decorador `@require_permission` a nivel método<br>• Bitácora inmutable de auditoría (`AuditLog`) | **✔ Completado** | Inyección de cabeceras OWASP Secure Headers y trazabilidad completa de eventos críticos con IP/usuario. |
| **Sprint 4** | **Optimizador Heurístico & Alta Concurrencia** | • Paralelización del algoritmo genético con multiprocessing/workers<br>• Colas asíncronas para optimizaciones pesadas<br>• Integración con microservicio Spring Boot vía REST/JWT | **⏳ En Curso** | Optimización de 200+ comisiones en menos de 5 segundos con 0 colisiones horarias. |
---