From 2a60635454daef4dccf65ccd8221aa8139a05f8b Mon Sep 17 00:00:00 2001 From: ArturoSanRod Date: Fri, 6 Jun 2025 07:49:46 -0600 Subject: [PATCH 1/4] Funcionalidad de actualizar pedido --- .../actualizarPedido.controller.js | 38 +++++++++++++++++++ .../repositorioActualizarPedido.js | 29 ++++++++++++++ .../actualizarPedidos.routes.js | 22 +++++++++++ Pedidos/Rutas/indexPedidos.routes.js | 3 ++ Utilidades/Constantes/consultasPedidos.js | 10 +++++ Utilidades/Constantes/mensajesPedidos.js | 9 +++++ Utilidades/Constantes/rutas.js | 1 + 7 files changed, 112 insertions(+) create mode 100644 Pedidos/Controladores/actualizarPedido.controller.js create mode 100644 Pedidos/Datos/Repositorios/repositorioActualizarPedido.js create mode 100644 Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js diff --git a/Pedidos/Controladores/actualizarPedido.controller.js b/Pedidos/Controladores/actualizarPedido.controller.js new file mode 100644 index 00000000..85c9908c --- /dev/null +++ b/Pedidos/Controladores/actualizarPedido.controller.js @@ -0,0 +1,38 @@ +const MENSAJES = require('@altertex/util/const/mensajesPedidos'); +const repositorio = require('@altertex/pedidos/repos/repositorioActualizarPedido'); + +/** + * RF[62] - Actualizar Pedido + * Controlador para actualizar la información de uno o varios pedidos. + */ +exports.actualizarPedido = async (req, res) => { + let datos; + + if (req.body.idPedido) { + datos = [req.body]; + } else if (req.body.cambios) { + datos = Array.isArray(req.body.cambios) ? req.body.cambios : [req.body.cambios]; + } else { + return res.status(MENSAJES.ERROR_ACTUALIZAR_PEDIDO.codigo).json({ + mensaje: MENSAJES.ERROR_ACTUALIZAR_PEDIDO.mensaje, + }); + } + + if (!datos || datos.length === 0) { + return res.status(MENSAJES.ERROR_ACTUALIZAR_PEDIDO.codigo).json({ + mensaje: MENSAJES.ERROR_ACTUALIZAR_PEDIDO.mensaje, + }); + } + + try { + await repositorio.actualizarPedido(datos); + return res.status(MENSAJES.PEDIDO_ACTUALIZADO.codigo).json({ + mensaje: MENSAJES.PEDIDO_ACTUALIZADO.mensaje, + datos, + }); + } catch { + return res.status(MENSAJES.ERROR_ACTUALIZAR_PEDIDO.codigo).json({ + mensaje: MENSAJES.ERROR_ACTUALIZAR_PEDIDO.mensaje, + }); + } +}; diff --git a/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js b/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js new file mode 100644 index 00000000..e12b9445 --- /dev/null +++ b/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js @@ -0,0 +1,29 @@ +const correrQuery = require('@altertex/util/ser/correrQuery'); +const MENSAJES = require('@altertex/util/const/mensajesPedidos'); +const CONSULTAS = require('@altertex/util/const/consultasPedidos'); + +/** + * RF[62] - Actualizar Pedido + * Repositorio para actualizar los datos de uno o varios pedidos. + */ +exports.actualizarPedido = async (datos) => { + if (!Array.isArray(datos) || datos.length === 0) { + throw new Error('Sin datos para actualizar.'); + } + + try { + await Promise.all( + datos.map(({ idPedido, estado, precioTotal, idEnvio, idPago }) => { + return correrQuery(CONSULTAS.ACTUALIZAR_PEDIDO, [ + estado, + precioTotal, + idEnvio, + idPago, + idPedido, + ]); + }) + ); + } catch { + throw new Error(MENSAJES.ERROR_ACTUALIZAR_PEDIDO.mensaje); + } +}; diff --git a/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js b/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js new file mode 100644 index 00000000..8d2d2eb5 --- /dev/null +++ b/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js @@ -0,0 +1,22 @@ +const express = require('express'); +const ruteador = express.Router(); + +const controlador = require('@altertex/pedidos/ctrl/actualizarPedido.controller'); +const revisarApiKey = require('@altertex/util/inter/revisarApiKey'); +const autorizarToken = require('@altertex/util/inter/autorizarToken'); +const verificarPermisos = require('@altertex/util/inter/verificarPermisos'); +const limitePeticiones = require('@altertex/util/inter/limitePeticiones'); +const RUTAS = require('@altertex/util/const/rutas'); +const PERMISOS = require('@altertex/util/const/permisos'); + +// RF[62] - Actualizar Pedido +ruteador.put( + RUTAS.PEDIDOS.ACTUALIZAR_PEDIDO, + revisarApiKey(), + autorizarToken, + limitePeticiones, + verificarPermisos(PERMISOS.ACTUALIZAR_PEDIDO), + controlador.actualizarPedido +); + +module.exports = ruteador; diff --git a/Pedidos/Rutas/indexPedidos.routes.js b/Pedidos/Rutas/indexPedidos.routes.js index 83334c54..30f5a42e 100644 --- a/Pedidos/Rutas/indexPedidos.routes.js +++ b/Pedidos/Rutas/indexPedidos.routes.js @@ -2,9 +2,12 @@ const express = require('express'); const ruteador = express.Router(); const rutasObtenerPedidos = require('@altertex/pedidos/rutasInd/obtenerPedidos.routes'); const rutasEliminarPedido = require('@altertex/pedidos/rutasInd/eliminarPedidos.routes'); +const rutasActualizarPedidos = require('@altertex/pedidos/rutasInd/actualizarPedidos.routes'); const RUTAS = require('@altertex/util/const/rutas'); ruteador.use(RUTAS.PEDIDOS.BASE, rutasObtenerPedidos); ruteador.use(RUTAS.PEDIDOS.BASE, rutasEliminarPedido); +ruteador.use(RUTAS.PEDIDOS.BASE, rutasActualizarPedidos); + module.exports = ruteador; diff --git a/Utilidades/Constantes/consultasPedidos.js b/Utilidades/Constantes/consultasPedidos.js index a92f3cfc..1a86c0b1 100644 --- a/Utilidades/Constantes/consultasPedidos.js +++ b/Utilidades/Constantes/consultasPedidos.js @@ -34,4 +34,14 @@ module.exports = { ELIMINAR_PEDIDO: ` DELETE FROM pedido WHERE idPedido = ?;`, + + ACTUALIZAR_PEDIDO: ` + UPDATE pedido SET + estado = ?, + precioTotal = ?, + idEnvio = ?, + idPago = ? + WHERE idPedido = ?; + `, + }; diff --git a/Utilidades/Constantes/mensajesPedidos.js b/Utilidades/Constantes/mensajesPedidos.js index 8e21d51d..978727e6 100644 --- a/Utilidades/Constantes/mensajesPedidos.js +++ b/Utilidades/Constantes/mensajesPedidos.js @@ -32,4 +32,13 @@ module.exports = { codigo: 500, mensaje: 'Ocurrió un error al eliminar el pedido.', }, + PEDIDO_ACTUALIZADO: { + codigo: 200, + mensaje: 'Pedido actualizado correctamente.', + }, + ERROR_ACTUALIZAR_PEDIDO: { + codigo: 400, + mensaje: 'Error al actualizar el pedido.', + }, + }; diff --git a/Utilidades/Constantes/rutas.js b/Utilidades/Constantes/rutas.js index 9a8bcf93..e89f407a 100644 --- a/Utilidades/Constantes/rutas.js +++ b/Utilidades/Constantes/rutas.js @@ -100,6 +100,7 @@ module.exports = { BASE: '/pedidos', CONSULTAR_LISTA: '/consultar-lista', ELIMINAR_PEDIDO: '/eliminar', + ACTUALIZAR_PEDIDO: '/actualizar-pedido', }, PAGOS: { BASE: '/pagos', From adc1f7d6b11282b778c2cf01b6abbe641b6b38c1 Mon Sep 17 00:00:00 2001 From: ArturoSanRod Date: Fri, 6 Jun 2025 11:27:43 -0600 Subject: [PATCH 2/4] No se manda el ID al hook --- Pedidos/Rutas/indexPedidos.routes.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Pedidos/Rutas/indexPedidos.routes.js b/Pedidos/Rutas/indexPedidos.routes.js index 30f5a42e..16647e25 100644 --- a/Pedidos/Rutas/indexPedidos.routes.js +++ b/Pedidos/Rutas/indexPedidos.routes.js @@ -9,5 +9,4 @@ ruteador.use(RUTAS.PEDIDOS.BASE, rutasObtenerPedidos); ruteador.use(RUTAS.PEDIDOS.BASE, rutasEliminarPedido); ruteador.use(RUTAS.PEDIDOS.BASE, rutasActualizarPedidos); - module.exports = ruteador; From d7fb0ffe7ab0d200f1289ec0de0bf1b623969992 Mon Sep 17 00:00:00 2001 From: angieriosc Date: Fri, 6 Jun 2025 13:57:59 -0600 Subject: [PATCH 3/4] =?UTF-8?q?Fix:=20consulta,=20revisar=20entradas=20mal?= =?UTF-8?q?iciosas,=20l=C3=B3gica=20controller=20y=20repositorio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controladores/actualizarPedido.controller.js | 2 +- .../Repositorios/repositorioActualizarPedido.js | 2 +- .../actualizarPedidos.routes.js | 2 ++ Utilidades/Constantes/consultasPedidos.js | 16 +++++++++------- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Pedidos/Controladores/actualizarPedido.controller.js b/Pedidos/Controladores/actualizarPedido.controller.js index 85c9908c..072dbf73 100644 --- a/Pedidos/Controladores/actualizarPedido.controller.js +++ b/Pedidos/Controladores/actualizarPedido.controller.js @@ -7,7 +7,7 @@ const repositorio = require('@altertex/pedidos/repos/repositorioActualizarPedido */ exports.actualizarPedido = async (req, res) => { let datos; - + console.log('body', req.body); if (req.body.idPedido) { datos = [req.body]; } else if (req.body.cambios) { diff --git a/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js b/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js index e12b9445..b08156ef 100644 --- a/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js +++ b/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js @@ -17,8 +17,8 @@ exports.actualizarPedido = async (datos) => { return correrQuery(CONSULTAS.ACTUALIZAR_PEDIDO, [ estado, precioTotal, - idEnvio, idPago, + idEnvio, idPedido, ]); }) diff --git a/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js b/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js index 8d2d2eb5..90ba4c2a 100644 --- a/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js +++ b/Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js @@ -8,6 +8,7 @@ const verificarPermisos = require('@altertex/util/inter/verificarPermisos'); const limitePeticiones = require('@altertex/util/inter/limitePeticiones'); const RUTAS = require('@altertex/util/const/rutas'); const PERMISOS = require('@altertex/util/const/permisos'); +const validarYSanitizar = require('@altertex/util/inter/validarYSanitizar'); // RF[62] - Actualizar Pedido ruteador.put( @@ -16,6 +17,7 @@ ruteador.put( autorizarToken, limitePeticiones, verificarPermisos(PERMISOS.ACTUALIZAR_PEDIDO), + validarYSanitizar, controlador.actualizarPedido ); diff --git a/Utilidades/Constantes/consultasPedidos.js b/Utilidades/Constantes/consultasPedidos.js index 1a86c0b1..1426a12d 100644 --- a/Utilidades/Constantes/consultasPedidos.js +++ b/Utilidades/Constantes/consultasPedidos.js @@ -36,12 +36,14 @@ module.exports = { WHERE idPedido = ?;`, ACTUALIZAR_PEDIDO: ` - UPDATE pedido SET - estado = ?, - precioTotal = ?, - idEnvio = ?, - idPago = ? - WHERE idPedido = ?; + UPDATE pedido + JOIN pago ON pedido.idPago = pago.idPago + JOIN envio ON pedido.idEnvio = envio.idEnvio + SET + pedido.estado = ?, + pedido.precioTotal = ?, + pago.estatus = ?, + envio.estado = ? + WHERE pedido.idPedido = ?; `, - }; From dfd2f9b7acef9c692e7db83c96ec4c9131750501 Mon Sep 17 00:00:00 2001 From: angieriosc Date: Fri, 6 Jun 2025 16:53:32 -0600 Subject: [PATCH 4/4] Fix: Correciones eslint --- .../actualizarPedido.controller.js | 13 ++++++++-- .../repositorioActualizarPedido.js | 25 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Pedidos/Controladores/actualizarPedido.controller.js b/Pedidos/Controladores/actualizarPedido.controller.js index 072dbf73..299ddbd4 100644 --- a/Pedidos/Controladores/actualizarPedido.controller.js +++ b/Pedidos/Controladores/actualizarPedido.controller.js @@ -2,12 +2,21 @@ const MENSAJES = require('@altertex/util/const/mensajesPedidos'); const repositorio = require('@altertex/pedidos/repos/repositorioActualizarPedido'); /** - * RF[62] - Actualizar Pedido + * RF[62] - Actualizar Pedido [https://codeandco-wiki.netlify.app/docs/proyectos/textiles/documentacion/requisitos/RF62] * Controlador para actualizar la información de uno o varios pedidos. + * + * Respuestas posibles: + * - 400 si faltan datos en el cuerpo de la solicitud. + * - 200 si el pedido se actualiza correctamente. + * + * @async + * @function actualizarGrupoEmpleados + * @param {Express.Request} req - Objeto de solicitud HTTP de Express. + * @param {Express.Response} res - Objeto de respuesta HTTP de Express. + * @returns {Promise} La respuesta HTTP con el estado y mensaje correspondiente. */ exports.actualizarPedido = async (req, res) => { let datos; - console.log('body', req.body); if (req.body.idPedido) { datos = [req.body]; } else if (req.body.cambios) { diff --git a/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js b/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js index b08156ef..002d898a 100644 --- a/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js +++ b/Pedidos/Datos/Repositorios/repositorioActualizarPedido.js @@ -2,9 +2,30 @@ const correrQuery = require('@altertex/util/ser/correrQuery'); const MENSAJES = require('@altertex/util/const/mensajesPedidos'); const CONSULTAS = require('@altertex/util/const/consultasPedidos'); +//RF[62] - Actualizar Pedido - [https://codeandco-wiki.netlify.app/docs/proyectos/textiles/documentacion/requisitos/RF62] + /** - * RF[62] - Actualizar Pedido - * Repositorio para actualizar los datos de uno o varios pedidos. + * Actualiza uno o varios pedidos en la base de datos con nueva información + * de estado, precio total, ID de envío y ID de pago. + * + * Esta función realiza: + * - La validación de que se proporcionen datos para actualizar. + * - La actualización simultánea de múltiples pedidos usando Promise.all. + * - El manejo de errores durante el proceso de actualización. + * + * La función procesa cada pedido de forma paralela, actualizando sus campos + * mediante una consulta SQL preparada con los parámetros proporcionados. + * + * @async + * @function actualizarPedido + * @param {object[]} datos - Array de objetos con los datos de los pedidos a actualizar. + * @param {number} datos[].idPedido - ID único del pedido a actualizar. + * @param {string|number} datos[].estado - Nuevo estado del pedido. + * @param {number} datos[].precioTotal - Nuevo precio total del pedido. + * @param {number} datos[].idEnvio - ID del envío asociado al pedido. + * @param {number} datos[].idPago - ID del pago asociado al pedido. + * @throws {Error} 'Sin datos para actualizar.' - Si el array está vacío o no es válido. + * @throws {Error} Mensaje de error específico desde MENSAJES.ERROR_ACTUALIZAR_PEDIDO - Si ocurre algún error durante la actualización. */ exports.actualizarPedido = async (datos) => { if (!Array.isArray(datos) || datos.length === 0) {