1
resposta

Chalenge backend 2 - Como validar Descricao por mês

Boa noite pessoal! Estou criando uma api que é um CRUD de despesas e receitas para treinar aqui e me deparei com uma situação que não sei como resolver. Não quero permitir que seja cadastrado uma receita ou despesa com uma descrição que já tenha sido cadastrada naquele mês. Por exemplo: Se tentar cadastrar "Salário" para o mês 2022-01 mais de uma vez não deixar, mas se cadastrar para outro mês que ainda não tenha "Salário" permitir.

O código está nesse repositório: https://github.com/LeandroFSimeao/controle-de-or-amento-API

Esse é o Schema:

const receitaSchema = new mongoose.Schema(
    {
        id: {type: String},
        descricao: {type: String, required: true},
        valor: {type: Number, required: true},
        data: {type: Date, requires: true}
    }
);

Podem me dar uma ideia de como fazer ?

1 resposta

Olá Leandro! Tudo bem com você?

Peço desculpa pela demora para responder o seu tópico.

Você pode realizar uma verificação antes de salvar a receita para garantir que não seja cadastrada uma receita já existente. Uma maneira de fazer isso é buscar no banco de dados se já existe uma receita com os mesmos dados da nova receita a ser cadastrada.

Aqui está um exemplo de como você pode implementar essa validação:

static cadastraReceita = (req, res) => {
    let receita = new receitas(req.body);

    // Verificar se já existe uma receita com os mesmos dados
    receitas.findOne({
        nome: receita.nome,
        ingredientes: receita.ingredientes,
        // Adicione outros campos relevantes para a verificação
    }, (err, receitaExistente) => {
        if (err) {
            res.status(500).send({ message: `${err.message} - Falha ao verificar a existência da receita.` });
        } else if (receitaExistente) {
            res.status(400).send({ message: 'Essa receita já está cadastrada.' });
        } else {
            // Nenhuma receita existente encontrada, então pode cadastrar
            receita.save((err) => {
                if (err) {
                    res.status(500).send({ message: `${err.message} - Falha ao cadastrar receita.` });
                } else {
                    res.status(201).send(receita.toJSON());
                }
            });
        }
    });
};

No código acima, o método findOne é usado para buscar uma receita existente no banco de dados com os mesmos dados da nova receita. Se uma receita existente for encontrada, é retornado um erro 400 indicando que a receita já está cadastrada. Caso contrário, a nova receita é salva no banco de dados.

Espero ter lhe ajudado! Se tiver mais alguma dúvida, é só perguntar.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.