captura correcta de errores para crear asistencia
This commit is contained in:
@@ -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.' });
|
||||
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.' })
|
||||
}
|
||||
}
|
||||
res.status(500).json({ error: 'Error al crear asistencia.' });
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
// PUT update asistencia by ID
|
||||
router.put('/:id', async (req, res) => {
|
||||
|
||||
@@ -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.';
|
||||
|
||||
Reference in New Issue
Block a user