Skip to content

Instantly share code, notes, and snippets.

@DavidCabral
Created June 27, 2023 15:53
Show Gist options
  • Save DavidCabral/2c2acc21d9f6057cfef07b19b0180f2e to your computer and use it in GitHub Desktop.
Save DavidCabral/2c2acc21d9f6057cfef07b19b0180f2e to your computer and use it in GitHub Desktop.
@Getter
@Setter
public class Filter {
private String nome;
private Boolean ativo;
private Boolean pai;
}
@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);
}
}
public interface UnidadeDAO extends JpaRepository<Unidade, Long>, JpaSpecificationExecutor<Unidade> {
}
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)
}
}
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]));
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment