Files
planilla/api/routes/asistencias/asistencias.js
2025-06-05 02:29:19 -06:00

154 lines
3.9 KiB
JavaScript

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(\\d+)', 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') {
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(\\d+)', 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') {
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(\\d+)', 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;