Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
2.3 kB
1
Indexable
Never
const Joi = require('joi');
const model = require('../models/modelProducts');

const schemaVenda = Joi.object({
  productId: Joi.number().required(),
  quantity: Joi.number().min(1).required(),
});

const vireficarProdutoExistente = async (productId, res) => {
  const produto = await model.buscarPorId(productId);
  if (!produto) {
    return res.status(404).json({ message: 'Product not found' });
  }
};

const lindandoComErro = (errorMessage, res) => {
  const erroDoProduto = errorMessage.includes('"productId" is required');
  const erroDeQuantidade = errorMessage.includes('"quantity" is required');

  if (erroDoProduto || erroDeQuantidade) {
    return res.status(400).json({ message: errorMessage });
  }

  if (errorMessage.includes('"quantity" must be greater than or equal to 1')) {
    return res.status(422).json({ message: errorMessage });
  }
};

const validacaoDoItem = async (item, res) => {
  const { error } = schemaVenda.validate(item);

  if (error) {
    const mensagemDeErro = error.details[0].message;
    const respostaDoErro = lindandoComErro(mensagemDeErro, res);
    if (respostaDoErro) return respostaDoErro;
  }

  const respostaDoProduto = await vireficarProdutoExistente(item.productId, res);
  if (respostaDoProduto) return respostaDoProduto;
};

const validateSale = async (req, res, next) => {
  const itemVendido = req.body;

  const promises = itemVendido.map((item) => validacaoDoItem(item, res));

  const resultado = await Promise.all(promises);

  const respostaDeErro = resultado.find((result) => result);
  if (respostaDeErro) return respostaDeErro;

  next();
};

const esquemaDeQuantidada = Joi.object({
  quantity: Joi.number().min(1).required(),
});

const validateSalesProductQuantity = async (req, res, next) => {
  const { quantity } = req.body;

  const { error } = esquemaDeQuantidada.validate({ quantity });

  if (error) {
    const erroMsg = error.details[0].message;

    if (erroMsg.includes('"quantity" is required')) {
      return res.status(400).json({ message: erroMsg });
    }

    if (erroMsg.includes('"quantity" must be greater than or equal to 1')) {
      return res.status(422).json({ message: erroMsg });
    }

    return res.status(400).json({ message: erroMsg });
  }
  next();
};

module.exports = { validateSale, validateSalesProductQuantity }
Leave a Comment