1
resposta

[DUVIDA] Como usar a função de Paginação, quando usamos Service

Olá a todos, tenho uma duvida sobre como manter a utilização da função de paginação agora que estou utilizando os services para administrar as funções da Controller.

Estou refatorando algumas funções de um projeto antigo que estava utilizando MVC e agora to passando para arquitetura limpa e DDD e as funções de listar era tudo direto no controller. agora utilizando a service estou enfrentando duvidas sobre como manter a paginação. No momento está assim:

@GetMapping
    public ResponseEntity<Page<DadosDetalhamentoUsuario>> listar(@PageableDefault(size = 10, sort = {"nome"}) Pageable paginacao ) {
        var page = usuarioRepository.findAllByAtivoTrue(paginacao).map(DadosDetalhamentoUsuario::new);
        return ResponseEntity.ok(page);
    }

em uma outra classe do meu projeto que eu ja fiz uma pŕevia da refatoração, a Controller esta da seguinte forma:

 @GetMapping
    public ResponseEntity<List<DadosCadastroLivro>> listar(@PageableDefault(size = 10, sort = {"titulo"}) Pageable paginacao ) {
        var page = livroService.listarTodos(paginacao);
        return ResponseEntity.ok(page);
    }

e a service referente esta assim:

public List<DadosCadastroLivro> listarTodos(Pageable paginacao) {
        Page<Livro> livros = repository.findAllByAtivoTrueAndDisponivelTrue(paginacao);
        return livros.stream()
                .map(this::converteDados)
                .collect(Collectors.toList());
    }

mas como pode ver esta utilizando List e nao Page, pois teve uma serie de erros que apareceram. alguem pode me ajudar a encontrar uma solução para isso?

1 resposta

Boa noite, Elias! Tudo certo? você comentou de uma série de erros que apareceram. Acredito que você deve começar a alterando os retornos dos métodos. No seu service você precisa retornar o que tá interessado que no caso é:

public Page<DadosCadastroLivro> listarTodos(Pageable paginacao) {

com isso, você precisa corrigir seu retorno, como já está trabalhando com Page, você alterar o return para:

livros.map(this::converteDados);

e por fim, é preciso alterar o return do seu controller:

public ResponseEntity<Page<DadosCadastroLivro>> listar(@PageableDefault(size = 10, sort = {"titulo"}) Pageable paginacao) {

Pode verificar para ver se te ajuda?