actualizada API empleados, conectando UI con API
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user