From faa18be61d63b655ed3db4f834c63d588089c3e2 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Fri, 30 May 2025 11:14:17 -0600 Subject: [PATCH] captura correcta de errores para crear asistencia --- api/routes/asistencias/asistencias.js | 61 +++++++++++++-------- ui/src/views/asistencias/AsistenciaForm.vue | 2 +- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/api/routes/asistencias/asistencias.js b/api/routes/asistencias/asistencias.js index 3c5aeea..100e2e3 100644 --- a/api/routes/asistencias/asistencias.js +++ b/api/routes/asistencias/asistencias.js @@ -32,40 +32,57 @@ router.get('/:id', async (req, res) => { } }); -// POST create new asistencia +// POST /api/asistencias ➜ crear asistencia router.post('/', async (req, res) => { - const { empleado_id, entrada, salida, historial, observacion, estado, fecha_anulado, creador_id, modificado_id, anulador_id } = req.body; - try { - // Basic validation: empleado_id is required - if (!empleado_id) { - return res.status(400).json({ error: 'El campo empleado_id es obligatorio.' }); - } + const { + empleado_id, + entrada, + salida, + historial, + observacion, + estado = 'pendiente', + fecha_anulado, + creador_id, + modificado_id, + anulador_id, + } = req.body + if (!empleado_id) + return res.status(400).json({ error: 'El campo empleado_id es obligatorio.' }) + + try { const nuevaAsistencia = await prisma.asistencia.create({ data: { - empleado_id: parseInt(empleado_id), + empleado: { connect: { id: BigInt(empleado_id) } }, // FK con validación implícita entrada: entrada ? new Date(entrada) : null, salida: salida ? new Date(salida) : null, - historial, // Assuming historial is already in JSON format or Prisma handles it + historial, // tipo Json en el schema observacion, estado, fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null, - creador_id, // Should ideally be taken from authenticated user - modificado_id, // Should ideally be taken from authenticated user - anulador_id + creador_id, + modificado_id, + anulador_id, }, - }); - res.status(201).json(nuevaAsistencia); + }) + + res.status(201).json(nuevaAsistencia) } catch (error) { - console.error(error); - if (error.code === 'P2003') { // Foreign key constraint failed - if (error.meta?.field_name?.includes('empleado_id')) { - return res.status(400).json({ error: 'El empleado_id proporcionado no existe.' }); - } - } - res.status(500).json({ error: 'Error al crear asistencia.' }); + console.error(error) + + // FK inválida + if ( + error.code === 'P2003' && + error.meta?.constraint === 'Asistencia_empleado_id_fkey' + ) + return res + .status(400) + .json({ error: 'El empleado_id proporcionado no existe.' }) + + res.status(500).json({ error: 'Error al crear asistencia.' }) } -}); +}) + // PUT update asistencia by ID router.put('/:id', async (req, res) => { diff --git a/ui/src/views/asistencias/AsistenciaForm.vue b/ui/src/views/asistencias/AsistenciaForm.vue index e0ee703..cdf4b78 100644 --- a/ui/src/views/asistencias/AsistenciaForm.vue +++ b/ui/src/views/asistencias/AsistenciaForm.vue @@ -188,7 +188,7 @@ const handleSubmit = async () => { } else { await asistenciasStore.createAsistencia(payload); } - router.push({ name: 'AsistenciasIndex' }); + router.push({ name: 'asistencias-index' }); } catch (error) { console.error('Error saving asistencia:', error); const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';