import express from 'express'; const router = express.Router(); import { PrismaClient, Prisma } from '../../prisma/generated/client/index.js'; const prisma = new PrismaClient(); // GET all tareas router.get('/', async (req, res) => { try { const tareas = await prisma.tareaRealizada.findMany(); res.json(tareas); } catch (e) { console.error(e); res.status(500).json({ message: 'Error al obtener tareas.' }); } }); // GET tarea by ID router.get('/:id', async (req, res) => { const { id } = req.params; try { const tarea = await prisma.tareaRealizada.findUnique({ where: { id: parseInt(id) }, }); if (tarea) { res.json(tarea); } else { res.status(404).json({ message: 'Tarea no encontrada.' }); } } catch (e) { console.error(e); res.status(500).json({ message: 'Error al obtener tarea.' }); } }); // POST create new tarea router.post('/', async (req, res) => { const { empleado_id, planilla_id, titulo, precio, estado, observacion, fecha, tipo, fecha_anulado, creador_id, anulador_id, } = req.body; if (!empleado_id || !titulo || !fecha) { return res.status(400).json({ message: 'Los campos empleado_id, titulo y fecha son obligatorios.', }); } try { const nuevaTarea = await prisma.tareaRealizada.create({ data: { empleado_id: parseInt(empleado_id), planilla_id: planilla_id ? parseInt(planilla_id) : null, titulo, precio: precio ? parseFloat(precio) : null, estado: estado || 'pendiente', observacion, fecha: new Date(fecha), tipo: tipo || '', fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null, creador_id, anulador_id, }, }); res.status(201).json(nuevaTarea); } catch (e) { if (e instanceof Prisma.PrismaClientKnownRequestError) { if (e.code === 'P2003') { if (e.meta?.field_name?.includes('empleado_id')) { return res.status(400).json({ message: 'El empleado_id proporcionado no existe.' }); } if (e.meta?.field_name?.includes('planilla_id')) { return res.status(400).json({ message: 'El planilla_id proporcionado no existe.' }); } } } console.error(e); res.status(500).json({ message: 'Error al crear tarea.' }); } }); // PUT update tarea by ID router.put('/:id', async (req, res) => { const { id } = req.params; const { empleado_id, planilla_id, titulo, precio, estado, observacion, fecha, tipo, fecha_anulado, anulador_id, } = req.body; try { const updateData = {}; if (empleado_id !== undefined) updateData.empleado_id = parseInt(empleado_id); if (planilla_id !== undefined) updateData.planilla_id = planilla_id ? parseInt(planilla_id) : null; if (titulo !== undefined) updateData.titulo = titulo; if (precio !== undefined) updateData.precio = precio ? parseFloat(precio) : null; if (estado !== undefined) updateData.estado = estado; if (observacion !== undefined) updateData.observacion = observacion; if (fecha !== undefined) updateData.fecha = new Date(fecha); if (tipo !== undefined) updateData.tipo = tipo; if (fecha_anulado !== undefined) updateData.fecha_anulado = fecha_anulado ? new Date(fecha_anulado) : null; if (anulador_id !== undefined) updateData.anulador_id = anulador_id; const tareaActualizada = await prisma.tareaRealizada.update({ where: { id: parseInt(id) }, data: updateData, }); res.json(tareaActualizada); } catch (e) { if (e instanceof Prisma.PrismaClientKnownRequestError) { if (e.code === 'P2025') { return res.status(404).json({ message: 'Tarea no encontrada para actualizar.' }); } if (e.code === 'P2003') { if (e.meta?.field_name?.includes('empleado_id')) { return res.status(400).json({ message: 'El empleado_id proporcionado no existe.' }); } if (e.meta?.field_name?.includes('planilla_id')) { return res.status(400).json({ message: 'El planilla_id proporcionado no existe.' }); } } } console.error(e); res.status(500).json({ message: 'Error al actualizar tarea.' }); } }); // DELETE tarea by ID router.delete('/:id', async (req, res) => { const { id } = req.params; try { await prisma.tareaRealizada.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: 'Tarea no encontrada para eliminar.' }); } } console.error(e); res.status(500).json({ message: 'Error al eliminar tarea.' }); } }); export default router;