diff --git a/README.md b/README.md index 291bc30..ca498de 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ No Windows, confirme que o Java está disponível no `PATH` e execute | --- | --- | --- | | `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/{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 610480b..d511a27 100644 --- a/src/main/java/com/exemplo/ordem_servico/controller/OrdemServicoController.java +++ b/src/main/java/com/exemplo/ordem_servico/controller/OrdemServicoController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; import com.exemplo.ordem_servico.model.OrdemServico; import com.exemplo.ordem_servico.service.OrdemServicoService; @@ -32,9 +33,10 @@ public OrdemServico criar(@Valid @RequestBody OrdemServico ordem) { return service.criar(ordem); } - @GetMapping - public List listar() { - return service.listar(); + @GetMapping + public List listar( + @RequestParam(required = false) String cliente) { + return service.listar(cliente); } @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 10cd61f..6840091 100644 --- a/src/main/java/com/exemplo/ordem_servico/repository/OrdemServicoRepository.java +++ b/src/main/java/com/exemplo/ordem_servico/repository/OrdemServicoRepository.java @@ -1,5 +1,7 @@ package com.exemplo.ordem_servico.repository; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -8,4 +10,7 @@ @Repository public interface OrdemServicoRepository extends JpaRepository { -} \ No newline at end of file + + List findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( + String cliente); +} 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 8c5da0b..77f09a1 100644 --- a/src/main/java/com/exemplo/ordem_servico/service/OrdemServicoService.java +++ b/src/main/java/com/exemplo/ordem_servico/service/OrdemServicoService.java @@ -21,7 +21,12 @@ public OrdemServico criar(OrdemServico ordem) { return repository.save(ordem); } - public List listar() { + public List listar(String cliente) { + if (cliente != null && !cliente.isBlank()) { + return repository + .findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( + cliente.trim()); + } return repository.findAll(); } 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 2465597..47e8d3d 100644 --- a/src/test/java/com/exemplo/ordem_servico/service/OrdemServicoServiceTests.java +++ b/src/test/java/com/exemplo/ordem_servico/service/OrdemServicoServiceTests.java @@ -6,6 +6,7 @@ import static org.mockito.Mockito.when; import java.math.BigDecimal; +import java.util.List; import java.util.Optional; import org.junit.jupiter.api.Test; @@ -27,6 +28,30 @@ class OrdemServicoServiceTests { @InjectMocks private OrdemServicoService service; + @Test + void deveListarTodasAsOrdensQuandoClienteNaoForInformado() { + List ordens = List.of(novaOrdem( + "Cliente", "Servico", "1", "0")); + when(repository.findAll()).thenReturn(ordens); + + assertEquals(ordens, service.listar(null)); + verify(repository).findAll(); + } + + @Test + void deveBuscarOrdensPorTrechoDoNomeDoCliente() { + List ordens = List.of(novaOrdem( + "Maria Silva", "Servico", "1", "0")); + when(repository.findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( + "maria")) + .thenReturn(ordens); + + assertEquals(ordens, service.listar(" maria ")); + verify(repository) + .findByClienteContainingIgnoreCaseOrderByClienteAscIdAsc( + "maria"); + } + @Test void deveExcluirOrdemExistente() { OrdemServico ordem = new OrdemServico();