diff --git a/src/controladores/controlador_Clientes.js b/src/controladores/controlador_Clientes.js index 5749568..d618ea8 100644 --- a/src/controladores/controlador_Clientes.js +++ b/src/controladores/controlador_Clientes.js @@ -379,5 +379,111 @@ controlador.api_consultaCliente = (req, res) => { } }*/ +/*** API CLIENTES ***/ +/** + * @description Obtiene un cliente por su ID y devuelve los datos en formato JSON. + * Usado por EditarCliente.vue para cargar los datos. + * Ruta: GET /api/clientes/:client_id + */ +controlador.obtenerClienteJsonPorId = (req, res) => { + const { client_id } = req.params; + req.getConnection((err, conn) => { + if (err) { + console.error('Error al obtener conexión para obtener cliente JSON:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión.' }); + } + // La consulta selecciona las columnas necesarias de tu tabla `clientes` + conn.query('SELECT client_id, client_nombre, client_rucCed, client_direccion, client_celular, client_email, client_fechaReg, client_estado FROM clientes WHERE client_id = ?', [client_id], (err, rows) => { + if (err) { + console.error('Error al consultar cliente por ID (JSON):', err); + return res.status(500).json({ mensaje: 'Error al consultar cliente.', error: err.message }); + } + if (rows.length > 0) { + res.json(rows[0]); // Devuelve el objeto cliente directamente + } else { + res.status(404).json({ mensaje: 'Cliente no encontrado.' }); + } + }); + }); +}; + +/** + * @description Crea un nuevo cliente y devuelve una respuesta JSON. + * Usado por NuevoCliente.vue. + * Ruta: POST /api/clientes + */ +controlador.crearClienteJson = (req, res) => { + const data = req.body; // Los datos del cliente vienen en el cuerpo de la solicitud (JSON) + req.getConnection((err, conn) => { + if (err) { + console.error('Error al obtener conexión para crear cliente JSON:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión.' }); + } + // `INSERT INTO clientes SET ?` mapea las propiedades del objeto `data` a las columnas de la tabla + conn.query('INSERT INTO clientes SET ?', [data], (err, result) => { + if (err) { + console.error('Error al insertar nuevo cliente (JSON):', err); + return res.status(500).json({ mensaje: 'Error al guardar el cliente.', error: err.message }); + } + res.status(201).json({ mensaje: 'Cliente guardado exitosamente.', id: result.insertId }); + }); + }); +}; + +/** + * @description Actualiza un cliente existente y devuelve una respuesta JSON. + * Usado por EditarCliente.vue para enviar los cambios. + * Ruta: PUT /api/clientes/:client_id + */ +controlador.actualizarClienteJson = (req, res) => { + const { client_id } = req.params; // ID del cliente a actualizar + const nCliente = req.body; // Datos actualizados del cliente en el cuerpo de la solicitud + + req.getConnection((err, conn) => { + if (err) { + console.error('Error al obtener conexión para actualizar cliente JSON:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión.' }); + } + // `UPDATE clientes SET ? WHERE client_id = ?` mapea las propiedades de `nCliente` a las columnas + conn.query('UPDATE clientes SET ? WHERE client_id = ?', [nCliente, client_id], (err, result) => { + if (err) { + console.error('Error al actualizar cliente (JSON):', err); + return res.status(500).json({ mensaje: 'Error al actualizar el cliente.', error: err.message }); + } + if (result.affectedRows === 0) { + return res.status(404).json({ mensaje: 'Cliente no encontrado para actualizar.' }); + } + res.json({ mensaje: 'Cliente actualizado exitosamente.' }); + }); + }); +}; + +/** + * @description Elimina un cliente por su ID y devuelve una respuesta JSON. + * Usado por ListaClientes.vue para la eliminación. + * Ruta: DELETE /api/clientes/:client_id + */ +controlador.eliminarClienteJson = (req, res) => { + const { client_id } = req.params; // ID del cliente a eliminar + req.getConnection((err, conn) => { + if (err) { + console.error('Error al obtener conexión para eliminar cliente JSON:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión.' }); + } + // La consulta DELETE utiliza `client_id` de tu tabla + conn.query('DELETE FROM clientes WHERE client_id = ?', [client_id], (err, result) => { + if (err) { + console.error('Error al eliminar cliente (JSON):', err); + return res.status(500).json({ mensaje: 'Error al eliminar el cliente.', error: err.message }); + } + if (result.affectedRows === 0) { + return res.status(404).json({ mensaje: 'Cliente no encontrado para eliminar.' }); + } + res.json({ mensaje: 'Cliente eliminado exitosamente.' }); + }); + }); +}; + + module.exports = controlador; diff --git a/src/rutas/rt_clientes.js b/src/rutas/rt_clientes.js index 3115b1d..8f2611e 100644 --- a/src/rutas/rt_clientes.js +++ b/src/rutas/rt_clientes.js @@ -33,6 +33,16 @@ rutas.get('/busquedaSRI/', controladorClientes.buscarCli_sri);//API consulta cli //API CONSULTA CLIENTES: https://NAME_SERVER/api_consultaClientes?id=numero_rucOcedula => https://app.factura-e.net/api_consultaClientes?id=0701637498001 rutas.get('/api_consultaClientes/', controladorClientes.api_consultaCliente);//API consulta clientes +// --- NUEVAS RUTAS RESTful para CLIENTES (para el frontend Vue) --- +// Obtener un cliente por su ID (para EditarCliente.vue) +rutas.get('/api/clientes/:client_id', controladorClientes.obtenerClienteJsonPorId); // Nuevo endpoint RESTful GET +// Crear un nuevo cliente (para NuevoCliente.vue) +rutas.post('/api/clientes', controladorClientes.crearClienteJson); // Nuevo endpoint RESTful POST +// Actualizar un cliente existente (para EditarCliente.vue) +rutas.put('/api/clientes/:client_id', controladorClientes.actualizarClienteJson); // Nuevo endpoint RESTful PUT +// Eliminar un cliente (para ListaClientes.vue) +rutas.delete('/api/clientes/:client_id', controladorClientes.eliminarClienteJson); // Nuevo endpoint RESTful DELETE + // --- Rutas RESTful para TIPOS de Membresías (tabla 'clientes_membresias') --- // Estas rutas apuntarán al nuevo controlador_Membresias rutas.get('/api/tipos-membresia', controladorMembresias.listarTiposMembresia);