Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Duvida] Construção de Query

Eu decidi por em pratica o que tinha aprendido até aqui (parei na aula 3 do curso) e tentei implementar algumas coisas por mim mesmo a query sendo um deles e apesar de ter tido sucesso fiquei em dúvida se não existe uma maneira diferente("mais correta") de implementação. Como ficou muito grande aqui está o github https://github.com/235471/BookStoreAPI no arquivo /src/controllers/bookController.js, o método é listBooksByQuery. Como comentei decidi por a mão na massa então posso não ter implementado da maneira mais adequada por isso gostaria de uma ajuda também utilizei um schema query config dessa maneira para o livro:

livroSchema.statics.queryConfig = {
  titulo: 'regex',
  lancamento: 'exact',
  'autor.name': 'regex',
  'autor.nationality': 'regex',
  'editora.razaoSocial': 'regex',
  'editora.nomeFantasia': 'regex',
  'editora.cnpj': 'exact',
  'editora.telefone': 'exact',
  'editora.email': 'regex',
  'editora.status': 'exact',
  minPreco: 'exact',
  maxPreco: 'exact',
  minPaginas: 'exact',
  maxPaginas: 'exact',
};
2 respostas
solução!

Olá, Israel!

Parabéns por colocar em prática tudo o que aprendeu!

Pelo que você descreveu, está utilizando um queryConfig para definir como cada campo deve ser tratado nas buscas, uma abordagem bem interessante para manter a flexibilidade e clareza no código.

Uma maneira comum de lidar com queries em APIs é utilizando bibliotecas como o Mongoose para MongoDB, que permitem construir queries de forma bastante expressiva. No seu caso, parece que você está utilizando um esquema de configuração para determinar se um campo deve ser buscado por regex ou exact, o que é uma boa prática para lidar com diferentes tipos de busca.

Aqui estão algumas sugestões que podem ajudar a refinar sua abordagem:

  1. Validação de Input: Certifique-se de validar os dados de entrada para evitar injeções de código ou consultas malformadas. Isso pode ser feito utilizando bibliotecas como Joi ou express-validator.

  2. Paginação e Limite de Resultados: Para evitar sobrecarga no servidor e melhorar a experiência do usuário, considere implementar paginação e um limite máximo de resultados retornados por consulta.

  3. Indexação: Se estiver utilizando um banco de dados como MongoDB, certifique-se de indexar campos que são frequentemente utilizados em buscas para melhorar a performance.

  4. Refatoração e Modularização: Se o método listBooksByQuery estiver muito longo, considere dividir em funções menores e mais específicas. Isso pode ajudar na legibilidade e manutenção do código.

  5. Testes: Implemente testes unitários e de integração para garantir que suas queries estão funcionando conforme esperado em diferentes cenários.

Por fim, sempre é uma boa ideia revisar a documentação da tecnologia que está utilizando e explorar diferentes abordagens para ver qual se encaixa melhor no seu caso de uso.

Bons estudos!

  1. Vou verificar as bibliotecas mencionadas.
  2. Adicionei paginação em todas as rotas gets relevantes.
  3. Adicionei indexes aos schemas dos meus modelos.
  4. Já estava em processo de refatorar minha lógica em listBooksByQuery mesmo antes de ver sua mensagem terminei agora.
  5. Teste unitarios podem ser feitos com o JEST? Vou averiguar como utiliza-lo