1
resposta

não funcionou como esperado e por que funciona parcialmente?

Olá tudo bem?

Tenho duas questões. Mas primeiro vamos ver meu m,étodo como está:

static async getAllTurmas(req, resp){
        const where = {};
        const {data_inicial, data_final} = req.query;
        data_inicial || data_final ? where.data_inicio = {} : null;
        data_inicial ? where.data_inicio[Op.gte] = data_inicial : null;
        data_final ? where.data_inicio[Op.lte] = data_final : null;
        console.log(where);

        try{
            const turmas = await database.Turmas.findAll({where})
            return resp.status(200).json(turmas)
        }catch(error){
            return resp.status(500).json(error.message)
        }
    }

Primeira questão: Se nos demais métodos para fazer uma busca com parâmetro where eu precisava colocolar o where como chave do objeto da função ( exemplo: const turma = await database.Turmas.findOne({where: {id: Number(id)}})) por que nesse caso a chave passa a ser o data_inio e não o where que possui como valor o objeto que, aí sim, teria o data_inicio como chave e o valor com operadores? O objeto where fica assim: { data_inicio: { [Symbol(gte)]: '2020-01-01' } } ou seja é como se escrevesse assim: const turmas = await database.Turmas.findAll({{ data_inicio: { [Symbol(gte)]: '2020-01-01' } } ) por que isso funciona?

A segunda questão: foi passada a seguinte query na rota: ...rota normal...?data_inicial=2020-01-01& data_final=2020-06-20 antes disso coloquei um dos elementos com datas depois de 20/06/2020 para fazer o teste, no entanto o elemento continuou aparecendo, isso porque , se reparar no objeto que saiu no conosole.log, ou seja { data_inicio: { [Symbol(gte)]: '2020-01-01' } }, ele apenas está levando em consideração a primeira data, a segunda data não é colocada em operação lógica no filtro.

Por que isso acontece? Aonde está minha falha?

se puderem me ajudar ficarei extremamente grato :D

1 resposta

Olá Ricardo, tudo bem?

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

Respondendo à sua primeira questão, é feito dessa forma, pois o sequelize não tem métodos que possam fazer isso, toda essa relação e condição que construímos e até mesmo comentado pela instrutora antes de começar a desenvolver, que o mesmo não tem ferramentas que possam fazer isso de forma mais simples, logo devemos desenvolvê-las dentro do método.

Agora sobre a sua segunda pergunta, talvez você tenha se equivocado na passagem do segundo parâmetro na requisição, pois ambos os valores passados são e devem ser adicionados ao objeto. Pois, analisando o código que você compartilhou, ele não apresenta nenhum problema, então caso esteja enfrentando algum problema na passagem da "data_final", peço que compartilhe todo o seu projeto comigo.

Espero ter esclarecido as suas perguntas. Caso ainda queira perguntar algo mais, estarei à disposição.

No mais, grande abraço e bons estudos!

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