Last active
October 4, 2022 23:03
-
-
Save andysteel/d52f8b01bf2445b665bf603473f35d42 to your computer and use it in GitHub Desktop.
Exemplo consulta paginada
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package testando; | |
| import java.time.LocalDate; | |
| import java.util.Objects; | |
| import javax.ws.rs.QueryParam; | |
| import com.fasterxml.jackson.databind.annotation.JsonDeserialize; | |
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; | |
| public class ConsultaEditalDTO extends ConsultaPaginadaDTO { | |
| @QueryParam("anoEdital") | |
| private Integer anoEdital; | |
| @QueryParam("codSituacao") | |
| private Short codSituacao; | |
| @JsonDeserialize(using = LocalDateDeserialize.class) | |
| @JsonSerialize(using = LocalDateSerialize.class) | |
| @QueryParam("dataGeracao") | |
| private LocalDate dataGeracao; | |
| @QueryParam("orderAnoEdital") | |
| private String orderAnoEdital; | |
| @QueryParam("orderDataGeracao") | |
| private String orderDataGeracao; | |
| @QueryParam("orderCodSituacao") | |
| private String orderCodSituacao; | |
| public Integer getAnoEdital() { | |
| return anoEdital; | |
| } | |
| public void setAnoEdital(Integer anoEdital) { | |
| this.anoEdital = anoEdital; | |
| } | |
| public Short getCodSituacao() { | |
| return codSituacao; | |
| } | |
| public void setCodSituacao(Short codSituacao) { | |
| this.codSituacao = codSituacao; | |
| } | |
| public LocalDate getDataGeracao() { | |
| return dataGeracao; | |
| } | |
| public void setDataGeracao(LocalDate dataGeracao) { | |
| this.dataGeracao = dataGeracao; | |
| } | |
| public String getOrderAnoEdital() { | |
| return orderAnoEdital; | |
| } | |
| public void setOrderAnoEdital(String orderAnoEdital) { | |
| this.orderAnoEdital = orderAnoEdital; | |
| } | |
| public String getOrderDataGeracao() { | |
| return orderDataGeracao; | |
| } | |
| public void setOrderDataGeracao(String orderDataGeracao) { | |
| this.orderDataGeracao = orderDataGeracao; | |
| } | |
| public String getOrderCodSituacao() { | |
| return orderCodSituacao; | |
| } | |
| public void setOrderCodSituacao(String orderCodSituacao) { | |
| this.orderCodSituacao = orderCodSituacao; | |
| } | |
| @Override | |
| public String toString() { | |
| return String.format( | |
| "ConsultaEditalDTO [anoEdital=%s, codSituacao=%s, dataGeracao=%s, orderAnoEdital=%s, orderCodSituacao=%s, orderDataGeracao=%s]", | |
| anoEdital, codSituacao, dataGeracao, orderAnoEdital, orderCodSituacao, orderDataGeracao); | |
| } | |
| @Override | |
| public int hashCode() { | |
| final int prime = 31; | |
| int result = super.hashCode(); | |
| result = prime * result | |
| + Objects.hash(anoEdital, codSituacao, dataGeracao, orderAnoEdital, orderCodSituacao, orderDataGeracao); | |
| return result; | |
| } | |
| @Override | |
| public boolean equals(Object obj) { | |
| if (this == obj) | |
| return true; | |
| if (!super.equals(obj)) | |
| return false; | |
| if (getClass() != obj.getClass()) | |
| return false; | |
| ConsultaEditalDTO other = (ConsultaEditalDTO) obj; | |
| return Objects.equals(anoEdital, other.anoEdital) && Objects.equals(codSituacao, other.codSituacao) | |
| && Objects.equals(dataGeracao, other.dataGeracao) | |
| && Objects.equals(orderAnoEdital, other.orderAnoEdital) | |
| && Objects.equals(orderCodSituacao, other.orderCodSituacao) | |
| && Objects.equals(orderDataGeracao, other.orderDataGeracao); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package testando; | |
| import java.io.Serializable; | |
| import java.time.LocalDateTime; | |
| import com.fasterxml.jackson.databind.annotation.JsonDeserialize; | |
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; | |
| public class EditalDTO implements Serializable { | |
| private Integer anoEdital; | |
| private Integer codSituacao; | |
| @JsonDeserialize(using = LocalDateTimeDeserialize.class) | |
| @JsonSerialize(using = LocalDateTimeSerialize.class) | |
| private LocalDateTime dataGeracao; | |
| private Integer numeroEdital; | |
| public EditalDTO(EditalED edital) { | |
| if(edital.getAnoEdital() != null) { | |
| this.anoEdital = edital.getAnoEdital(); | |
| } | |
| if(edital.getCodGddSituacEdital() != null) { | |
| this.codSituacao = edital.getCodGddSituacEdital().intValue(); | |
| } | |
| if(edital.getDthGeracao() != null) { | |
| this.dataGeracao = edital.getDthGeracao(); | |
| } | |
| if(edital.getNroIntEdital() != null) { | |
| this.numeroEdital = edital.getNroIntEdital(); | |
| } | |
| } | |
| public Integer getAnoEdital() { | |
| return anoEdital; | |
| } | |
| public Integer getCodSituacao() { | |
| return codSituacao; | |
| } | |
| public LocalDateTime getDataGeracao() { | |
| return dataGeracao; | |
| } | |
| public Integer getNumeroEdital() { | |
| return numeroEdital; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.procergs.gpn.rnbd.testando; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| import com.procergs.arqjava4.persistence.Ordem; | |
| public class EditalEdBuilder { | |
| private EditalED editalED = new EditalED(); | |
| public EditalEdBuilder construirComFiltro(final ConsultaEditalDTO dto) { | |
| if(dto != null) { | |
| if(dto.getAnoEdital() != null) { | |
| this.editalED.setAnoEdital(dto.getAnoEdital()); | |
| } | |
| if(dto.getCodSituacao() != null) { | |
| this.editalED.setCodGddSituacEdital(dto.getCodSituacao()); | |
| } | |
| if(dto.getDataGeracao() != null) { | |
| this.editalED.setDthGeracao(dto.getDataGeracao().atStartOfDay()); | |
| } | |
| this.editalED.getPropLista().setInicio(dto.getPosicaoDaPagina()); | |
| this.editalED.getPropLista().setTamanho(dto.getTamanhoDaPagina()); | |
| } | |
| return this; | |
| } | |
| public EditalEdBuilder construirComOrdenacao(final ConsultaEditalDTO dto) { | |
| if(dto != null) { | |
| List<Ordem> ordems = new ArrayList<>(); | |
| MontaOrdenacaoBuilderFinal.paraFiltroDeConsulta(dto) | |
| .testaValorOrdenacao(consultaEdital -> consultaEdital.getOrderAnoEdital() != null) | |
| .incluiOrdenacao(dto.getOrderAnoEdital(), "anoEdital", ordems) | |
| .testaValorOrdenacao(consultaEdital -> consultaEdital.getOrderCodSituacao() != null) | |
| .incluiOrdenacao(dto.getOrderCodSituacao(), "codGddSituacEdital", ordems) | |
| .testaValorOrdenacao(consultaEdital -> consultaEdital.getOrderDataGeracao() != null) | |
| .incluiOrdenacao(dto.getOrderDataGeracao(), "dthGeracao", ordems); | |
| this.editalED.getPropLista().setOrdem(ordems); | |
| } | |
| return this; | |
| } | |
| public EditalED build() { | |
| return this.editalED; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package remote; | |
| import java.net.URI; | |
| import java.net.URISyntaxException; | |
| import javax.inject.Inject; | |
| import javax.servlet.http.HttpServletRequest; | |
| import javax.validation.Valid; | |
| import javax.validation.constraints.Min; | |
| import javax.validation.executable.ValidateOnExecution; | |
| import javax.ws.rs.BeanParam; | |
| import javax.ws.rs.GET; | |
| import javax.ws.rs.POST; | |
| import javax.ws.rs.Path; | |
| import javax.ws.rs.PathParam; | |
| import javax.ws.rs.core.Context; | |
| import javax.ws.rs.core.Response; | |
| import javax.ws.rs.core.Response.Status; | |
| import com.procergs.arqjava4.exception.RNException; | |
| import com.procergs.arqjava4.security.Permissao; | |
| import com.procergs.gpn.infra.AppInterceptor; | |
| import com.procergs.gpn.infra.BasicRest; | |
| import com.procergs.gpn.rnbd.testando.ConsultaEditalDTO; | |
| import com.procergs.gpn.rnbd.testando.EditalDTO; | |
| import com.procergs.gpn.rnbd.testando.NovoRecurso; | |
| import com.procergs.gpn.rnbd.testando.ResponseConsultaPaginadaDTO; | |
| import com.procergs.gpn.rnbd.testando.TestandoRN; | |
| import io.swagger.v3.oas.annotations.tags.Tag; | |
| @Tag(name = "testando") | |
| @Path("testando") | |
| @ValidateOnExecution | |
| @AppInterceptor | |
| public class TestaEndpointRest extends BasicRest { | |
| @Inject | |
| private TestandoRN testandoRN; | |
| @Context | |
| private HttpServletRequest request; | |
| @Permissao(desabilitada = true) | |
| @GET | |
| public Response consultaTabelaEdital(@BeanParam ConsultaEditalDTO dto) { | |
| ResponseConsultaPaginadaDTO<EditalDTO> response = testandoRN.consultarEditais(dto); | |
| if(response != null && response.getTotal() == 0) { | |
| return Response.status(Status.NOT_FOUND).build(); | |
| } | |
| return Response.ok(response).build(); | |
| } | |
| @Permissao(desabilitada = true) | |
| @POST | |
| @Path("post") | |
| public Response criaNovoRecurso(@Valid NovoRecurso novoRecurso) throws URISyntaxException { | |
| // throw new RNException("testando essa situação"); | |
| System.out.println(request.getRequestURI()); | |
| return Response.created(new URI(request.getRequestURI())).build(); | |
| } | |
| @Permissao(desabilitada = true) | |
| @GET | |
| @Path("nada/{parametro}") | |
| public Response consultaNada(@PathParam("parametro") @Min(value = 3) Long parametro) { | |
| return Response.ok(parametro).build(); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package testando; | |
| import java.time.ZoneId; | |
| import java.util.Date; | |
| import java.util.List; | |
| import org.hibernate.Criteria; | |
| import org.hibernate.criterion.DetachedCriteria; | |
| import org.hibernate.criterion.Projections; | |
| import org.hibernate.criterion.Restrictions; | |
| import com.procergs.gpn.infra.AppBD; | |
| public class TestandoBD extends AppBD<EditalED, Integer> { | |
| public List<EditalED> consultaPaginada(final EditalED editalED) { | |
| DetachedCriteria dc = montaConsultaPaginada(editalED); | |
| return findByCriteria(dc, editalED.getPropLista().getTamanho() * editalED.getPropLista().getInicio(), editalED.getPropLista().getTamanho()); | |
| } | |
| public int contaConsultaPaginada(final EditalED editalED) { | |
| DetachedCriteria dc = montaConsultaPaginada(editalED); | |
| Criteria criteria = dc.getExecutableCriteria(getSession()); | |
| return ((Number)criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue(); | |
| } | |
| private DetachedCriteria montaConsultaPaginada(final EditalED editalED) { | |
| DetachedCriteria dc = DetachedCriteria.forClass(EditalED.class); | |
| MontaCriterioBuilder | |
| .paraFiltroDeConsulta(editalED) | |
| .testaValorCriterio(edital -> edital.getAnoEdital() != null) | |
| .incluiCriterio(dc, Restrictions.eq("anoEdital", editalED.getAnoEdital())) | |
| .testaValorCriterio(edital -> edital.getCodGddSituacEdital() != null) | |
| .incluiCriterio(dc, Restrictions.eq("codGddSituacEdital", editalED.getCodGddSituacEdital())) | |
| .criterioComTratamento() | |
| .incluiCriterioComTratamento(() -> { | |
| if(editalED.getDthGeracao() != null) { | |
| dc.add(Restrictions.sqlRestriction("TRUNC(DTH_GERACAO)=?", Date.from(editalED.getDthGeracao().atZone(ZoneId.systemDefault()).toInstant()), org.hibernate.type.StandardBasicTypes.DATE)); | |
| } | |
| return editalED; | |
| }); | |
| adicionaOrdem(editalED, dc); | |
| return dc; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package testando; | |
| import java.util.List; | |
| import java.util.stream.Collectors; | |
| import javax.inject.Inject; | |
| public class TestandoRN { | |
| @Inject | |
| TestandoBD testandoBD; | |
| public ResponseConsultaPaginadaDTO<EditalDTO> consultarEditais(ConsultaEditalDTO dto) { | |
| final EditalED editalED = new EditalEdBuilder().construirComFiltro(dto).construirComOrdenacao(dto).build(); | |
| int totalDeEditaisFiltrados = testandoBD.contaConsultaPaginada(editalED); | |
| List<EditalED> paginaDeEditaisFiltrados = testandoBD.consultaPaginada(editalED); | |
| List<EditalDTO> editaisDTO = paginaDeEditaisFiltrados.stream().map(EditalDTO::new).collect(Collectors.toList()); | |
| Integer quantidadeDePaginas = (int) Math.ceil((double)totalDeEditaisFiltrados / dto.getTamanhoDaPagina()); | |
| return new ResponseConsultaPaginadaDTO<>(totalDeEditaisFiltrados, quantidadeDePaginas , dto.getPosicaoDaPagina(), editaisDTO, dto.getTamanhoDaPagina()); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment