actualizada API empleados, conectando UI con API
Some checks failed
build-and-deploy / filter (push) Successful in 3s
Sync to GitHub / sync (push) Failing after 1s
build-and-deploy / build (push) Successful in 13s
build-and-deploy / deploy (push) Successful in 14s

This commit is contained in:
2025-05-30 10:51:21 -06:00
parent 30f85bf602
commit 2a844d275d
4 changed files with 232 additions and 246 deletions

View File

@@ -1,142 +1,126 @@
import express from 'express';
const router = express.Router();
import { PrismaClient } from '../../prisma/generated/client/index.js';
const prisma = new PrismaClient();
import express from 'express'
import { PrismaClient } from '../../prisma/generated/client/index.js'
// GET all empleados
router.get('/', async (req, res) => {
const router = express.Router()
const prisma = new PrismaClient()
// ⚙️ helper: evita el crash al serializar BigInt
const fixBigInt = (data) =>
JSON.parse(JSON.stringify(data, (_, v) => (typeof v === 'bigint' ? v.toString() : v)))
// ───── GET todos los empleados ─────
router.get('/', async (_req, res) => {
try {
const empleados = await prisma.cliente.findMany({
where: { empleado: true },
});
res.json(empleados);
} catch (error) {
console.error(error); // Log the error for debugging
res.status(500).json({ error: 'Error al obtener empleados.' });
const empleados = await prisma.cliente.findMany({ where: { empleado: true } })
res.json(fixBigInt(empleados))
} catch (e) {
console.error(e)
res.status(500).json({ error: 'Error al obtener empleados.' })
}
});
})
// GET empleado by ID
// ───── GET empleado por ID ─────
router.get('/:id', async (req, res) => {
const { id } = req.params;
const id = BigInt(req.params.id)
try {
const empleado = await prisma.cliente.findFirst({
where: {
id: parseInt(id),
empleado: true
},
});
if (empleado) {
res.json(empleado);
} else {
res.status(404).json({ error: 'Empleado no encontrado.' });
}
} catch (error) {
console.error(error); // Log the error for debugging
res.status(500).json({ error: 'Error al obtener empleado.' });
const empleado = await prisma.cliente.findFirst({ where: { id, empleado: true } })
if (!empleado) return res.status(404).json({ error: 'Empleado no encontrado.' })
res.json(fixBigInt(empleado))
} catch (e) {
console.error(e)
res.status(500).json({ error: 'Error al obtener empleado.' })
}
});
})
// POST create new empleado
// ───── POST crear empleado ─────
router.post('/', async (req, res) => {
const { nombre, apellido, dni, telefono, direccion, email } = req.body;
try {
const nuevoEmpleado = await prisma.cliente.create({
data: {
nombre,
apellido,
dni,
telefono,
direccion,
email,
empleado: true, // Ensure empleado is set to true
},
});
res.status(201).json(nuevoEmpleado);
} catch (error) {
console.error(error); // Log the error for debugging
if (error.code === 'P2002' && error.meta?.target?.includes('dni')) {
return res.status(400).json({ error: 'Ya existe un cliente con este DNI.' });
}
if (error.code === 'P2002' && error.meta?.target?.includes('email')) {
return res.status(400).json({ error: 'Ya existe un cliente con este Email.' });
}
res.status(500).json({ error: 'Error al crear empleado.' });
}
});
const {
name,
cedula,
telefono,
ubicacion = '.',
grupo_estudio,
avatar_url,
idciat,
} = req.body
// PUT update empleado by ID
try {
const nuevo = await prisma.cliente.create({
data: {
name,
cedula: BigInt(cedula),
telefono,
ubicacion,
grupo_estudio,
avatar_url,
idciat,
empleado: true,
},
})
res.status(201).json(fixBigInt(nuevo))
} catch (e) {
console.error(e)
if (e.code === 'P2002' && e.meta?.target?.includes('cedula'))
return res.status(400).json({ error: 'Ya existe un cliente con esa cédula.' })
res.status(500).json({ error: 'Error al crear empleado.' })
}
})
// ───── PUT actualizar empleado ─────
router.put('/:id', async (req, res) => {
const { id } = req.params;
const { nombre, apellido, dni, telefono, direccion, email } = req.body;
const id = BigInt(req.params.id)
const {
name,
cedula,
telefono,
ubicacion,
grupo_estudio,
avatar_url,
idciat,
} = req.body
try {
// First, check if the employee exists and is an employee
const existingEmpleado = await prisma.cliente.findFirst({
where: {
id: parseInt(id),
empleado: true,
},
});
const existe = await prisma.cliente.findFirst({ where: { id, empleado: true } })
if (!existe) return res.status(404).json({ error: 'Empleado no encontrado.' })
if (!existingEmpleado) {
return res.status(404).json({ error: 'Empleado no encontrado.' });
}
const empleadoActualizado = await prisma.cliente.update({
where: { id: parseInt(id) },
const actualizado = await prisma.cliente.update({
where: { id },
data: {
nombre,
apellido,
dni,
name,
cedula: cedula !== undefined ? BigInt(cedula) : undefined,
telefono,
direccion,
email,
// empleado: true, // Keep it as an employee, or allow changing this? For now, keep as true.
ubicacion,
grupo_estudio,
avatar_url,
idciat,
},
});
res.json(empleadoActualizado);
} catch (error) {
console.error(error); // Log the error for debugging
if (error.code === 'P2002' && error.meta?.target?.includes('dni')) {
return res.status(400).json({ error: 'Ya existe un cliente con este DNI.' });
}
if (error.code === 'P2002' && error.meta?.target?.includes('email')) {
return res.status(400).json({ error: 'Ya existe un cliente con este Email.' });
}
if (error.code === 'P2025') { // Record to update not found
return res.status(404).json({ error: 'Empleado no encontrado para actualizar.' });
}
res.status(500).json({ error: 'Error al actualizar empleado.' });
})
res.json(fixBigInt(actualizado))
} catch (e) {
console.error(e)
if (e.code === 'P2002' && e.meta?.target?.includes('cedula'))
return res.status(400).json({ error: 'Ya existe un cliente con esa cédula.' })
if (e.code === 'P2025')
return res.status(404).json({ error: 'Empleado no encontrado para actualizar.' })
res.status(500).json({ error: 'Error al actualizar empleado.' })
}
});
})
// DELETE empleado by ID
// ───── DELETE eliminar empleado ─────
router.delete('/:id', async (req, res) => {
const { id } = req.params;
const id = BigInt(req.params.id)
try {
// First, check if the employee exists and is an employee
const existingEmpleado = await prisma.cliente.findFirst({
where: {
id: parseInt(id),
empleado: true,
},
});
const existe = await prisma.cliente.findFirst({ where: { id, empleado: true } })
if (!existe) return res.status(404).json({ error: 'Empleado no encontrado.' })
if (!existingEmpleado) {
return res.status(404).json({ error: 'Empleado no encontrado para eliminar.' });
}
await prisma.cliente.delete({
where: { id: parseInt(id) },
});
res.status(204).send(); // No content
} catch (error) {
console.error(error); // Log the error for debugging
if (error.code === 'P2025') { // Record to delete not found
return res.status(404).json({ error: 'Empleado no encontrado para eliminar.' });
}
res.status(500).json({ error: 'Error al eliminar empleado.' });
await prisma.cliente.delete({ where: { id } })
res.status(204).send()
} catch (e) {
console.error(e)
if (e.code === 'P2025')
return res.status(404).json({ error: 'Empleado no encontrado para eliminar.' })
res.status(500).json({ error: 'Error al eliminar empleado.' })
}
});
})
export default router;
export default router