import express from 'express'; const router = express.Router(); import { PrismaClient, Prisma } from '../../prisma/generated/client/index.js'; const prisma = new PrismaClient(); // GET all asistencias router.get('/', async (req, res) => { try { const asistencias = await prisma.asistencia.findMany(); res.json(asistencias); } catch (e) { console.error(e); res.status(500).json({ message: 'Error al obtener asistencias.' }); } }); // GET asistencia by ID router.get('/:id', async (req, res) => { const { id } = req.params; try { const asistencia = await prisma.asistencia.findUnique({ where: { id: parseInt(id) }, }); if (asistencia) { res.json(asistencia); } else { res.status(404).json({ message: 'Asistencia no encontrada.' }); } } catch (e) { console.error(e); res.status(500).json({ message: 'Error al obtener asistencia.' }); } }); // POST 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; if (!empleado_id) 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), entrada: entrada ? new Date(entrada) : null, salida: salida ? new Date(salida) : null, historial, observacion, estado, fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null, creador_id, modificado_id, anulador_id, }, }); 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.' }); } }); // 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; 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, anulador_id, }; if (empleado_id !== undefined) { updateData.empleado_id = BigInt(empleado_id); } const asistenciaActualizada = await prisma.asistencia.update({ where: { id: parseInt(id) }, data: updateData, }); res.json(asistenciaActualizada); } 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 router.delete('/:id', async (req, res) => { const { id } = req.params; try { await prisma.asistencia.delete({ where: { id: parseInt(id) }, }); 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.' }); } }); export default router;