creacion de CRUD AREAS ACCEOS clientes_membresias_areas_acceso
This commit is contained in:
@@ -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
|
|
||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user