Entrada 13: Refactor
Bitácora de Sesión
Fecha: 11/06/2026
Inicio: [13:30] | Fin: [16:30] || Total: [3 horas y 30 min]
Presente: Matías Benavides Sandoval
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
¿QUÉ HICIMOS HOY?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Se realizó una limpieza arquitectónica mayor del backend. El objetivo fue eliminar toda SQL inline restante (queries directas a la BD) y migrarlas a stored procedures dedicados, y eliminar código muerto acumulado de sesiones anteriores.
Se crearon 4 SPs nuevos: sp_GetUsuarioId (resuelve id desde Username), sp_GetPuestos (catálogo de puestos), sp_GetTiposEvento (catálogo de tipos de evento), sp_GetLastDbError (obtiene el último error de DBError para un usuario). Todos deployados en PlanillaDB.
Se refactorizó empleadoController.ts: de ~584 líneas a ~200 líneas. Se extrajeron puestoController.ts (getPuestos vía sp_GetPuestos), tiposMovimientoController.ts (getTiposMovimiento vía sp_GetTiposMovimiento) y usuarioHelper.ts (resolveUsuarioId vía sp_GetUsuarioId). Se creó utils.ts en frontend con funciones compartidas (setEstado, formatearFecha, formatearFechaHora, logout).
Se eliminaron 15 archivos muertos: 5 SPs de Tarea2-BD (VacacionesDB), impersonarController.ts (duplicado), movimientoController.ts, routes/impersonar.ts, routes/movimientos.ts, models/Auth.ts, public/js/empleado.js, movimientos.html, insertarMovimiento.html, src/frontend/movimientos.ts, src/frontend/insertarMovimiento.ts.
Se limpió errorhelper.ts: la función getErrorMessage ahora llama a sp_GetError en vez de hacer SQL inline. Se eliminó la función resolveUsuarioId (ya vivía en usuarioHelper.ts).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROBLEMAS DETECTADOS Y CÓMO SE RESOLVIERON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Problema: errorhelper.ts tenía SQL inline para resolver mensajes de error y el último DBError.
Causa: era código legacy de Tarea2-BD que nunca se migró a SPs.
Solución: se reescribió para llamar a sp_GetError y sp_GetLastDbError.
Problema: imports de utils.ts en frontend fallaban con "Failed to resolve module specifier".
Causa: los imports usaban './utils' sin extensión .js, pero browsers con ES modules requieren la extensión explícita.
Solución: se cambiaron todos los imports a './utils.js'.
Problema: frontend y backend compilaban con warnings de archivos eliminados.
Causa: tsconfig.json incluía src/frontend/** en la compilación backend, y tsconfigFronted.json no excluía archivos muertos.
Solución: se actualizó tsconfig.json para excluir src/frontend/** y se limpió dist/frontend/.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AVANCE DEL CÓDIGO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MORALEJAS / BUENAS PRÁCTICAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Toda consulta a la BD debe ir por SP, nunca SQL inline en controllers. Esto permite cambiar la lógica de BD sin tocar el backend, y mantiene la capa de datos separada.
Los imports de frontend con ES modules requieren extensión .js explícita. Sin ella, el browser falla silenciosamente con "Failed to resolve module specifier".
Antes de eliminar un archivo, verificar que ningún otro archivo lo importe.
Mantener utility functions compartidas (fechas, estado) en un archivo utils.ts evita duplicación entre módulos del frontend.
El backend carga código de dist/, no de src/. Después de cualquier cambio en src/, recompilar con npx tsc y reiniciar el servidor.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRÓXIMA SESIÓN: ¿QUÉ SIGUE?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Persona B (Sebastián): implementar sp_ProcesarAsistencia, sp_ProcesarPlanillaSemanal, sp_ProcesarPlanillaMensual, sp_CrearCalendario, sp_GetPlanillaSemanal, sp_GetPlanillaMensual, sp_CargarCatalogosXML.
- Conectar SPs de planilla a empleado-view.html/ts.
- Verificar que empleados, impersonar, empleado-view y bitácora sigan funcionando tras la limpieza.
- Posibles mejoras: índices en tablas consultadas frecuentemente (BitacoraEvento, Empleado).
Comentarios
Publicar un comentario