diff --git a/src/controladores/controlador_Membresias.js b/src/controladores/controlador_Membresias.js index 6c8e4aa..b80b584 100644 --- a/src/controladores/controlador_Membresias.js +++ b/src/controladores/controlador_Membresias.js @@ -2,19 +2,19 @@ const controladorMembresias = { - // --- Funciones para Tipos de Membresía (clientes_membresias) --- - /** * @function listarTiposMembresia * @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} res - Objeto de respuesta de Express. */ - listarTiposMembresia: async (req, res) => { - // let connection; // No es necesario si se usa req.pool directamente - try { - // CAMBIO CLAVE AQUÍ: Usar req.pool directamente - const [rows] = await req.pool.query(` + listarTiposMembresia: (req, res) => { // ¡Ya no es async aquí directamente! + req.getConnection((err, connection) => { // Obtiene la conexión con un callback + if (err) { + console.error('Error al obtener conexión para listar tipos de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message }); + } + connection.query(` SELECT cm.id_tipo_membresia, cm.nombre_tipo, @@ -36,15 +36,15 @@ const controladorMembresias = { clientes_membresias cm LEFT JOIN productos_Ensamblados pe ON cm.id_combo_ensamblado_incluido = pe.PdctEnsb_ID - `); - res.json(rows); - } catch (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 }); - } - // finally { // El bloque finally para release no es necesario si se usa req.pool directamente - // if (connection && typeof connection.release === 'function') connection.release(); - // } + `, (err, rows) => { // Ejecuta la query con un callback + if (err) { + console.error('Error al listar tipos de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al listar tipos de membresía', error: err.message }); + } + res.json(rows); + // express-myconnection se encarga de liberar la conexión automáticamente si no usas transacciones manuales + }); + }); }, /** @@ -53,12 +53,14 @@ const controladorMembresias = { * @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. */ - obtenerTipoMembresiaPorId: async (req, res) => { - const { id } = req.params; // ID de la tabla clientes_membresias - // let connection; - try { - // CAMBIO CLAVE AQUÍ: Usar req.pool directamente - const [rows] = await req.pool.query(` + obtenerTipoMembresiaPorId: (req, res) => { + const { id } = req.params; + req.getConnection((err, connection) => { + if (err) { + console.error('Error al obtener conexión para tipo de membresía por ID:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message }); + } + connection.query(` SELECT cm.id_tipo_membresia, cm.nombre_tipo, @@ -80,19 +82,17 @@ const controladorMembresias = { clientes_membresias cm LEFT JOIN productos_Ensamblados pe ON cm.id_combo_ensamblado_incluido = pe.PdctEnsb_ID - WHERE cm.id_tipo_membresia = ?`, [id]); - - if (rows.length === 0) { - return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado' }); - } - res.json(rows[0]); - } catch (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 }); - } - // finally { - // if (connection && typeof connection.release === 'function') connection.release(); - // } + WHERE cm.id_tipo_membresia = ?`, [id], (err, rows) => { + if (err) { + console.error('Error al obtener tipo de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener tipo de membresía', error: err.message }); + } + if (rows.length === 0) { + return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado' }); + } + res.json(rows[0]); + }); + }); }, /** @@ -101,22 +101,23 @@ const controladorMembresias = { * @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. */ - crearTipoMembresia: async (req, res) => { + crearTipoMembresia: (req, res) => { const { nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros, valor, descripcion, duracion_dias, visitas_maximas_diarias, areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido } = req.body; - // Validaciones básicas de campos obligatorios 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).' }); } - // let connection; - try { - // CAMBIO CLAVE AQUÍ: Usar req.pool directamente para la query - const [result] = await req.pool.query( + req.getConnection((err, connection) => { + if (err) { + console.error('Error al obtener conexión para crear tipo de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message }); + } + connection.query( `INSERT INTO clientes_membresias ( nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros, valor, descripcion, duracion_dias, visitas_maximas_diarias, @@ -127,19 +128,19 @@ const controladorMembresias = { nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros, valor, descripcion, duracion_dias, visitas_maximas_diarias, areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido - ] + ], + (err, result) => { + if (err) { + console.error('Error al crear tipo de membresía:', err); + if (err.code === 'ER_DUP_ENTRY') { + return res.status(409).json({ mensaje: 'Ya existe un tipo de membresía con ese nombre.', error: err.message }); + } + return res.status(500).json({ mensaje: 'Error interno del servidor al crear tipo de membresía', error: err.message }); + } + 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) { - console.error('Error al crear tipo de membresía:', error); - 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 }); - } - res.status(500).json({ mensaje: 'Error interno del servidor al crear tipo de membresía', error: error.message }); - } - // finally { - // if (connection && typeof connection.release === 'function') connection.release(); - // } + }); }, /** @@ -148,7 +149,7 @@ const controladorMembresias = { * @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. */ - actualizarTipoMembresia: async (req, res) => { + actualizarTipoMembresia: (req, res) => { const { id } = req.params; // ID del tipo de membresía a actualizar const { nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros, @@ -160,10 +161,12 @@ const controladorMembresias = { 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; - try { - // CAMBIO CLAVE AQUÍ: Usar req.pool directamente para la query - const [result] = await req.pool.query( + req.getConnection((err, connection) => { + if (err) { + console.error('Error al obtener conexión para actualizar tipo de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message }); + } + connection.query( `UPDATE clientes_membresias SET nombre_tipo = ?, categoria_membresia = ?, es_grupal = ?, capacidad_maxima_miembros = ?, valor = ?, descripcion = ?, @@ -175,23 +178,23 @@ const controladorMembresias = { nombre_tipo, categoria_membresia, es_grupal, capacidad_maxima_miembros, valor, descripcion, duracion_dias, visitas_maximas_diarias, areas_de_acceso, id_combo_ensamblado_incluido, cantidad_combo_incluido, estado_tipo, id - ] - ); + ], + (err, result) => { + if (err) { + console.error('Error al actualizar tipo de membresía:', err); + if (err.code === 'ER_DUP_ENTRY') { + return res.status(409).json({ mensaje: 'Ya existe otro tipo de membresía con ese nombre.', error: err.message }); + } + return res.status(500).json({ mensaje: 'Error interno del servidor al actualizar tipo de membresía', error: err.message }); + } - if (result.affectedRows === 0) { - return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para actualizar' }); - } - res.json({ mensaje: 'Tipo de membresía actualizado exitosamente' }); - } catch (error) { - console.error('Error al actualizar tipo de membresía:', error); - 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 }); - } - res.status(500).json({ mensaje: 'Error interno del servidor al actualizar tipo de membresía', error: error.message }); - } - // finally { - // if (connection && typeof connection.release === 'function') connection.release(); - // } + if (result.affectedRows === 0) { + return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para actualizar' }); + } + res.json({ mensaje: 'Tipo de membresía actualizado exitosamente' }); + } + ); + }); }, /** @@ -200,24 +203,25 @@ const controladorMembresias = { * @param {Object} req - Objeto de solicitud de Express (req.params.id para el ID). * @param {Object} res - Objeto de respuesta de Express. */ - eliminarTipoMembresia: async (req, res) => { + eliminarTipoMembresia: (req, res) => { const { id } = req.params; - // let connection; - try { - // CAMBIO CLAVE AQUÍ: Usar req.pool directamente para la query - const [result] = await req.pool.query('UPDATE clientes_membresias SET estado_tipo = "ELIMINADO" WHERE id_tipo_membresia = ?', [id]); - - if (result.affectedRows === 0) { - return res.status(404).json({ mensaje: 'Tipo de membresía no encontrado para eliminar' }); + req.getConnection((err, connection) => { + if (err) { + console.error('Error al obtener conexión para eliminar tipo de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al obtener conexión', error: err.message }); } - res.json({ mensaje: 'Tipo de membresía eliminado (lógicamente) exitosamente' }); - } catch (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 }); - } - // finally { - // if (connection && typeof connection.release === 'function') connection.release(); - // } + connection.query('UPDATE clientes_membresias SET estado_tipo = "ELIMINADO" WHERE id_tipo_membresia = ?', [id], (err, result) => { + if (err) { + console.error('Error al eliminar tipo de membresía:', err); + return res.status(500).json({ mensaje: 'Error interno del servidor al eliminar tipo de membresía', error: err.message }); + } + + if (result.affectedRows === 0) { + 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' }); + }); + }); } };