demoiselle / framework

Repositório principal contendo o Core e Extensions: JPA, Security, WS
https://demoiselle.org
127 stars 77 forks source link

Suporte a filtro de campos data e operadores relacionais. #108

Closed emobtech closed 5 years ago

emobtech commented 6 years ago

Filtro de Data

Para filtrar consultas utilizando campos do tipo data, basta informar os valores dos parâmetros utilizando o padrão ISO-8601 e no fuso UTC. A conversão da data informada para o fuso do servidor é feita automaticamente, antes da consulta ser enviada ao banco de dados.

Exemplos:

Operadores Relacionais:

Além do operador relacional =, os filtros agora também suportam os demais operadores, i.e., >, <, >= e <=.

Exemplos:

É possível combinar esses operadores, a fim de efetuar consultas por intervalo de valores:

leonardomerlin commented 6 years ago

Opa! Achei massa. Só estranhei um pouco esses operadores, acho que nunca vi algo assim. Normalmente é usado aqueles ge, gte, ... né?! Você usou alguma referência? Manda ai pf.

Outra coisa que fiquei preocupado é se poderia ter algum problema na hora de manipular URL no frontend. Mas isso só será respondido depois dos testes.

De qualquer forma, muito boa a contribuição!

emobtech commented 6 years ago

Não peguei de nenhuma referência. Acredito que seja melhor usar esses operadores, pois eles são mais distinguíveis na hora de identificar, uma vez que "ge", "gt", "le" e "lt" são mais fáceis de confundirem com o valor do parâmetro em si. É a mesma ideia utilizada com o operador do like, *.

Acredito que não, mas se tiver algum problema, nada que um encode simples não resolva na hora de formar o parâmetro.

reinaldovale commented 6 years ago

Você está usando caracteres reservados.

Reserved Characters https://tools.ietf.org/html/rfc3986#page-12

emobtech commented 6 years ago

Posso usar quaisquer caracteres reservados que eu queira depois do igual, contanto que eu os codifique.

emobtech commented 6 years ago

Adicionei também o suporte a datas sem fuso, as quais não serão ajustadas para o fuso do servidor.

Esta alteração é útil quando campos desse tipo ignorarem a informação da hora, como acontece em muitas situações.

Então ao enviar a data sem o Z no final, o qual indica que a presença do fuso UTC, a mesma será utilizada da forma como foi enviada, sem nenhum ajuste de fuso.

Exemplo:

emobtech commented 6 years ago

Gostaria de saber se há uma previsão de uma definição da incorporação ou não desse recurso. Até uma definição, continuaremos usando uma versão customizada aqui no nosso projeto, uma vez que essa funcionalidade é muito necessária ao nosso sistema.

botelhojp commented 6 years ago

@emobtech, marquei a proposta vinculada ao Milestone 3.1.0, previsão para 30/07.

Ainda assim não podemos garantir que a mudança será absorvida, mas com certeza, ela será melhor valiada nas discussões da versão 3.1.0

Como envolve uma classe crítica do módulo CRUD, precisamos reforçar os testes. Se você tiver testes unitários nos ajudará.

emobtech commented 6 years ago

@botelhojp Obrigado pela resposta. Infelizmente não tenho nenhum teste unitário para essa funcionalidade, mas já foi bastante testado aqui pelo nosso lado, uma vez que vem sendo usada em algumas funcionalidades do nosso sistema. Vamos ficar no aguardo então. Qualquer dúvida, pode chamar #85 3756.

emobtech commented 6 years ago

E ai, pessoal. Alguma nova previsão? Estou esperando um posicionamento de vocês se vão aceitar isso ou não, pois o nosso sistema aqui faz uso dessas melhorias, e por causa disso ainda não usamos a última versão do framework. Caso queiram conversar melhor, me chamem no ramal 85-3756 (Ernandes).

emersonfaria commented 6 years ago

Ernandes, conforme conversa telefônica que tivemos a pouco, vou dar um encaminhamento para esse assunto.

Adianto que será necessário ter os testes automatizados para cada caminho feliz e para cada tratamento de exceção. Peço que adicione esses testes em sua implementação.

emobtech commented 5 years ago

Adicionei o suporte a ordenação de campos de segundo nível.

Por exemplo: /api/usuarios/sort=perfil(nome)