Untitled
unknown
plain_text
a year ago
4.5 kB
3
Indexable
const Joi = require('joi'); const productsModel = require('../models/products.models'); // não ia fazer middleware para validação das vendas mas como estava ultrapassando o limite de linhas o lint estava reclamendo. // nao fiz para products, ja resolvi o problema de linhas. // esquema de validação: productId(id) e quantity (minima 1 unidade) são obrigatórios const schema = Joi.object({ productId: Joi.number().required(), quantity: Joi.number().min(1).required(), }); // verifica se o produto existe, se nao, retorna erro com messagem produto nao encontrado const verificaProdutoExistente = async (productId, res) => { const product = await productsModel.buscaId(productId); if (!product) { return res.constatus(404).json({ message: 'Product not found' }); } }; // Verifica se há erro relacionado ao productId ou quantity const verificaErro = (errorMessage, res) => { // includes verifica se a mensagem de erro contém a string passada como argumento, sempre retorna um valor boleano const productError = errorMessage.includes('"productId" is required'); const quantityError = errorMessage.includes('"quantity" is required'); // Trata erros relacionados a productId ou quantity if (productError || quantityError) { return res.status(400).json({ message: errorMessage }); } // Trata erros relacionados a quantidade mínima, // verifica se a mensagem de erro contém a string passada, retorna um valor boleano if (errorMessage.includes('"quantity" must be greater than or equal to 1')) { return res.status(422).json({ message: errorMessage }); } }; // valida um item (produto) usando o esquema, verifica se o produto existe. const validarItem = async (item, res) => { const { error } = schema.validate(item); if (error) { const errorMessage = error.details[0].message; const errorResponse = verificaErro(errorMessage, res); if (errorResponse) return errorResponse; } const productResponse = await verificaProdutoExistente(item.productId, res); if (productResponse) return productResponse; }; // Valida a venda, verificando se os produtos existem e se a quantidade é válida. Se tudo estiver correto, chama a próxima função middleware. const validacaoVenda = async (req, res, next) => { const itemsSold = req.body; // Mapeia os itens para um array de promessas utilizando a função validarItem const promises = itemsSold.map((item) => validarItem(item, res)); // Aguarda a conclusão de todas as promessas utilizando Promise.all const results = await Promise.all(promises); // Procura por um resultado (resposta de erro) dentro do array de resultados const errorResponse = results.find((result) => result); // Se houver uma resposta de erro, retorna a resposta if (errorResponse) return errorResponse; // Se não houver erros, chama o próximo middleware next(); // poderia ter usado o try/catch como em sales.controller.js e products.controller.js, como não testei estava sem tempo so completei o copilot. }; // esquema defina que a cquantidade obrigatoria é maior ou igual a 1 const quantidadeSchema = Joi.object({ quantity: Joi.number().min(1).required(), }); // Extrai a quantidade do corpo da requisição, valida conforme o quantidadeSchema e trata erros relacionados à quantidade. Se tudo estiver correto, chama a próxima função middleware. const validacaoVendasProductQuantity = async (req, res, next) => { const { quantity } = req.body; const { error } = quantidadeSchema.validate({ quantity }); // Verifica se existem erros na validação if (error) { // Extrai a mensagem de erro const errorMessage = error.details[0].message; // Verifica se a mensagem de erro indica a quantidade obrigatória. if (errorMessage.includes('"quantity" is required')) { // Se sim, retorna um erro 400 com a mensagem de erro return res.status(400).json({ message: errorMessage }); } // Verifica se a mensagem de erro indica que a quantidade deve ser maior ou igual a 1 if (errorMessage.includes('"quantity" must be greater than or equal to 1')) { return res.status(422).json({ message: errorMessage }); } // Se a mensagem de erro não corresponde a nenhum dos casos acima, retorna um erro 400 com a mensagem de erro return res.status(400).json({ message: errorMessage }); } // Se não houver erros na validação, chama o próximo middleware na cadeia next(); }; module.exports = { validacaoVenda, validacaoVendasProductQuantity };
Editor is loading...
Leave a Comment