From 02edcd33e813b841731a5e1b416bde443eb5722c Mon Sep 17 00:00:00 2001 From: ArturoSanRod Date: Fri, 6 Jun 2025 07:33:14 -0600 Subject: [PATCH 1/4] =?UTF-8?q?Implementaci=C3=B3n=20semi=20funcional=20de?= =?UTF-8?q?=20actualizar=20set=20de=20cuotas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actualizarSetCuotas.controller.js | 19 +++++++ .../actualizarSetCuotasRepositorio.js | 49 +++++++++++++++++++ .../actualizarSetCuotas.routes.js | 19 +++++++ Cuotas/Rutas/indexCuotas.routes.js | 4 ++ Utilidades/Constantes/consultasCuotas.js | 39 ++++++++++----- Utilidades/Constantes/mensajesCuotas.js | 11 +++++ Utilidades/Constantes/rutas.js | 1 + 7 files changed, 131 insertions(+), 11 deletions(-) create mode 100644 Cuotas/Controladores/actualizarSetCuotas.controller.js create mode 100644 Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js create mode 100644 Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js diff --git a/Cuotas/Controladores/actualizarSetCuotas.controller.js b/Cuotas/Controladores/actualizarSetCuotas.controller.js new file mode 100644 index 00000000..72422ec6 --- /dev/null +++ b/Cuotas/Controladores/actualizarSetCuotas.controller.js @@ -0,0 +1,19 @@ +const MENSAJES_CUOTAS = require('@altertex/util/const/mensajesCuotas'); +const repositorio = require('@altertex/cuota/repos/actualizarSetCuotasRepositorio'); + +exports.actualizarSetCuotas = async (req, res) => { + try { + const { idCuotaSet, cambios } = req.body; + + if (!idCuotaSet || !cambios) { + return res.status(400).json({ mensaje: MENSAJES_CUOTAS.PARAMETROS_INVALIDOS.mensaje }); + } + + await repositorio.actualizarSetCuotas(idCuotaSet, cambios); + + return res.status(200).json({ mensaje: MENSAJES_CUOTAS.ACTUALIZACION_EXITOSA.mensaje }); + } catch (error) { + console.error('[ERROR] actualizarSetCuotas:', error); + return res.status(500).json({ mensaje: error.message || MENSAJES_CUOTAS.ERROR_ACTUALIZACION.mensaje }); + } +}; \ No newline at end of file diff --git a/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js b/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js new file mode 100644 index 00000000..90692923 --- /dev/null +++ b/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js @@ -0,0 +1,49 @@ +const db = require('@altertex/util/bd/db'); +const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas'); +const correrQuery = require('@altertex/util/ser/correrQuery'); +const MENSAJES = require('@altertex/util/const/mensajesCuotas'); + + +exports.actualizarSetCuotas = async (idCuotaSet, cambios) => { + const { + nombre, + descripcion, + periodoRenovacion, + renovacionHabilitada, + productos = [] + } = cambios; + + console.log('[DEBUG] Iniciando actualización del set de cuotas', { idCuotaSet, cambios }); + + // Actualizar cuota_set + const resultado = await correrQuery(CONSULTAS_CUOTAS.ACTUALIZAR_CUOTA_SET, [ + nombre, + descripcion, + periodoRenovacion, + renovacionHabilitada, + new Date(), // ultimaActualizacion + idCuotaSet + ]); + + console.log('[DEBUG] Resultado UPDATE cuota_set:', resultado); + + if (!resultado || resultado.affectedRows === 0) { + throw new Error(MENSAJES.ERROR_ACTUALIZACION.mensaje); + } + + // Eliminar productos anteriores + await correrQuery(CONSULTAS_CUOTAS.ELIMINAR_PRODUCTOS_CUOTA_SET, [idCuotaSet]); + + // Insertar nuevos productos + for (const producto of productos) { + const { idProducto, limite, limiteActual } = producto; + await correrQuery(CONSULTAS_CUOTAS.INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR, [ + idCuotaSet, + idProducto, + limite, + limiteActual + ]); + } + + console.log('[DEBUG] Set de cuotas actualizado exitosamente.'); +}; diff --git a/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js b/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js new file mode 100644 index 00000000..ead29c49 --- /dev/null +++ b/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js @@ -0,0 +1,19 @@ +const express = require('express'); +const controlador = require('@altertex/cuota/ctrl/actualizarSetCuotas.controller'); +const autorizarToken = require('@altertex/util/inter/autorizarToken'); +const revisarApiKey = require('@altertex/util/inter/revisarApiKey'); +const verificarPermisos = require('@altertex/util/inter/verificarPermisos'); +const RUTAS = require('@altertex/util/const/rutas'); +const PERMISOS = require('@altertex/util/const/permisos'); + +const ruteador = express.Router(); + +ruteador.put( + RUTAS.CUOTAS.ACTUALIZAR_SET_CUOTAS, + revisarApiKey(), + autorizarToken, + verificarPermisos(PERMISOS.ACTUALIZAR_SET_CUOTAS), + controlador.actualizarSetCuotas +); + +module.exports = ruteador; diff --git a/Cuotas/Rutas/indexCuotas.routes.js b/Cuotas/Rutas/indexCuotas.routes.js index ea69bba4..0c4056a8 100644 --- a/Cuotas/Rutas/indexCuotas.routes.js +++ b/Cuotas/Rutas/indexCuotas.routes.js @@ -5,6 +5,8 @@ const rutaObtenerOpcionesCuota = require('@altertex/cuota/rutasInd/obtenerOpcion const rutasConsultarListaCuotas = require('@altertex/cuota/rutasInd/consultarCuotas.routes'); const rutaEliminarSetCuotas = require('@altertex/cuota/rutasInd/eliminarSetCuotas.routes'); const rutaLeerCuota = require('@altertex/cuota/rutasInd/leerSetCuotas.routes'); +const rutaActualizarSetCuotas = require('@altertex/cuota/rutasInd/actualizarSetCuotas.routes'); + const RUTAS = require('@altertex/util/const/rutas'); @@ -13,5 +15,7 @@ ruteador.use(RUTAS.CUOTAS.BASE, rutaObtenerOpcionesCuota); ruteador.use(RUTAS.CUOTAS.BASE, rutasConsultarListaCuotas); ruteador.use(RUTAS.CUOTAS.BASE, rutaEliminarSetCuotas); ruteador.use(RUTAS.CUOTAS.BASE, rutaLeerCuota); +ruteador.use(RUTAS.CUOTAS.BASE, rutaActualizarSetCuotas); + module.exports = ruteador; diff --git a/Utilidades/Constantes/consultasCuotas.js b/Utilidades/Constantes/consultasCuotas.js index cc1d4465..3308c3d1 100644 --- a/Utilidades/Constantes/consultasCuotas.js +++ b/Utilidades/Constantes/consultasCuotas.js @@ -52,15 +52,32 @@ module.exports = { WHERE cs.idCuotaSet = ?; `, - LEER_CUOTA_SET_PRODUCTOS: ` - SELECT - p.nombreComun, - csp.limite AS cuota_valor - FROM cuota_set cs - JOIN cuota_set_producto csp - ON cs.idCuotaSet = csp.idCuotaSet - JOIN producto p - ON p.idProducto = csp.idProducto - WHERE cs.idCuotaSet = ?; - `, + LEER_CUOTA_SET_PRODUCTOS: + `SELECT + p.idProducto, + p.nombreComun, + csp.limite AS cuota_valor, + csp.limite_actual + FROM cuota_set cs + JOIN cuota_set_producto csp + ON cs.idCuotaSet = csp.idCuotaSet + JOIN producto p + ON p.idProducto = csp.idProducto + WHERE cs.idCuotaSet = ?`, + + ACTUALIZAR_CUOTA_SET: ` + UPDATE cuota_set + SET nombre = ?, descripcion = ?, periodoRenovacion = ?, renovacionHabilitada = ?, ultimaActualizacion = ? + WHERE idCuotaSet = ?; + `, + + INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR: ` + INSERT INTO cuota_set_producto (idCuotaSet, idProducto, limite, limite_actual) + VALUES (?, ?, ?, ?) + `, + + ELIMINAR_PRODUCTOS_CUOTA_SET: ` + DELETE FROM cuota_set_producto WHERE idCuotaSet = ?; + `, + }; diff --git a/Utilidades/Constantes/mensajesCuotas.js b/Utilidades/Constantes/mensajesCuotas.js index a730325f..9ac28661 100644 --- a/Utilidades/Constantes/mensajesCuotas.js +++ b/Utilidades/Constantes/mensajesCuotas.js @@ -58,4 +58,15 @@ module.exports = { codigo: 500, mensaje: 'Error interno al obtener el set de cuotas.', }, + + ACTUALIZACION_EXITOSA: { + codigo: 200, + mensaje: 'Set de cuotas actualizado correctamente.' + }, + + ERROR_ACTUALIZACION: { + codigo: 500, + mensaje: 'No se pudo actualizar el set de cuotas.' + }, + }; diff --git a/Utilidades/Constantes/rutas.js b/Utilidades/Constantes/rutas.js index fa697b2b..c8a6ce34 100644 --- a/Utilidades/Constantes/rutas.js +++ b/Utilidades/Constantes/rutas.js @@ -83,6 +83,7 @@ module.exports = { CONSULTAR_LISTA: '/consultar-lista', ELIMINAR_SET_CUOTAS: '/eliminar-set-cuotas', LEER_SET_CUOTAS: '/leer-set-cuotas', + ACTUALIZAR_SET_CUOTAS: '/actualizar-set-cuotas', }, ROLES: { BASE: '/roles', From 4604ef59184a92daa30f9508a3f7a8887eac1c15 Mon Sep 17 00:00:00 2001 From: ArturoSanRod Date: Fri, 6 Jun 2025 16:04:20 -0600 Subject: [PATCH 2/4] Implementacion de actualizar set de cuotas --- .../actualizarSetCuotas.controller.js | 8 +-- .../actualizarSetCuotasRepositorio.js | 49 ++++++------------- .../Repositorios/leerSetCuotasRepositorio.js | 33 ++++++++++++- 3 files changed, 52 insertions(+), 38 deletions(-) diff --git a/Cuotas/Controladores/actualizarSetCuotas.controller.js b/Cuotas/Controladores/actualizarSetCuotas.controller.js index 72422ec6..248499bc 100644 --- a/Cuotas/Controladores/actualizarSetCuotas.controller.js +++ b/Cuotas/Controladores/actualizarSetCuotas.controller.js @@ -1,4 +1,4 @@ -const MENSAJES_CUOTAS = require('@altertex/util/const/mensajesCuotas'); +// actualizarSetCuotas.controller.js const repositorio = require('@altertex/cuota/repos/actualizarSetCuotasRepositorio'); exports.actualizarSetCuotas = async (req, res) => { @@ -6,14 +6,14 @@ exports.actualizarSetCuotas = async (req, res) => { const { idCuotaSet, cambios } = req.body; if (!idCuotaSet || !cambios) { - return res.status(400).json({ mensaje: MENSAJES_CUOTAS.PARAMETROS_INVALIDOS.mensaje }); + return res.status(400).json({ mensaje: 'Datos incompletos' }); } await repositorio.actualizarSetCuotas(idCuotaSet, cambios); + return res.status(200).json({ mensaje: 'Set de cuotas actualizado correctamente' }); - return res.status(200).json({ mensaje: MENSAJES_CUOTAS.ACTUALIZACION_EXITOSA.mensaje }); } catch (error) { console.error('[ERROR] actualizarSetCuotas:', error); - return res.status(500).json({ mensaje: error.message || MENSAJES_CUOTAS.ERROR_ACTUALIZACION.mensaje }); + return res.status(500).json({ mensaje: error.message }); } }; \ No newline at end of file diff --git a/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js b/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js index 90692923..f87dcb58 100644 --- a/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js +++ b/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js @@ -1,49 +1,32 @@ -const db = require('@altertex/util/bd/db'); +// actualizarSetCuotasRepositorio.js const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas'); const correrQuery = require('@altertex/util/ser/correrQuery'); -const MENSAJES = require('@altertex/util/const/mensajesCuotas'); - exports.actualizarSetCuotas = async (idCuotaSet, cambios) => { - const { - nombre, - descripcion, - periodoRenovacion, - renovacionHabilitada, - productos = [] - } = cambios; + const { nombre, descripcion, periodoRenovacion, renovacionHabilitada, productos = [] } = cambios; - console.log('[DEBUG] Iniciando actualización del set de cuotas', { idCuotaSet, cambios }); - - // Actualizar cuota_set - const resultado = await correrQuery(CONSULTAS_CUOTAS.ACTUALIZAR_CUOTA_SET, [ + // 1. Actualizar datos básicos de la cuota + await correrQuery(CONSULTAS_CUOTAS.ACTUALIZAR_CUOTA_SET, [ nombre, descripcion, periodoRenovacion, renovacionHabilitada, - new Date(), // ultimaActualizacion + new Date(), idCuotaSet ]); - console.log('[DEBUG] Resultado UPDATE cuota_set:', resultado); - - if (!resultado || resultado.affectedRows === 0) { - throw new Error(MENSAJES.ERROR_ACTUALIZACION.mensaje); - } - - // Eliminar productos anteriores + // 2. Eliminar productos anteriores await correrQuery(CONSULTAS_CUOTAS.ELIMINAR_PRODUCTOS_CUOTA_SET, [idCuotaSet]); - // Insertar nuevos productos + // 3. Insertar nuevos productos (solo los que tienen ID válido) for (const producto of productos) { - const { idProducto, limite, limiteActual } = producto; - await correrQuery(CONSULTAS_CUOTAS.INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR, [ - idCuotaSet, - idProducto, - limite, - limiteActual - ]); + if (producto.idProducto && producto.idProducto > 0) { + await correrQuery(CONSULTAS_CUOTAS.INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR, [ + idCuotaSet, + producto.idProducto, + producto.limite || 0, + producto.limiteActual || 0 + ]); + } } - - console.log('[DEBUG] Set de cuotas actualizado exitosamente.'); -}; +}; \ No newline at end of file diff --git a/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js b/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js index e5831468..a7a57dc3 100644 --- a/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js +++ b/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js @@ -11,27 +11,58 @@ const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas'); * @throws {Error} Si ocurre un error al ejecutar la consulta. */ exports.obtenerSetCuotaPorId = async (idSetCuota) => { + console.log('[DEBUG] Consultando set de cuotas con ID:', idSetCuota); + const query = CONSULTAS_CUOTAS.LEER_CUOTA_SET; const queryCuotas = CONSULTAS_CUOTAS.LEER_CUOTA_SET_PRODUCTOS; const resultado = await correrQuery(query, [idSetCuota]); + console.log('[DEBUG] Resultado cuota_set:', resultado); + if (resultado.length === 0) return null; const productosCuota = await correrQuery(queryCuotas, [idSetCuota]); + console.log('[DEBUG] Resultado productos cuota:', productosCuota); + + // 🔥 CORREGIDO: Devolver los productos con toda su información const productos = productosCuota.map((producto) => ({ + idProducto: producto.idProducto, // ✅ Incluir el ID del producto nombre: producto.nombreComun, + nombreComun: producto.nombreComun, + cuota_valor: producto.cuota_valor, + limite_actual: producto.limite_actual, + // Campos alternativos para compatibilidad + valor: producto.cuota_valor, + limite: producto.cuota_valor, + limiteActual: producto.limite_actual })); + + // 🔥 MANTENER ESTO PARA RETROCOMPATIBILIDAD const cuotas = productosCuota.map((producto) => ({ valor: producto.cuota_valor, })); + // ✅ CORREGIDO: Incluir TODOS los campos de la cuota const setCuota = { + // IDs en ambos formatos para compatibilidad idSetCuota: resultado[0].idCuotaSet, + idCuotaSet: resultado[0].idCuotaSet, + + // Información básica nombre: resultado[0].nombre, descripcion: resultado[0].descripcion, + + // 🔥 CAMPOS QUE FALTABAN: + periodoRenovacion: resultado[0].periodoRenovacion, + renovacionHabilitada: resultado[0].renovacionHabilitada, + ultimaActualizacion: resultado[0].ultimaActualizacion, + + // Productos y cuotas productos, cuotas, }; + console.log('[DEBUG] Set de cuotas completo a devolver:', JSON.stringify(setCuota, null, 2)); + return setCuota; -}; +}; \ No newline at end of file From 9c24ca49ff87c3441207d65b1a610a739dd0037c Mon Sep 17 00:00:00 2001 From: ArturoSanRod Date: Fri, 6 Jun 2025 16:16:43 -0600 Subject: [PATCH 3/4] Fix de implementacion de console logs --- .../actualizarSetCuotas.controller.js | 1 - .../Repositorios/leerSetCuotasRepositorio.js | 15 +-------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/Cuotas/Controladores/actualizarSetCuotas.controller.js b/Cuotas/Controladores/actualizarSetCuotas.controller.js index 248499bc..30e1600c 100644 --- a/Cuotas/Controladores/actualizarSetCuotas.controller.js +++ b/Cuotas/Controladores/actualizarSetCuotas.controller.js @@ -13,7 +13,6 @@ exports.actualizarSetCuotas = async (req, res) => { return res.status(200).json({ mensaje: 'Set de cuotas actualizado correctamente' }); } catch (error) { - console.error('[ERROR] actualizarSetCuotas:', error); return res.status(500).json({ mensaje: error.message }); } }; \ No newline at end of file diff --git a/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js b/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js index a7a57dc3..b939a7b6 100644 --- a/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js +++ b/Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js @@ -11,58 +11,45 @@ const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas'); * @throws {Error} Si ocurre un error al ejecutar la consulta. */ exports.obtenerSetCuotaPorId = async (idSetCuota) => { - console.log('[DEBUG] Consultando set de cuotas con ID:', idSetCuota); const query = CONSULTAS_CUOTAS.LEER_CUOTA_SET; const queryCuotas = CONSULTAS_CUOTAS.LEER_CUOTA_SET_PRODUCTOS; const resultado = await correrQuery(query, [idSetCuota]); - console.log('[DEBUG] Resultado cuota_set:', resultado); if (resultado.length === 0) return null; const productosCuota = await correrQuery(queryCuotas, [idSetCuota]); - console.log('[DEBUG] Resultado productos cuota:', productosCuota); - // 🔥 CORREGIDO: Devolver los productos con toda su información const productos = productosCuota.map((producto) => ({ - idProducto: producto.idProducto, // ✅ Incluir el ID del producto + idProducto: producto.idProducto, nombre: producto.nombreComun, nombreComun: producto.nombreComun, cuota_valor: producto.cuota_valor, limite_actual: producto.limite_actual, - // Campos alternativos para compatibilidad valor: producto.cuota_valor, limite: producto.cuota_valor, limiteActual: producto.limite_actual })); - // 🔥 MANTENER ESTO PARA RETROCOMPATIBILIDAD const cuotas = productosCuota.map((producto) => ({ valor: producto.cuota_valor, })); - // ✅ CORREGIDO: Incluir TODOS los campos de la cuota const setCuota = { - // IDs en ambos formatos para compatibilidad idSetCuota: resultado[0].idCuotaSet, idCuotaSet: resultado[0].idCuotaSet, - // Información básica nombre: resultado[0].nombre, descripcion: resultado[0].descripcion, - // 🔥 CAMPOS QUE FALTABAN: periodoRenovacion: resultado[0].periodoRenovacion, renovacionHabilitada: resultado[0].renovacionHabilitada, ultimaActualizacion: resultado[0].ultimaActualizacion, - - // Productos y cuotas productos, cuotas, }; - console.log('[DEBUG] Set de cuotas completo a devolver:', JSON.stringify(setCuota, null, 2)); return setCuota; }; \ No newline at end of file From 4a0aae0c626abf83372a3c4415674c170aedfeb0 Mon Sep 17 00:00:00 2001 From: ArturoSanRod Date: Fri, 6 Jun 2025 19:34:32 -0600 Subject: [PATCH 4/4] Implementacion de JSDocs --- .../actualizarSetCuotas.controller.js | 10 +++++++-- .../actualizarSetCuotasRepositorio.js | 22 ++++++++++++++----- .../actualizarSetCuotas.routes.js | 18 +++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/Cuotas/Controladores/actualizarSetCuotas.controller.js b/Cuotas/Controladores/actualizarSetCuotas.controller.js index 30e1600c..7c5ae1da 100644 --- a/Cuotas/Controladores/actualizarSetCuotas.controller.js +++ b/Cuotas/Controladores/actualizarSetCuotas.controller.js @@ -1,6 +1,12 @@ -// actualizarSetCuotas.controller.js const repositorio = require('@altertex/cuota/repos/actualizarSetCuotasRepositorio'); +/** + * Controlador que gestiona la actualización de un set de cuotas. + * + * @param {object} req - Objeto de solicitud HTTP de Express. + * @param {object} res - Objeto de respuesta HTTP de Express. + * @returns {object} Respuesta JSON con el resultado de la operación. + */ exports.actualizarSetCuotas = async (req, res) => { try { const { idCuotaSet, cambios } = req.body; @@ -15,4 +21,4 @@ exports.actualizarSetCuotas = async (req, res) => { } catch (error) { return res.status(500).json({ mensaje: error.message }); } -}; \ No newline at end of file +}; diff --git a/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js b/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js index f87dcb58..158b6a66 100644 --- a/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js +++ b/Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js @@ -1,11 +1,25 @@ -// actualizarSetCuotasRepositorio.js const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas'); const correrQuery = require('@altertex/util/ser/correrQuery'); +/** + * Actualiza un set de cuotas en la base de datos. + * + * @async + * @param {number} idCuotaSet - ID del set de cuotas a actualizar. + * @param {object} cambios - Objeto con los cambios a aplicar. + * @param {string} cambios.nombre - Nombre actualizado del set de cuotas. + * @param {string} cambios.descripcion - Descripción del set de cuotas. + * @param {number} cambios.periodoRenovacion - Periodo de renovación en meses. + * @param {boolean} cambios.renovacionHabilitada - Si la renovación está habilitada. + * @param {Array} [cambios.productos=[]] - Lista de productos con límites. + * @param {number} cambios.productos[].idProducto - ID del producto asociado. + * @param {number} cambios.productos[].limite - Límite asignado al producto. + * @param {number} cambios.productos[].limiteActual - Límite actual del producto. + * @throws {Error} Si ocurre un error en la consulta a la base de datos. + */ exports.actualizarSetCuotas = async (idCuotaSet, cambios) => { const { nombre, descripcion, periodoRenovacion, renovacionHabilitada, productos = [] } = cambios; - // 1. Actualizar datos básicos de la cuota await correrQuery(CONSULTAS_CUOTAS.ACTUALIZAR_CUOTA_SET, [ nombre, descripcion, @@ -15,10 +29,8 @@ exports.actualizarSetCuotas = async (idCuotaSet, cambios) => { idCuotaSet ]); - // 2. Eliminar productos anteriores await correrQuery(CONSULTAS_CUOTAS.ELIMINAR_PRODUCTOS_CUOTA_SET, [idCuotaSet]); - // 3. Insertar nuevos productos (solo los que tienen ID válido) for (const producto of productos) { if (producto.idProducto && producto.idProducto > 0) { await correrQuery(CONSULTAS_CUOTAS.INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR, [ @@ -29,4 +41,4 @@ exports.actualizarSetCuotas = async (idCuotaSet, cambios) => { ]); } } -}; \ No newline at end of file +}; diff --git a/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js b/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js index ead29c49..65860635 100644 --- a/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js +++ b/Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js @@ -1,3 +1,21 @@ +/** + * Ruta para actualizar un set de cuotas. + * + * Método: PUT + * Ruta: /api/cuotas/actualizar-set-cuotas (o la que defina `RUTAS.CUOTAS.ACTUALIZAR_SET_CUOTAS`) + * + * Middleware aplicados: + * - revisión de API Key + * - autorización por token JWT + * - verificación de permisos de usuario + * + * Permiso requerido: PERMISOS.ACTUALIZAR_SET_CUOTAS + * + * @module actualizarSetCuotas.routes + */ + + + const express = require('express'); const controlador = require('@altertex/cuota/ctrl/actualizarSetCuotas.controller'); const autorizarToken = require('@altertex/util/inter/autorizarToken');