implementado el manejo de errores correcto de prisma
This commit is contained in:
@@ -8,8 +8,8 @@ router.get('/', async (req, res) => {
|
||||
try {
|
||||
const asistencias = await prisma.asistencia.findMany();
|
||||
res.json(asistencias);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
res.status(500).json({ message: 'Error al obtener asistencias.' });
|
||||
}
|
||||
});
|
||||
@@ -26,13 +26,13 @@ router.get('/:id', async (req, res) => {
|
||||
} else {
|
||||
res.status(404).json({ message: 'Asistencia no encontrada.' });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
res.status(500).json({ message: 'Error al obtener asistencia.' });
|
||||
}
|
||||
});
|
||||
|
||||
// POST ➜ crear asistencia
|
||||
// POST crear asistencia
|
||||
router.post('/', async (req, res) => {
|
||||
const {
|
||||
empleado_id,
|
||||
@@ -45,99 +45,107 @@ router.post('/', async (req, res) => {
|
||||
creador_id,
|
||||
modificado_id,
|
||||
anulador_id,
|
||||
} = req.body
|
||||
} = req.body;
|
||||
|
||||
if (!empleado_id)
|
||||
return res.status(400).json({ message: 'El campo empleado_id es obligatorio.' })
|
||||
return res.status(400).json({ message: 'El campo empleado_id es obligatorio.' });
|
||||
|
||||
try {
|
||||
const nuevaAsistencia = await prisma.asistencia.create({
|
||||
data: {
|
||||
empleado_id: BigInt(empleado_id), // FK a Cliente.id
|
||||
entrada: entrada ? new Date(entrada) : null,
|
||||
salida: salida ? new Date(salida) : null,
|
||||
historial, // JSON
|
||||
empleado_id: BigInt(empleado_id),
|
||||
entrada: entrada ? new Date(entrada) : null,
|
||||
salida: salida ? new Date(salida) : null,
|
||||
historial,
|
||||
observacion,
|
||||
estado,
|
||||
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null,
|
||||
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null,
|
||||
creador_id,
|
||||
modificado_id,
|
||||
anulador_id,
|
||||
},
|
||||
})
|
||||
|
||||
res.status(201).json(nuevaAsistencia)
|
||||
} catch (e){
|
||||
|
||||
// ⚠️ captura FK error: Asistencia_empleado_id_fkey
|
||||
if(e instanceof Prisma.PrismaClientKnownRequestError ) {
|
||||
if( e.code === 'P2003') {
|
||||
return res.status(400).json({ message: 'El empleado_id proporcionado no existe.' })
|
||||
});
|
||||
res.status(201).json(nuevaAsistencia);
|
||||
} catch (e) {
|
||||
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
if (e.code === 'P2003' && e.meta?.field_name?.includes('empleado_id')) {
|
||||
return res.status(400).json({ message: 'El empleado_id proporcionado no existe.' });
|
||||
}
|
||||
}
|
||||
|
||||
console.error(e)
|
||||
res.status(500).json({ message: 'Error al crear asistencia.' })
|
||||
console.error(e);
|
||||
res.status(500).json({ message: 'Error al crear asistencia.' });
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
|
||||
// PUT update asistencia by ID
|
||||
// PUT actualizar asistencia
|
||||
router.put('/:id', async (req, res) => {
|
||||
const { id } = req.params;
|
||||
const { empleado_id, entrada, salida, historial, observacion, estado, fecha_anulado, modificado_id, anulador_id } = req.body;
|
||||
|
||||
const {
|
||||
empleado_id,
|
||||
entrada,
|
||||
salida,
|
||||
historial,
|
||||
observacion,
|
||||
estado,
|
||||
fecha_anulado,
|
||||
modificado_id,
|
||||
anulador_id,
|
||||
} = req.body;
|
||||
|
||||
try {
|
||||
const updateData = {
|
||||
entrada: entrada ? new Date(entrada) : undefined,
|
||||
salida: salida ? new Date(salida) : undefined,
|
||||
historial,
|
||||
observacion,
|
||||
estado,
|
||||
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : undefined,
|
||||
modificado_id, // Should ideally be taken from authenticated user
|
||||
anulador_id
|
||||
entrada: entrada ? new Date(entrada) : undefined,
|
||||
salida: salida ? new Date(salida) : undefined,
|
||||
historial,
|
||||
observacion,
|
||||
estado,
|
||||
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : undefined,
|
||||
modificado_id,
|
||||
anulador_id,
|
||||
};
|
||||
|
||||
// If empleado_id is provided, include it in updateData.
|
||||
// Be cautious: changing empleado_id might not be a typical operation for an existing attendance record.
|
||||
if (empleado_id !== undefined) {
|
||||
updateData.empleado_id = parseInt(empleado_id);
|
||||
updateData.empleado_id = BigInt(empleado_id);
|
||||
}
|
||||
|
||||
const asistenciaActualizada = await prisma.asistencia.update({
|
||||
where: { id: parseInt(id) },
|
||||
data: updateData,
|
||||
});
|
||||
|
||||
res.json(asistenciaActualizada);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
if (error.code === 'P2025') { // Record to update not found
|
||||
return res.status(404).json({ message: 'Asistencia no encontrada para actualizar.' });
|
||||
}
|
||||
if (error.code === 'P2003') { // Foreign key constraint failed
|
||||
if (error.meta?.field_name?.includes('empleado_id')) {
|
||||
return res.status(400).json({ message: 'El empleado_id proporcionado no existe.' });
|
||||
}
|
||||
} catch (e) {
|
||||
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
if (e.code === 'P2025') {
|
||||
return res.status(404).json({ message: 'Asistencia no encontrada para actualizar.' });
|
||||
}
|
||||
if (e.code === 'P2003' && e.meta?.field_name?.includes('empleado_id')) {
|
||||
return res.status(400).json({ message: 'El empleado_id proporcionado no existe.' });
|
||||
}
|
||||
}
|
||||
|
||||
console.error(e);
|
||||
res.status(500).json({ message: 'Error al actualizar asistencia.' });
|
||||
}
|
||||
});
|
||||
|
||||
// DELETE asistencia by ID
|
||||
// DELETE asistencia
|
||||
router.delete('/:id', async (req, res) => {
|
||||
const { id } = req.params;
|
||||
try {
|
||||
await prisma.asistencia.delete({
|
||||
where: { id: parseInt(id) },
|
||||
});
|
||||
res.status(204).send(); // No content
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
if (error.code === 'P2025') { // Record to delete not found
|
||||
return res.status(404).json({ message: 'Asistencia no encontrada para eliminar.' });
|
||||
res.status(204).send();
|
||||
} catch (e) {
|
||||
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
||||
if (e.code === 'P2025') {
|
||||
return res.status(404).json({ message: 'Asistencia no encontrada para eliminar.' });
|
||||
}
|
||||
}
|
||||
|
||||
console.error(e);
|
||||
res.status(500).json({ message: 'Error al eliminar asistencia.' });
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user