From 47b50ede7e93ebdd9e152edcd9108e2ffeeb18cf Mon Sep 17 00:00:00 2001 From: Carlos Tello Date: Fri, 18 Sep 2026 14:40:34 -0300 Subject: [PATCH] fix: database initialization on sqlite and i18n logic --- CHANGELOG_SESSION.md | 1135 ++++++++++++----------- app/__init__.py | 45 +- init_db.py | 137 +-- translations/en/LC_MESSAGES/messages.po | 502 +--------- translations/es/LC_MESSAGES/messages.po | 490 +--------- 5 files changed, 747 insertions(+), 1562 deletions(-) diff --git a/CHANGELOG_SESSION.md b/CHANGELOG_SESSION.md index 4b38005..5b2eeb1 100644 --- a/CHANGELOG_SESSION.md +++ b/CHANGELOG_SESSION.md @@ -1,567 +1,574 @@ -# Resumen de Cambios - Sesión de Desarrollo (Rama `dev`) - -**Fecha:** 2026-09-02 / 2026-09-03 / 2026-09-04 -**Proyecto:** Admin Edu-Space (Flask + PostgreSQL) -**Rama:** `dev` +# Resumen de Cambios - Sesión de Desarrollo (Rama `dev`) + +**Fecha:** 2026-09-02 / 2026-09-03 / 2026-09-04 +**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. +* **Archivos Base:** + * Creación de `.env.example` con todas las variables requeridas (PostgreSQL, Flask, Secret Key, Babel). + * Creación y posterior actualización de `init_db.py` para bootstrap inicial seguro de base de datos, roles RBAC y usuario administrador por defecto (`admin@edu-space.com` / `admin123`). + +--- + +## 2. Base de Datos y Modelos +* **Preferencia de Idioma Persistente:** + * Migración en PostgreSQL agregando la columna `preferred_language VARCHAR(10)` a la tabla `users`. + * Actualización del modelo `User` en `app/models/user.py` con el campo `preferred_language`. +* **Preferencia de Tema Visual Persistente:** + * Migración agregando la columna `theme_preference VARCHAR(10) DEFAULT 'auto' NOT NULL` a la tabla `users`. + * Soporte en el modelo `User` para valores `'auto'`, `'light'` y `'dark'`. +* **Control de Acceso Basado en Roles (RBAC):** + * Migración creando las tablas `roles` y `permissions`, y agregando la clave foránea `role_id` a la tabla `users`. + * Modelos `Role` y `Permission` en `app/models/role.py`. + * Métodos `has_permission(module, min_level)` y `can_manage()` en `User`. + +--- + +## 3. Implementación de Vistas y Plantillas +* **Perfil de Usuario (`app/templates/auth/profile.html`):** + * Vista completa con datos del usuario, rol, estado, fecha de registro y reservas recientes. + * Formulario integral para configurar **Idioma de la interfaz** (*Detectar automáticamente del navegador*, *Español*, *English*) y **Tema visual** (*Automático*, *Modo Claro*, *Modo Oscuro*). +* **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 e integrada con el sistema de diseño. + +--- + +## 4. Correcciones de UX, Linter y Bugs de Rutas +* **Navbar Limpio (`app/templates/base.html`):** + * Eliminación del bloque duplicado del menú de usuario `System Administrator`. +* **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 a `classrooms.index`. + * En `app/templates/schedule/commissions.html`, se reemplazó el filtro inválido de Django `truncatewords(20)` por el filtro estándar de Jinja2 `truncate(100)`. +* **Corrección Visual en `/genetic-optimizer` (`app/templates/genetic_optimizer.html`):** + * Se agregó el espaciado `pt-5 mt-4` evitando que la barra fija superior se monte sobre el contenido. + * Rediseño de tarjeta hero con contraste óptimo y reemplazo de iconos faltantes por Bootstrap Icons (`bi bi-...`). +* **Corrección de Errores del Linter en `schedule/add.html` y `schedule/view.html`:** + * En `add.html`: Desacople de iteraciones Jinja a `