mejorando el handling de los errores
Some checks failed
build-and-deploy / filter (push) Successful in 2s
Sync to GitHub / sync (push) Failing after 2s
build-and-deploy / build (push) Successful in 9s
build-and-deploy / deploy (push) Successful in 15s

This commit is contained in:
2025-05-30 11:21:35 -06:00
parent faa18be61d
commit 6c7e008164

View File

@@ -1,6 +1,6 @@
import express from 'express'; import express from 'express';
const router = express.Router(); const router = express.Router();
import { PrismaClient } from '../../prisma/generated/client/index.js'; import { PrismaClient, Prisma } from '../../prisma/generated/client/index.js';
const prisma = new PrismaClient(); const prisma = new PrismaClient();
// GET all asistencias // GET all asistencias
@@ -32,7 +32,7 @@ router.get('/:id', async (req, res) => {
} }
}); });
// POST /api/asistencias ➜ crear asistencia // POST ➜ crear asistencia
router.post('/', async (req, res) => { router.post('/', async (req, res) => {
const { const {
empleado_id, empleado_id,
@@ -40,7 +40,7 @@ router.post('/', async (req, res) => {
salida, salida,
historial, historial,
observacion, observacion,
estado = 'pendiente', estado,
fecha_anulado, fecha_anulado,
creador_id, creador_id,
modificado_id, modificado_id,
@@ -53,13 +53,13 @@ router.post('/', async (req, res) => {
try { try {
const nuevaAsistencia = await prisma.asistencia.create({ const nuevaAsistencia = await prisma.asistencia.create({
data: { data: {
empleado: { connect: { id: BigInt(empleado_id) } }, // FK con validación implícita empleado_id: BigInt(empleado_id), // FK a Cliente.id
entrada: entrada ? new Date(entrada) : null, entrada: entrada ? new Date(entrada) : null,
salida: salida ? new Date(salida) : null, salida: salida ? new Date(salida) : null,
historial, // tipo Json en el schema historial, // JSON
observacion, observacion,
estado, estado,
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null, fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null,
creador_id, creador_id,
modificado_id, modificado_id,
anulador_id, anulador_id,
@@ -67,23 +67,22 @@ router.post('/', async (req, res) => {
}) })
res.status(201).json(nuevaAsistencia) res.status(201).json(nuevaAsistencia)
} catch (error) { } catch (e){
console.error(error)
// FK inválida // ⚠️ captura FK error: Asistencia_empleado_id_fkey
if ( if(e instanceof Prisma.PrismaClientKnownRequestError ) {
error.code === 'P2003' && if( e.code === 'P2003') {
error.meta?.constraint === 'Asistencia_empleado_id_fkey' return res.status(400).json({ error: 'El empleado_id proporcionado no existe.' })
) }
return res }
.status(400)
.json({ error: 'El empleado_id proporcionado no existe.' })
console.error(e)
res.status(500).json({ error: 'Error al crear asistencia.' }) res.status(500).json({ error: 'Error al crear asistencia.' })
} }
}) })
// PUT update asistencia by ID // PUT update asistencia by ID
router.put('/:id', async (req, res) => { router.put('/:id', async (req, res) => {
const { id } = req.params; const { id } = req.params;