Skip to content

Instantly share code, notes, and snippets.

@DavidCabral
Created June 27, 2023 15:53
Show Gist options
  • Select an option

  • Save DavidCabral/2c2acc21d9f6057cfef07b19b0180f2e to your computer and use it in GitHub Desktop.

Select an option

Save DavidCabral/2c2acc21d9f6057cfef07b19b0180f2e to your computer and use it in GitHub Desktop.

Revisions

  1. DavidCabral created this gist Jun 27, 2023.
    7 changes: 7 additions & 0 deletions Filter.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,7 @@
    @Getter
    @Setter
    public class Filter {
    private String nome;
    private Boolean ativo;
    private Boolean pai;
    }
    11 changes: 11 additions & 0 deletions UnidadeController.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,11 @@
    @RestController
    @RequestMapping("api/unidades")
    @RequiredArgsConstructor
    public class UnidadeController {
    private final UnidadeService service;

    @GetMapping
    public Page<Unidade> findAll(Filter filter, Pageable page) {
    return service.findAll(filter, page);
    }
    }
    3 changes: 3 additions & 0 deletions UnidadeDAO.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    public interface UnidadeDAO extends JpaRepository<Unidade, Long>, JpaSpecificationExecutor<Unidade> {

    }
    27 changes: 27 additions & 0 deletions UnidadeService.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    package br.upe.model.service;

    import br.upe.model.dto.UnidadeDTO;
    import br.upe.model.entity.Unidade;
    import br.upe.model.entity.enums.Status;
    import br.upe.model.repository.UnidadeDAO;
    import br.upe.model.security.DTOService;
    import br.upe.model.util.Filter;
    import jakarta.persistence.EntityNotFoundException;
    import lombok.RequiredArgsConstructor;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;

    import static br.upe.model.repository.specification.UnidadeSpecification;

    @Service
    @RequiredArgsConstructor
    public class UnidadeService {
    private final UnidadeDAO dao;

    @Transactional(readOnly = true)
    public Page<Unidade> findAll(Filter filter, Pageable page) {
    return dao.findAll(UnidadeSpecification.filter(filter), page)
    }
    }
    21 changes: 21 additions & 0 deletions UnidadeSpecification.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    public class UnidadeSpecification {

    public static Specification<Unidade> filter(Filter filtro) {
    return (root, query, builder) -> {
    var predicates = new ArrayList<Predicate>();

    if (filtro.getNome() != null) {
    predicates.add(builder.like(builder.upper(root.get("nome")), "%" + filtro.getNome().toUpperCase() + "%"));
    }

    if (filtro.getAtivo() != null && filtro.getAtivo()) {
    predicates.add(root.get("status").equal(filtro.getStatus()));
    }


    return builder.and(predicates.toArray(new Predicate[0]));
    };
    }


    }