captura correcta de errores para crear asistencia
Some checks failed
build-and-deploy / filter (push) Successful in 2s
Sync to GitHub / sync (push) Failing after 1s
build-and-deploy / build (push) Successful in 12s
build-and-deploy / deploy (push) Successful in 15s

This commit is contained in:
2025-05-30 11:14:17 -06:00
parent 918a53529c
commit faa18be61d
2 changed files with 40 additions and 23 deletions

View File

@@ -32,40 +32,57 @@ router.get('/:id', async (req, res) => {
} }
}); });
// POST create new asistencia // POST /api/asistencias ➜ crear asistencia
router.post('/', async (req, res) => { router.post('/', async (req, res) => {
const { empleado_id, entrada, salida, historial, observacion, estado, fecha_anulado, creador_id, modificado_id, anulador_id } = req.body; const {
try { empleado_id,
// Basic validation: empleado_id is required entrada,
if (!empleado_id) { salida,
return res.status(400).json({ error: 'El campo empleado_id es obligatorio.' }); 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({ const nuevaAsistencia = await prisma.asistencia.create({
data: { data: {
empleado_id: parseInt(empleado_id), empleado: { connect: { id: BigInt(empleado_id) } }, // FK con validación implícita
entrada: entrada ? new Date(entrada) : null, entrada: entrada ? new Date(entrada) : null,
salida: salida ? new Date(salida) : 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, observacion,
estado, estado,
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null, fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null,
creador_id, // Should ideally be taken from authenticated user creador_id,
modificado_id, // Should ideally be taken from authenticated user modificado_id,
anulador_id anulador_id,
}, },
}); })
res.status(201).json(nuevaAsistencia);
res.status(201).json(nuevaAsistencia)
} catch (error) { } catch (error) {
console.error(error); console.error(error)
if (error.code === 'P2003') { // Foreign key constraint failed
if (error.meta?.field_name?.includes('empleado_id')) { // FK inválida
return res.status(400).json({ error: 'El empleado_id proporcionado no existe.' }); if (
} error.code === 'P2003' &&
} error.meta?.constraint === 'Asistencia_empleado_id_fkey'
res.status(500).json({ error: 'Error al crear asistencia.' }); )
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 // PUT update asistencia by ID
router.put('/:id', async (req, res) => { router.put('/:id', async (req, res) => {

View File

@@ -188,7 +188,7 @@ const handleSubmit = async () => {
} else { } else {
await asistenciasStore.createAsistencia(payload); await asistenciasStore.createAsistencia(payload);
} }
router.push({ name: 'AsistenciasIndex' }); router.push({ name: 'asistencias-index' });
} catch (error) { } catch (error) {
console.error('Error saving asistencia:', error); console.error('Error saving asistencia:', error);
const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.'; const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';