Stored Procedures: empleados y movimientos (DB)

Bitácora de desarrollo Control de Vacaciones


Sesión 1 Implementación completa de DB, API y Web (empleados y movimientos)


Fecha: 25-26 de abril de 2026


Hora de inicio: 09:00 pm


Hora de fin: 12:21 am


Horas trabajadas: 3h


Descripción de avances

- Stored Procedures DB: Se implementaron los SP de empleados (`spEmployee_GetAll`, `spEmployee_Insert`, `spEmployee_Update`, `spEmployee_DeleteLogical`, `spEmployee_GetById`) y movimientos (`spMovement_GetByEmployee`, `spMovement_Insert`) siguiendo el estándar del curso, con trazabilidad, `BEGIN TRY/CATCH`, `@outResultCode` y validación de saldo negativo.

- Fix seed UTF-8: Se corrigió `seed_xml.sql` para resolver problemas de codificación con tildes y ñ al cargar datos desde XML.

- DatabaseService y JWT Guard: Se agregaron los métodos del `DatabaseService` en NestJS para invocar cada SP, y se creó `jwt.guard.ts` para proteger los endpoints con validación de token Bearer.

- CRUD empleados y movimientos (API): Se implementaron controladores, servicios y DTOs (`CreateEmployeeDto`, `UpdateEmployeeDto`, `CreateMovimientoDto`) con validaciones de entrada y extracción de usuario autenticado e IP para trazabilidad completa.

- Cliente API y login (Web): Se centralizó la comunicación HTTP en `apps/web/lib/api.ts` con manejo automático del token JWT. Se reescribió la pantalla de login con verificación de disponibilidad del backend y mensajes de error del catálogo.

- Páginas de empleados y movimientos (Web): Se implementaron las vistas principales con listado, filtros, modales de inserción/edición/borrado y la página de movimientos por empleado, sin exponer IDs internos al usuario.


Problemas encontrados

- El script de seed fallaba con caracteres especiales en español debido a codificación incorrecta.

- En entorno local, NestJS recibía la IP como `::1` (IPv6 loopback) en lugar de `127.0.0.1`.

- El componente `MovimientosPage` fallaba en SSR porque `useSearchParams` requiere un boundary `Suspense` en Next.js App Router.


Solución aplicada


- Se corrigió el encoding de `seed_xml.sql` para compatibilidad UTF-8 con SQL Server.

- Se normalizó la IP en el servicio: si llega `::1` o `::ffff:127.0.0.1` se reemplaza por `127.0.0.1` antes de pasarla al SP.

- Se envolvió `MovimientosContent` en un `<Suspense>` dentro del componente raíz `MovimientosPage`.

Próximos pasos


- Verificar que todos los eventos requeridos se registren en `BitacoraEvento`.

- Implementar bloqueo de login por intentos fallidos.

- Ejecutar los casos de prueba del checklist (Fase 6).

- Documentar instrucciones de ejecución local.


Comentarios

Entradas más populares de este blog

Bitácora Sesión 1 Monorepo Vacation Control + entorno local

Bitácora Sesión 3 - Backend: CORS, JWT, SQL y auth API completa

Bitácora #5: Detalles finales, pruebas y fixes