Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions Pedidos/Controladores/actualizarPedido.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const MENSAJES = require('@altertex/util/const/mensajesPedidos');
const repositorio = require('@altertex/pedidos/repos/repositorioActualizarPedido');

/**
* 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<void>} La respuesta HTTP con el estado y mensaje correspondiente.
*/
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,
});
}
};
50 changes: 50 additions & 0 deletions Pedidos/Datos/Repositorios/repositorioActualizarPedido.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
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]

/**
* 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) {
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,
idPago,
idEnvio,
idPedido,
]);
})
);
} catch {
throw new Error(MENSAJES.ERROR_ACTUALIZAR_PEDIDO.mensaje);
}
};
24 changes: 24 additions & 0 deletions Pedidos/Rutas/RutasIndividuales/actualizarPedidos.routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
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');
const validarYSanitizar = require('@altertex/util/inter/validarYSanitizar');

// RF[62] - Actualizar Pedido
ruteador.put(
RUTAS.PEDIDOS.ACTUALIZAR_PEDIDO,
revisarApiKey(),
autorizarToken,
limitePeticiones,
verificarPermisos(PERMISOS.ACTUALIZAR_PEDIDO),
validarYSanitizar,
controlador.actualizarPedido
);

module.exports = ruteador;
2 changes: 2 additions & 0 deletions Pedidos/Rutas/indexPedidos.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ 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;
12 changes: 12 additions & 0 deletions Utilidades/Constantes/consultasPedidos.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,16 @@ module.exports = {
ELIMINAR_PEDIDO: `
DELETE FROM pedido
WHERE idPedido = ?;`,

ACTUALIZAR_PEDIDO: `
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 = ?;
`,
};
9 changes: 9 additions & 0 deletions Utilidades/Constantes/mensajesPedidos.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.',
},

};
1 change: 1 addition & 0 deletions Utilidades/Constantes/rutas.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ module.exports = {
BASE: '/pedidos',
CONSULTAR_LISTA: '/consultar-lista',
ELIMINAR_PEDIDO: '/eliminar',
ACTUALIZAR_PEDIDO: '/actualizar-pedido',
},
PAGOS: {
BASE: '/pagos',
Expand Down