diff --git a/README.md b/README.md index d8dafdb..0b00914 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ No Windows, confirme que o Java está disponível no `PATH` e execute | Método | Rota | Descrição | | --- | --- | --- | | `POST` | `/ordens` | Cria uma ordem de serviço | -| `GET` | `/ordens` | Lista as ordens cadastradas | -| `GET` | `/ordens?cliente=nome` | Filtra ordens pelo nome do cliente, ignorando maiúsculas e minúsculas | +| `GET` | `/ordens?page=0&size=20&sort=cliente,asc` | Lista as ordens com paginação e ordenação | +| `GET` | `/ordens?cliente=nome&page=0&size=20` | Filtra ordens pelo cliente e mantém a paginação | | `GET` | `/ordens/{id}` | Consulta uma ordem pelo ID | | `PUT` | `/ordens/{id}` | Atualiza uma ordem existente | | `DELETE` | `/ordens/{id}` | Exclui uma ordem existente | diff --git a/src/main/java/com/exemplo/ordem_servico/controller/OrdemServicoController.java b/src/main/java/com/exemplo/ordem_servico/controller/OrdemServicoController.java index d511a27..5a7af6b 100644 --- a/src/main/java/com/exemplo/ordem_servico/controller/OrdemServicoController.java +++ b/src/main/java/com/exemplo/ordem_servico/controller/OrdemServicoController.java @@ -1,6 +1,9 @@ package com.exemplo.ordem_servico.controller; import org.springframework.http.HttpStatus; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -16,7 +19,6 @@ import com.exemplo.ordem_servico.service.OrdemServicoService; import jakarta.validation.Valid; -import java.util.List; @RestController @RequestMapping("/ordens") @@ -34,9 +36,10 @@ public OrdemServico criar(@Valid @RequestBody OrdemServico ordem) { } @GetMapping - public List listar( - @RequestParam(required = false) String cliente) { - return service.listar(cliente); + public Page listar( + @RequestParam(required = false) String cliente, + @PageableDefault(size = 20, sort = "cliente") Pageable pageable) { + return service.listar(cliente, pageable); } @GetMapping("/{id}") diff --git a/src/main/java/com/exemplo/ordem_servico/repository/OrdemServicoRepository.java b/src/main/java/com/exemplo/ordem_servico/repository/OrdemServicoRepository.java index 6840091..c80a5a7 100644 --- a/src/main/java/com/exemplo/ordem_servico/repository/OrdemServicoRepository.java +++ b/src/main/java/com/exemplo/ordem_servico/repository/OrdemServicoRepository.java @@ -1,7 +1,7 @@ package com.exemplo.ordem_servico.repository; -import java.util.List; - +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -11,6 +11,7 @@ public interface OrdemServicoRepository extends JpaRepository { - List findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( - String cliente); + Page findByClienteContainingIgnoreCase( + String cliente, + Pageable pageable); } diff --git a/src/main/java/com/exemplo/ordem_servico/service/OrdemServicoService.java b/src/main/java/com/exemplo/ordem_servico/service/OrdemServicoService.java index 77f09a1..4d4a763 100644 --- a/src/main/java/com/exemplo/ordem_servico/service/OrdemServicoService.java +++ b/src/main/java/com/exemplo/ordem_servico/service/OrdemServicoService.java @@ -1,7 +1,7 @@ package com.exemplo.ordem_servico.service; -import java.util.List; - +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import com.exemplo.ordem_servico.exception.OrdemServicoNaoEncontradaException; @@ -21,13 +21,13 @@ public OrdemServico criar(OrdemServico ordem) { return repository.save(ordem); } - public List listar(String cliente) { + public Page listar(String cliente, Pageable pageable) { if (cliente != null && !cliente.isBlank()) { return repository - .findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( - cliente.trim()); + .findByClienteContainingIgnoreCase( + cliente.trim(), pageable); } - return repository.findAll(); + return repository.findAll(pageable); } public OrdemServico buscarPorId(Long id) { diff --git a/src/test/java/com/exemplo/ordem_servico/service/OrdemServicoServiceTests.java b/src/test/java/com/exemplo/ordem_servico/service/OrdemServicoServiceTests.java index 47e8d3d..f08dcae 100644 --- a/src/test/java/com/exemplo/ordem_servico/service/OrdemServicoServiceTests.java +++ b/src/test/java/com/exemplo/ordem_servico/service/OrdemServicoServiceTests.java @@ -6,11 +6,14 @@ import static org.mockito.Mockito.when; import java.math.BigDecimal; -import java.util.List; import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -30,26 +33,27 @@ class OrdemServicoServiceTests { @Test void deveListarTodasAsOrdensQuandoClienteNaoForInformado() { - List ordens = List.of(novaOrdem( - "Cliente", "Servico", "1", "0")); - when(repository.findAll()).thenReturn(ordens); + Pageable pagina = PageRequest.of(0, 20); + Page ordens = new PageImpl<>(java.util.List.of(novaOrdem( + "Cliente", "Servico", "1", "0"))); + when(repository.findAll(pagina)).thenReturn(ordens); - assertEquals(ordens, service.listar(null)); - verify(repository).findAll(); + assertEquals(ordens, service.listar(null, pagina)); + verify(repository).findAll(pagina); } @Test void deveBuscarOrdensPorTrechoDoNomeDoCliente() { - List ordens = List.of(novaOrdem( - "Maria Silva", "Servico", "1", "0")); - when(repository.findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( - "maria")) + Pageable pagina = PageRequest.of(0, 10); + Page ordens = new PageImpl<>(java.util.List.of(novaOrdem( + "Maria Silva", "Servico", "1", "0"))); + when(repository.findByClienteContainingIgnoreCase( + "maria", pagina)) .thenReturn(ordens); - assertEquals(ordens, service.listar(" maria ")); + assertEquals(ordens, service.listar(" maria ", pagina)); verify(repository) - .findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( - "maria"); + .findByClienteContainingIgnoreCase("maria", pagina); } @Test