Cambios en el crud
This commit is contained in:
@@ -1,226 +1,224 @@
|
|||||||
// src/controladores/controlador_Membresias.js
|
// src/controladores/controlador_Membresias.js
|
||||||
|
|
||||||
// La conexión/pool se obtendrá a través de req.getConnection() inyectado por express-myconnection.
|
|
||||||
|
|
||||||
const controladorMembresias = {
|
const controladorMembresias = {
|
||||||
|
|
||||||
// --- Funciones para Tipos de Membresía (clientes_membresias) ---
|
// --- Funciones para Tipos de Membresía (clientes_membresias) ---
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function listarTiposMembresia
|
* @function listarTiposMembresia
|
||||||
* @description Lista todos los tipos de membresía disponibles, incluyendo información del combo ensamblado si aplica.
|
* @description Lista todos los tipos de membresía disponibles, incluyendo información del combo ensamblado si aplica.
|
||||||
* @param {Object} req - Objeto de solicitud de Express.
|
* @param {Object} req - Objeto de solicitud de Express.
|
||||||
* @param {Object} res - Objeto de respuesta de Express.
|
* @param {Object} res - Objeto de respuesta de Express.
|
||||||
*/
|
*/
|
||||||
listarTiposMembresia: async (req, res) => {
|
listarTiposMembresia: async (req, res) => {
|
||||||
let connection;
|
// let connection; // No es necesario si se usa req.pool directamente
|
||||||
try {
|
try {
|
||||||
connection = await req.getConnection();
|
// CAMBIO CLAVE AQUÍ: Usar req.pool directamente
|
||||||
const [rows] = await connection.query(`
|
const [rows] = await req.pool.query(`
|
||||||
SELECT
|
SELECT
|
||||||
cm.id_tipo_membresia,
|
cm.id_tipo_membresia,
|
||||||
cm.nombre_tipo,
|
cm.nombre_tipo,
|
||||||
cm.categoria_membresia,
|
cm.categoria_membresia,
|
||||||
cm.es_grupal,
|
cm.es_grupal,
|
||||||
cm.capacidad_maxima_miembros,
|
cm.capacidad_maxima_miembros,
|
||||||
cm.valor,
|
cm.valor,
|
||||||
cm.descripcion,
|
cm.descripcion,
|
||||||
cm.duracion_dias,
|
cm.duracion_dias,
|
||||||
cm.visitas_maximas_diarias,
|
cm.visitas_maximas_diarias,
|
||||||
cm.areas_de_acceso,
|
cm.areas_de_acceso,
|
||||||
cm.id_combo_ensamblado_incluido,
|
cm.id_combo_ensamblado_incluido,
|
||||||
cm.cantidad_combo_incluido,
|
cm.cantidad_combo_incluido,
|
||||||
pe.PdctEnsb_codigoEnsamble AS codigo_combo_ensamblado,
|
pe.PdctEnsb_codigoEnsamble AS codigo_combo_ensamblado,
|
||||||
cm.estado_tipo,
|
cm.estado_tipo,
|
||||||
cm.fecha_creacion,
|
cm.fecha_creacion,
|
||||||
cm.fecha_modificacion
|
cm.fecha_modificacion
|
||||||
FROM
|
FROM
|
||||||
clientes_membresias cm
|
clientes_membresias cm
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
productos_Ensamblados pe ON cm.id_combo_ensamblado_incluido = pe.PdctEnsb_ID
|
productos_Ensamblados pe ON cm.id_combo_ensamblado_incluido = pe.PdctEnsb_ID
|
||||||
`);
|
`);
|
||||||
res.json(rows);
|
res.json(rows);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error al listar tipos de membresía:', error);
|
console.error('Error al listar tipos de membresía:', error);
|
||||||
res.status(500).json({ mensaje: 'Error interno del servidor al listar tipos de membresía', error: error.message });
|
res.status(500).json({ mensaje: 'Error interno del servidor al listar tipos de membresía', error: error.message });
|
||||||
} finally {
|
}
|
||||||
if (connection && typeof connection.release === 'function') connection.release();
|
// finally { // El bloque finally para release no es necesario si se usa req.pool directamente
|
||||||
}
|
// if (connection && typeof connection.release === 'function') connection.release();
|
||||||
},
|
// }
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function obtenerTipoMembresiaPorId
|
* @function obtenerTipoMembresiaPorId
|
||||||
* @description Obtiene un tipo de membresía específico por su ID.
|
* @description Obtiene un tipo de membresía específico por su ID.
|
||||||
* @param {Object} req - Objeto de solicitud de Express (req.params.id contiene el ID del tipo de membresía).
|
* @param {Object} req - Objeto de solicitud de Express (req.params.id contiene el ID del tipo de membresía).
|
||||||
* @param {Object} res - Objeto de respuesta de Express.
|
* @param {Object} res - Objeto de respuesta de Express.
|
||||||
*/
|
*/
|
||||||
obtenerTipoMembresiaPorId: async (req, res) => {
|
obtenerTipoMembresiaPorId: async (req, res) => {
|
||||||
const { id } = req.params; // ID de la tabla clientes_membresias
|
const { id } = req.params; // ID de la tabla clientes_membresias
|
||||||
let connection;
|
// let connection;
|
||||||
try {
|
try {
|
||||||
connection = await req.getConnection();
|
// CAMBIO CLAVE AQUÍ: Usar req.pool directamente
|
||||||
const [rows] = await connection.query(`
|
const [rows] = await req.pool.query(`
|
||||||
SELECT
|
SELECT
|
||||||
cm.id_tipo_membresia,
|
cm.id_tipo_membresia,
|
||||||
cm.nombre_tipo,
|
cm.nombre_tipo,
|
||||||
cm.categoria_membresia,
|
cm.categoria_membresia,
|
||||||
cm.es_grupal,
|
cm.es_grupal,
|
||||||
cm.capacidad_maxima_miembros,
|
cm.capacidad_maxima_miembros,
|
||||||
cm.valor,
|
cm.valor,
|
||||||
cm.descripcion,
|
cm.descripcion,
|
||||||
cm.duracion_dias,
|
cm.duracion_dias,
|
||||||
cm.visitas_maximas_diarias,
|
cm.visitas_maximas_diarias,
|
||||||
cm.areas_de_acceso,
|
cm.areas_de_acceso,
|
||||||
cm.id_combo_ensamblado_incluido,
|
cm.id_combo_ensamblado_incluido,
|
||||||
cm.cantidad_combo_incluido,
|
cm.cantidad_combo_incluido,
|
||||||
pe.PdctEnsb_codigoEnsamble AS codigo_combo_ensamblado,
|
pe.PdctEnsb_codigoEnsamble AS codigo_combo_ensamblado,
|
||||||
cm.estado_tipo,
|
cm.estado_tipo,
|
||||||
cm.fecha_creacion,
|
cm.fecha_creacion,
|
||||||
cm.fecha_modificacion
|
cm.fecha_modificacion
|
||||||
FROM
|
FROM
|
||||||
clientes_membresias cm
|
clientes_membresias cm
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
productos_Ensamblados pe ON cm.id_combo_ensamblado_incluido = pe.PdctEnsb_ID
|
productos_Ensamblados pe ON cm.id_combo_ensamblado_incluido = pe.PdctEnsb_ID
|
||||||
WHERE cm.id_tipo_membresia = ?`, [id]);
|
WHERE cm.id_tipo_membresia = ?`, [id]);
|
||||||
|
|
||||||
if (rows.length === 0) {
|
if (rows.length === 0) {
|
||||||
return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado' });
|
return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado' });
|
||||||
}
|
}
|
||||||
res.json(rows[0]);
|
res.json(rows[0]);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error al obtener tipo de membresía:', error);
|
console.error('Error al obtener tipo de membresía:', error);
|
||||||
res.status(500).json({ mensaje: 'Error interno del servidor al obtener tipo de membresía', error: error.message });
|
res.status(500).json({ mensaje: 'Error interno del servidor al obtener tipo de membresía', error: error.message });
|
||||||
} finally {
|
}
|
||||||
if (connection && typeof connection.release === 'function') connection.release();
|
// finally {
|
||||||
}
|
// if (connection && typeof connection.release === 'function') connection.release();
|
||||||
},
|
// }
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function crearTipoMembresia
|
* @function crearTipoMembresia
|
||||||
* @description Crea un nuevo tipo de membresía.
|
* @description Crea un nuevo tipo de membresía.
|
||||||
* @param {Object} req - Objeto de solicitud de Express (req.body contiene los datos del tipo de membresía).
|
* @param {Object} req - Objeto de solicitud de Express (req.body contiene los datos del tipo de membresía).
|
||||||
* @param {Object} res - Objeto de respuesta de Express.
|
* @param {Object} res - Objeto de respuesta de Express.
|
||||||
*/
|
*/
|
||||||
crearTipoMembresia: async (req, res) => {
|
crearTipoMembresia: async (req, res) => {
|
||||||
const {
|
const {
|
||||||
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
||||||
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
||||||
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido
|
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido
|
||||||
} = req.body;
|
} = req.body;
|
||||||
|
|
||||||
// Validaciones básicas de campos obligatorios
|
// Validaciones básicas de campos obligatorios
|
||||||
if (!nombre_tipo || es_grupal === undefined || valor === undefined) {
|
if (!nombre_tipo || es_grupal === undefined || valor === undefined) {
|
||||||
return res.status(400).json({ mensaje: 'Faltan campos obligatorios para el tipo de membresía (nombre_tipo, es_grupal, valor).' });
|
return res.status(400).json({ mensaje: 'Faltan campos obligatorios para el tipo de membresía (nombre_tipo, es_grupal, valor).' });
|
||||||
}
|
}
|
||||||
|
|
||||||
let connection;
|
// let connection;
|
||||||
try {
|
try {
|
||||||
connection = await req.getConnection();
|
// CAMBIO CLAVE AQUÍ: Usar req.pool directamente para la query
|
||||||
const [result] = await connection.query(
|
const [result] = await req.pool.query(
|
||||||
`INSERT INTO clientes_membresias (
|
`INSERT INTO clientes_membresias (
|
||||||
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
||||||
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
||||||
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido,
|
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido,
|
||||||
estado_tipo, fecha_creacion
|
estado_tipo, fecha_creacion
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'ACTIVO', NOW())`,
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'ACTIVO', NOW())`,
|
||||||
[
|
[
|
||||||
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
||||||
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
||||||
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido
|
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
res.status(201).json({ mensaje: 'Tipo de membresía creado exitosamente', id: result.insertId });
|
res.status(201).json({ mensaje: 'Tipo de membresía creado exitosamente', id: result.insertId });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error al crear tipo de membresía:', error);
|
console.error('Error al crear tipo de membresía:', error);
|
||||||
// Manejo de error específico por entrada duplicada (ej. nombre_tipo único)
|
if (error.code === 'ER_DUP_ENTRY') {
|
||||||
if (error.code === 'ER_DUP_ENTRY') {
|
return res.status(409).json({ mensaje: 'Ya existe un tipo de membresía con ese nombre.', error: error.message });
|
||||||
return res.status(409).json({ mensaje: 'Ya existe un tipo de membresía con ese nombre.', error: error.message });
|
}
|
||||||
}
|
res.status(500).json({ mensaje: 'Error interno del servidor al crear tipo de membresía', error: error.message });
|
||||||
res.status(500).json({ mensaje: 'Error interno del servidor al crear tipo de membresía', error: error.message });
|
}
|
||||||
} finally {
|
// finally {
|
||||||
if (connection && typeof connection.release === 'function') connection.release();
|
// if (connection && typeof connection.release === 'function') connection.release();
|
||||||
}
|
// }
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function actualizarTipoMembresia
|
* @function actualizarTipoMembresia
|
||||||
* @description Actualiza un tipo de membresía existente por su ID.
|
* @description Actualiza un tipo de membresía existente por su ID.
|
||||||
* @param {Object} req - Objeto de solicitud de Express (req.params.id para el ID, req.body para los datos).
|
* @param {Object} req - Objeto de solicitud de Express (req.params.id para el ID, req.body para los datos).
|
||||||
* @param {Object} res - Objeto de respuesta de Express.
|
* @param {Object} res - Objeto de respuesta de Express.
|
||||||
*/
|
*/
|
||||||
actualizarTipoMembresia: async (req, res) => {
|
actualizarTipoMembresia: async (req, res) => {
|
||||||
const { id } = req.params; // ID del tipo de membresía a actualizar
|
const { id } = req.params; // ID del tipo de membresía a actualizar
|
||||||
const {
|
const {
|
||||||
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
||||||
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
||||||
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido, estado_tipo
|
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido, estado_tipo
|
||||||
} = req.body;
|
} = req.body;
|
||||||
|
|
||||||
// Validaciones básicas de campos obligatorios
|
if (!nombre_tipo || es_grupal === undefined || valor === undefined || !estado_tipo) {
|
||||||
if (!nombre_tipo || es_grupal === undefined || valor === undefined || !estado_tipo) {
|
return res.status(400).json({ mensaje: 'Faltan campos obligatorios para actualizar el tipo de membresía (nombre_tipo, es_grupal, valor, estado_tipo).' });
|
||||||
return res.status(400).json({ mensaje: 'Faltan campos obligatorios para actualizar el tipo de membresía (nombre_tipo, es_grupal, valor, estado_tipo).' });
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let connection;
|
// let connection;
|
||||||
try {
|
try {
|
||||||
connection = await req.getConnection();
|
// CAMBIO CLAVE AQUÍ: Usar req.pool directamente para la query
|
||||||
const [result] = await connection.query(
|
const [result] = await req.pool.query(
|
||||||
`UPDATE clientes_membresias SET
|
`UPDATE clientes_membresias SET
|
||||||
nombre_tipo = ?, categoria_membresia = ?, es_grupal = ?,
|
nombre_tipo = ?, categoria_membresia = ?, es_grupal = ?,
|
||||||
capacidad_maxima_miembros = ?, valor = ?, descripcion = ?,
|
capacidad_maxima_miembros = ?, valor = ?, descripcion = ?,
|
||||||
duracion_dias = ?, visitas_maximas_diarias = ?, areas_de_acceso = ?,
|
duracion_dias = ?, visitas_maximas_diarias = ?, areas_de_acceso = ?,
|
||||||
id_combo_ensamblado_incluido = ?, cantidad_combo_incluido = ?,
|
id_combo_ensamblado_incluido = ?, cantidad_combo_incluido = ?,
|
||||||
estado_tipo = ?, fecha_modificacion = NOW()
|
estado_tipo = ?, fecha_modificacion = NOW()
|
||||||
WHERE id_tipo_membresia = ?`,
|
WHERE id_tipo_membresia = ?`,
|
||||||
[
|
[
|
||||||
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros,
|
||||||
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
valor, descripcion, duracion_dias, visitas_maximas_diarias,
|
||||||
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido, estado_tipo, id
|
areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido, estado_tipo, id
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result.affectedRows === 0) {
|
if (result.affectedRows === 0) {
|
||||||
return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para actualizar' });
|
return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para actualizar' });
|
||||||
}
|
}
|
||||||
res.json({ mensaje: 'Tipo de membresía actualizado exitosamente' });
|
res.json({ mensaje: 'Tipo de membresía actualizado exitosamente' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error al actualizar tipo de membresía:', error);
|
console.error('Error al actualizar tipo de membresía:', error);
|
||||||
// Manejo de error específico por entrada duplicada
|
if (error.code === 'ER_DUP_ENTRY') {
|
||||||
if (error.code === 'ER_DUP_ENTRY') {
|
return res.status(409).json({ mensaje: 'Ya existe otro tipo de membresía con ese nombre.', error: error.message });
|
||||||
return res.status(409).json({ mensaje: 'Ya existe otro tipo de membresía con ese nombre.', error: error.message });
|
}
|
||||||
}
|
res.status(500).json({ mensaje: 'Error interno del servidor al actualizar tipo de membresía', error: error.message });
|
||||||
res.status(500).json({ mensaje: 'Error interno del servidor al actualizar tipo de membresía', error: error.message });
|
}
|
||||||
} finally {
|
// finally {
|
||||||
if (connection && typeof connection.release === 'function') connection.release();
|
// if (connection && typeof connection.release === 'function') connection.release();
|
||||||
}
|
// }
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function eliminarTipoMembresia
|
* @function eliminarTipoMembresia
|
||||||
* @description Elimina lógicamente un tipo de membresía por su ID (cambia su estado a 'ELIMINADO').
|
* @description Elimina lógicamente un tipo de membresía por su ID (cambia su estado a 'ELIMINADO').
|
||||||
* @param {Object} req - Objeto de solicitud de Express (req.params.id para el ID).
|
* @param {Object} req - Objeto de solicitud de Express (req.params.id para el ID).
|
||||||
* @param {Object} res - Objeto de respuesta de Express.
|
* @param {Object} res - Objeto de respuesta de Express.
|
||||||
*/
|
*/
|
||||||
eliminarTipoMembresia: async (req, res) => {
|
eliminarTipoMembresia: async (req, res) => {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
let connection;
|
// let connection;
|
||||||
try {
|
try {
|
||||||
connection = await req.getConnection();
|
// CAMBIO CLAVE AQUÍ: Usar req.pool directamente para la query
|
||||||
// Se recomienda una eliminación lógica para mantener la integridad referencial
|
const [result] = await req.pool.query('UPDATE clientes_membresias SET estado_tipo = "ELIMINADO" WHERE id_tipo_membresia = ?', [id]);
|
||||||
// si hay adquisiciones de membresía o historial asociados.
|
|
||||||
const [result] = await connection.query('UPDATE clientes_membresias SET estado_tipo = "ELIMINADO" WHERE id_tipo_membresia = ?', [id]);
|
|
||||||
|
|
||||||
if (result.affectedRows === 0) {
|
if (result.affectedRows === 0) {
|
||||||
return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para eliminar' });
|
return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para eliminar' });
|
||||||
}
|
}
|
||||||
res.json({ mensaje: 'Tipo de membresía eliminado (lógicamente) exitosamente' });
|
res.json({ mensaje: 'Tipo de membresía eliminado (lógicamente) exitosamente' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error al eliminar tipo de membresía:', error);
|
console.error('Error al eliminar tipo de membresía:', error);
|
||||||
res.status(500).json({ mensaje: 'Error interno del servidor al eliminar tipo de membresía', error: error.message });
|
res.status(500).json({ mensaje: 'Error interno del servidor al eliminar tipo de membresía', error: error.message });
|
||||||
} finally {
|
}
|
||||||
if (connection && typeof connection.release === 'function') connection.release();
|
// finally {
|
||||||
}
|
// if (connection && typeof connection.release === 'function') connection.release();
|
||||||
}
|
// }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = controladorMembresias;
|
module.exports = controladorMembresias;
|
||||||
Reference in New Issue
Block a user