docs: actualizar diagrama y descripcion de arquitectura monorepo en README.md
This commit is contained in:
@@ -31,35 +31,60 @@ Fase 6: Despliegue Producción e Integrac.[████░░░░░░░░
|
|||||||
|
|
||||||
## 🏗️ Arquitectura del Proyecto (Monorepo)
|
## 🏗️ Arquitectura del Proyecto (Monorepo)
|
||||||
|
|
||||||
El repositorio está dividido en dos aplicaciones principales que interactúan mediante una API REST y un patrón Backend-For-Frontend (BFF).
|
El repositorio implementa un patrón desacoplado en formato monorepo compuesto por la **Core API (Backend)**, la capa de mediación y vistas **BFF (Frontend)**, herramientas unificadas de despliegue, auditoría automatizada y flujos de CI/CD:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
/
|
/
|
||||||
├── backend/ # API REST Backend (Python / Flask)
|
├── backend/ # Capa Core API (Python 3.10+ / Flask / SQLAlchemy)
|
||||||
│ ├── app/ # Lógica de negocio, base de datos y endpoints
|
│ ├── app/ # Lógica de negocio y arquitectura desacoplada
|
||||||
│ ├── tests/ # Pruebas unitarias e integración
|
│ │ ├── models/ # Modelos ORM (User, Role, Classroom, Reservation, etc.)
|
||||||
│ └── requirements.txt # Dependencias de Python
|
│ │ ├── routes/api/ # Endpoints REST JSON v1 (/auth, /classrooms, /admin, etc.)
|
||||||
|
│ │ ├── schemas/ # DTOs y validación de contratos (Pydantic v2)
|
||||||
|
│ │ ├── services/ # Servicios de dominio (JWT, Email SMTP, Moodle, Queue)
|
||||||
|
│ │ └── security/ # Pipeline de filtros y validación stateless de JWT
|
||||||
|
│ ├── tests/ # Suite activa de pruebas unitarias y de integración (pytest)
|
||||||
|
│ ├── init_db.py # Inicializador idempotente de esquema, roles RBAC y semillas
|
||||||
|
│ ├── backup_db.sh # Generador automatizado de backups para PostgreSQL
|
||||||
|
│ ├── classrooms_db.sql # Snapshot integral de base de datos para despliegue
|
||||||
|
│ ├── wsgi.py # Entrada WSGI para ejecución con Gunicorn
|
||||||
|
│ └── requirements.txt # Dependencias Python auditadas (0 vulnerabilidades / CVEs)
|
||||||
│
|
│
|
||||||
├── frontend/ # Backend-For-Frontend (Node.js / Express)
|
├── frontend/ # Backend-For-Frontend BFF (Node.js 20 LTS / Express)
|
||||||
│ ├── src/ # Controladores, middleware, servicios (Axios)
|
│ ├── src/ # Capa servidora de mediación web
|
||||||
│ ├── views/ # Plantillas Nunjucks (.html)
|
│ │ ├── app.js # Servidor Express, seguridad Helmet, rate-limiting
|
||||||
│ ├── public/ # Archivos estáticos (CSS, JS cliente)
|
│ │ ├── controllers/ # Controladores de orquestación y mediación
|
||||||
│ └── package.json # Dependencias de Node.js
|
│ │ ├── middlewares/ # Sesión por Cookie HttpOnly, JWT injection y RBAC
|
||||||
|
│ │ ├── routes/ # Enrutamiento web (auth, schedule, classrooms, admin)
|
||||||
|
│ │ └── services/ # Cliente Axios centralizado hacia Flask API
|
||||||
|
│ ├── views/ # Plantillas y componentes dinámicos en Nunjucks (.html)
|
||||||
|
│ │ ├── admin/ # Paneles de gestión institucional y configuración
|
||||||
|
│ │ ├── classrooms/ # Catálogo de aulas y visualización de sedes
|
||||||
|
│ │ ├── schedule/ # Cronograma de comisiones, reservas y calendario
|
||||||
|
│ │ ├── my_subjects/ # Libreta de calificaciones, hitos evaluativos y cursada
|
||||||
|
│ │ └── partials/ # Componentes reutilizables, modales y navegación
|
||||||
|
│ ├── public/ # Assets estáticos (CSS responsive 720p/1080p, JS cliente)
|
||||||
|
│ └── package.json # Dependencias y manifiesto de Node.js
|
||||||
│
|
│
|
||||||
├── docs/ # Historial de cambios y documentación técnica
|
├── install.sh # Instalador nativo unificado para Linux / Proxmox LXC
|
||||||
└── unicaba_prerequitos/ # Requisitos académicos y de negocio
|
├── security_audit.bat # Suite automatizada de auditoría (SAST, SCA, DAST)
|
||||||
|
├── .gitea/workflows/ # Pipelines de integración continua (CI/CD en Gitea)
|
||||||
|
├── docs/ # Especificaciones técnicas, auditorías y changelogs
|
||||||
|
├── ROADMAP_MVP.md # Plan de evolución, estadios y fases del proyecto
|
||||||
|
├── SECURITY_AUDIT_REPORT.md # Informe formal de auditoría y hardening
|
||||||
|
└── README.md # Documentación general y guía operativa
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🐍 Backend (Python + Flask)
|
### 🐍 Backend Core API (Python + Flask)
|
||||||
- Funciona exclusivamente como una **REST API** que expone endpoints bajo `/api/v1/` retornando **JSON**.
|
- Funciona exclusivamente como una **REST API** que expone endpoints bajo `/api/v1/` retornando **JSON**.
|
||||||
- Encargado de la persistencia de datos (SQLAlchemy / PostgreSQL), lógica de negocio dura, JWT auth service, seguridad, y algoritmos de optimización (Módulo Predictivo).
|
- Encargado de la persistencia de datos (SQLAlchemy / PostgreSQL o SQLite), lógica de negocio, servicio de tokens JWT (Access & Refresh), matriz RBAC, y algoritmos de optimización heurística (Módulo Predictivo).
|
||||||
- **Prohibido** retornar HTML o utilizar Jinja2/`render_template` en este entorno.
|
- **Prohibido** retornar HTML o utilizar Jinja2/`render_template` en este entorno.
|
||||||
|
|
||||||
### 🟢 Frontend BFF (Node.js + Express)
|
### 🟢 Frontend BFF (Node.js + Express)
|
||||||
- Aplicación de servicio que renderiza las vistas para el cliente mediante **Nunjucks**.
|
- Aplicación Backend-For-Frontend que renderiza las vistas para el cliente mediante **Nunjucks**.
|
||||||
- Gestiona la sesión segura del usuario almacenando el token JWT recibido de Flask en una **Cookie HttpOnly**.
|
- Gestiona la sesión segura del usuario almacenando el token JWT recibido de Flask en una **Cookie HttpOnly**.
|
||||||
- Actúa como proxy de conexión con el Backend de Python empleando **Axios** (inyectando el Bearer token interceptado).
|
- Actúa como proxy de conexión con el Backend de Python empleando **Axios** (inyectando el Bearer token interceptado).
|
||||||
- Utiliza **Chart.js** y JS vanilla en el lado del cliente para visualizaciones interactivas.
|
- Blindado con **Helmet** (cabeceras de seguridad HTTP) y **express-rate-limit** para mitigar ataques de fuerza bruta.
|
||||||
|
- Interfaz adaptativa y responsive diseñada para pantallas estándar argentinas (720p, 1366x768 y 1080p) con gráficos dinámicos (**Chart.js**).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user