creacion de CRUD AREAS ACCEOS clientes_membresias_areas_acceso

This commit is contained in:
Pablinux
2025-06-06 12:44:09 -05:00
parent d5e2b2bea8
commit 4966aaabc6
2 changed files with 149 additions and 8 deletions

View File

@@ -1,18 +1,38 @@
// src/controladores/controlador_Areas.js
const controladorAreas = { const controladorAreas = {
/** /**
* @function listarAreas * @function listarAreas
* @description Lista todas las áreas de acceso configuradas en la tabla `areas_configuracion`. * @description Lista todas las áreas de acceso configuradas en la tabla `clientes_membresias_areas_acceso`.
* @param {Object} req - Objeto de solicitud de Express. * Filtra por estado si se proporciona un query param `estado`.
* @param {Object} req - Objeto de solicitud de Express (req.query.estado).
* @param {Object} res - Objeto de respuesta de Express. * @param {Object} res - Objeto de respuesta de Express.
*/ */
listarAreas: (req, res) => { listarAreas: (req, res) => {
const { estado } = req.query; // Obtener el parámetro de estado
req.getConnection((err, connection) => { req.getConnection((err, connection) => {
if (err) { if (err) {
console.error('Error al obtener conexión para listar áreas:', err); console.error('Error al obtener conexión para listar áreas:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message }); return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message });
} }
connection.query('SELECT id_area, nombre_area, descripcion, estado_area FROM areas_configuracion WHERE estado_area = "ACTIVA" ORDER BY nombre_area', (err, rows) => {
let query = 'SELECT id_area, nombre_area, descripcion, estado_area, fecha_creacion, fecha_modificacion FROM clientes_membresias_areas_acceso';
const queryParams = [];
if (estado) {
// Validar que el estado sea uno de los permitidos por el ENUM
const estadosPermitidos = ['ACTIVA', 'INACTIVA'];
if (!estadosPermitidos.includes(estado.toUpperCase())) {
return res.status(400).json({ mensaje: `El estado proporcionado '${estado}' no es válido. Los estados permitidos son: ${estadosPermitidos.join(', ')}.` });
}
query += ' WHERE estado_area = ?';
queryParams.push(estado.toUpperCase());
}
query += ' ORDER BY nombre_area';
connection.query(query, queryParams, (err, rows) => {
if (err) { if (err) {
console.error('Error al listar áreas de configuración:', err); console.error('Error al listar áreas de configuración:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al listar áreas', error: err.message }); return res.status(500).json({ mensaje: 'Error interno del servidor al listar áreas', error: err.message });
@@ -22,9 +42,126 @@ const controladorAreas = {
}); });
}, },
// Puedes añadir otros métodos aquí si necesitas CRUD completo para las áreas de configuración /**
// por ejemplo: obtenerAreaPorId, crearArea, actualizarArea, eliminarArea * @function obtenerAreaPorId
* @description Obtiene una área específica por su ID.
* @param {Object} req - Objeto de solicitud de Express (req.params.id).
* @param {Object} res - Objeto de respuesta de Express.
*/
obtenerAreaPorId: (req, res) => {
const { id } = req.params;
req.getConnection((err, connection) => {
if (err) {
console.error('Error al obtener conexión para área por ID:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message });
}
connection.query('SELECT id_area, nombre_area, descripcion, estado_area FROM clientes_membresias_areas_acceso WHERE id_area = ?', [id], (err, rows) => {
if (err) {
console.error('Error al obtener área por ID:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al obtener área', error: err.message });
}
if (rows.length === 0) {
return res.status(404).json({ mensaje: 'Área no encontrada' });
}
res.json(rows[0]);
});
});
},
/**
* @function crearArea
* @description Crea una nueva área de acceso.
* @param {Object} req - Objeto de solicitud de Express (req.body contiene los datos del área).
* @param {Object} res - Objeto de respuesta de Express.
*/
crearArea: (req, res) => {
const { nombre_area, descripcion } = req.body;
if (!nombre_area) {
return res.status(400).json({ mensaje: 'El nombre del área es obligatorio.' });
}
req.getConnection((err, connection) => {
if (err) {
console.error('Error al obtener conexión para crear área:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message });
}
connection.query('INSERT INTO clientes_membresias_areas_acceso (nombre_area, descripcion, estado_area, fecha_creacion) VALUES (?, ?, "ACTIVA", NOW())', [nombre_area, descripcion], (err, result) => {
if (err) {
console.error('Error al crear área:', err);
if (err.code === 'ER_DUP_ENTRY') {
return res.status(409).json({ mensaje: 'Ya existe un área con ese nombre.', error: err.message });
}
return res.status(500).json({ mensaje: 'Error interno del servidor al crear área', error: err.message });
}
res.status(201).json({ mensaje: 'Área creada exitosamente', id_area: result.insertId });
});
});
},
/**
* @function actualizarArea
* @description Actualiza una área de acceso existente.
* @param {Object} req - Objeto de solicitud de Express (req.params.id, req.body).
* @param {Object} res - Objeto de respuesta de Express.
*/
actualizarArea: (req, res) => {
const { id } = req.params;
const { nombre_area, descripcion, estado_area } = req.body;
if (!nombre_area || !estado_area) {
return res.status(400).json({ mensaje: 'El nombre del área y el estado son obligatorios para actualizar.' });
}
// Validar que el estado sea uno de los permitidos por el ENUM
const estadosPermitidos = ['ACTIVA', 'INACTIVA'];
if (!estadosPermitidos.includes(estado_area.toUpperCase())) {
return res.status(400).json({ mensaje: `El estado proporcionado '${estado_area}' no es válido. Los estados permitidos son: ${estadosPermitidos.join(', ')}.` });
}
req.getConnection((err, connection) => {
if (err) {
console.error('Error al obtener conexión para actualizar área:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message });
}
connection.query('UPDATE clientes_membresias_areas_acceso SET nombre_area = ?, descripcion = ?, estado_area = ?, fecha_modificacion = NOW() WHERE id_area = ?', [nombre_area, descripcion, estado_area, id], (err, result) => {
if (err) {
console.error('Error al actualizar área:', err);
if (err.code === 'ER_DUP_ENTRY') {
return res.status(409).json({ mensaje: 'Ya existe otra área con ese nombre.', error: err.message });
}
return res.status(500).json({ mensaje: 'Error interno del servidor al actualizar área', error: err.message });
}
if (result.affectedRows === 0) {
return res.status(404).json({ mensaje: 'Área no encontrada para actualizar' });
}
res.json({ mensaje: 'Área actualizada exitosamente' });
});
});
},
/**
* @function inactivarArea
* @description Cambia el estado de una área a 'INACTIVA'. (Eliminación lógica).
* @param {Object} req - Objeto de solicitud de Express (req.params.id).
* @param {Object} res - Objeto de respuesta de Express.
*/
inactivarArea: (req, res) => {
const { id } = req.params;
req.getConnection((err, connection) => {
if (err) {
console.error('Error al obtener conexión para inactivar área:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message });
}
connection.query('UPDATE clientes_membresias_areas_acceso SET estado_area = "INACTIVA", fecha_modificacion = NOW() WHERE id_area = ?', [id], (err, result) => {
if (err) {
console.error('Error al inactivar área:', err);
return res.status(500).json({ mensaje: 'Error interno del servidor al inactivar área', error: err.message });
}
if (result.affectedRows === 0) {
return res.status(404).json({ mensaje: 'Área no encontrada para inactivar' });
}
res.json({ mensaje: 'Área inactivada exitosamente' });
});
});
}
}; };
module.exports = controladorAreas; module.exports = controladorAreas;
// Este controlador maneja las operaciones relacionadas con las áreas de configuración

View File

@@ -74,8 +74,12 @@ rutas.get('/api/miembros/estado/:estado', controladorMiembros.listarMiembrosPorE
// GET /api/tipos-membresia/:id_tipo_membresia/miembros // GET /api/tipos-membresia/:id_tipo_membresia/miembros
rutas.get('/api/tipos-membresia/:id_tipo_membresia/miembros', controladorMiembros.listarMiembrosPorTipoMembresia); rutas.get('/api/tipos-membresia/:id_tipo_membresia/miembros', controladorMiembros.listarMiembrosPorTipoMembresia);
// Rutas para la gestión de Áreas de Configuración // Rutas para la administración de Áreas de Acceso
rutas.get('/api/areas', controladorAreas.listarAreas); // Endpoint para listar todas las áreas rutas.get('/api/areas', controladorAreas.listarAreas);
rutas.get('/api/areas/:id', controladorAreas.obtenerAreaPorId);
rutas.post('/api/areas', controladorAreas.crearArea);
rutas.put('/api/areas/:id', controladorAreas.actualizarArea);
rutas.put('/api/areas/:id/inactivar', controladorAreas.inactivarArea); // Ruta específica para inactivar
// Ruta para obtener ciudades // Ruta para obtener ciudades
rutas.get('/api/ciudades', controladorClientes.obtenerCiudades); rutas.get('/api/ciudades', controladorClientes.obtenerCiudades);