5.1 KiB
5.1 KiB
Resumen de Cambios - Sesión de Desarrollo (Rama dev)
Fecha: 2026-09-02 / 2026-09-03
Proyecto: Admin Edu-Space (Flask + PostgreSQL)
Rama: dev
1. Auditoría Git y Puesta en Producción
- Informe Técnico Completo (
DEPLOYMENT_AUDIT.md):- Análisis de ramas locales y remotas (
main,dev,origin/planning,origin/commissions,origin/spanish). - Manual de despliegue en producción con arquitectura WSGI (Gunicorn), Nginx como proxy inverso, Systemd unit y contenedorización Docker / Docker Compose.
- Análisis de ramas locales y remotas (
- Archivos Base:
- Creación de
.env.examplecon todas las variables requeridas (PostgreSQL, Flask, Secret Key, Babel). - Creación de
init_db.pypara bootstrap inicial seguro de base de datos y usuario administrador por defecto (admin@edu-space.com/admin123).
- Creación de
2. Base de Datos y Modelos
- Preferencia de Idioma Persistente:
- Migración en PostgreSQL agregando la columna
preferred_language VARCHAR(10)a la tablausers. - Actualización del modelo
Userenapp/models/user.pycon el campopreferred_language.
- Migración en PostgreSQL agregando la columna
3. Implementación de Vistas y Plantillas Faltantes
- Perfil de Usuario (
app/templates/auth/profile.html):- Vista completa con datos del usuario, rol, estado, fecha de registro y reservas recientes.
- Formulario interactivo para configurar la Preferencia de Idioma (Detectar automáticamente del navegador, Español, English).
- Cambio de Contraseña (
app/templates/auth/change_password.html):- Formulario seguro para actualización de credenciales.
- Manejo de Errores (
app/templates/auth/403.html):- Pantalla de error 403 Forbidden estilizada.
4. Correcciones de UX y Bugs de Rutas
- Navbar Limpio (
app/templates/base.html):- Eliminación del bloque duplicado del menú de usuario
System Administrator.
- Eliminación del bloque duplicado del menú de usuario
- Corrección de BuildError en Comisiones:
- En
app/routes/classrooms.py, se agregó el alias de ruta@classrooms_bp.route('/', endpoint='index')para resolver enlaces aclassrooms.index. - En
app/templates/schedule/commissions.html, se reemplazó el filtro inválido de Djangotruncatewords(20)por el filtro estándar de Jinja2truncate(100).
- En
- Corrección Visual en
/genetic-optimizer(app/templates/genetic_optimizer.html):- Se agregó el espaciado
pt-5 mt-4evitando que la barra de navegación fija superior (fixed-top) se monte sobre el contenido. - Rediseño de tarjeta hero con contraste óptimo y reemplazo de iconos faltantes por Bootstrap Icons (
bi bi-...).
- Se agregó el espaciado
- Corrección en Calendario (
app/templates/schedule/calendar.html):- Inclusión de contenedor con espaciado superior y bundle de localización
locales-all.min.jspara FullCalendar.
- Inclusión de contenedor con espaciado superior y bundle de localización
5. Internacionalización (i18n) y Localización al Español
- Configuración del Motor Babel (
config/config.pyybabel.cfg):- Configuración de
BABEL_TRANSLATION_DIRECTORIEScon ruta absoluta. - Actualización del método de extracción Jinja2 en
babel.cfg.
- Configuración de
- Formularios con Traducción Lazy (
lazy_gettext):app/forms/auth.py(LoginForm).app/forms/classroom.py(ClassroomForm,ClassroomResourceForm).app/forms/reservation.py(ReservationForm).
- Traducción Integral de Plantillas:
app/templates/auth/login.html: Pantalla de login traducida y con selector de idioma visible.app/templates/dashboard.html: Todas las tarjetas estadísticas, acciones rápidas y tablas.app/templates/classrooms/list.htmlyadd.html: Filtros, estados vacíos, cabeceras y formularios.app/templates/schedule/today.html: Horario del día, métricas y botones.app/templates/schedule/calendar.html: Vistas, leyendas y eventos.app/templates/genetic_optimizer.html: Estado del algoritmo y controles.app/templates/partials/language_switcher.html: Muestra "Español" en lugar de "Spanish".
- Compilación de Catálogos:
- Compilación binaria de
messages.poamessages.moentranslations/es/ytranslations/en/con 0 mensajes pendientes.
- Compilación binaria de
6. Lógica de Detección y Precedencia de Idiomas
En app/__init__.py (get_locale()):
- Parámetro URL (
?lang=): Máxima prioridad para cambio explícito. - Preferencia en Perfil del Usuario (
current_user.preferred_language): Sobrescribe la configuración del navegador en toda la sesión si el usuario está autenticado. - Preferencia de Sesión (
session['language']): Cambio manual mediante el dropdown. - Detección Automática del Navegador (
request.accept_languages.best_match()): Valor por defecto para visitantes no autenticados y pantalla de login.
- Al cerrar sesión (
logout), se limpia la sesión para que el login use el navegador. - Al cambiar el idioma en el selector siendo usuario autenticado, se sincroniza automáticamente con su perfil en base de datos.
7. Configuración del Entorno de Desarrollo
- Se creó
.vscode/settings.jsonapuntando al intérprete del entorno virtual (venv\Scripts\python.exe), solucionando falsos positivos del analizador estático paraflask_wtfyflask_babel.