Olá, Daniel!
Para implementar uma busca de um médico por nome no seu endpoint @GetMapping
, você pode adicionar um parâmetro de consulta (query parameter) ao seu método. Vou te mostrar como fazer isso passo a passo.
Primeiro, você precisa ajustar o seu repositório para incluir um método que busque médicos pelo nome. Supondo que você esteja utilizando Spring Data JPA, você pode adicionar um método na sua interface de repositório:
public interface MedicoRepository extends JpaRepository<Medico, Long> {
Page<Medico> findByNomeContainingIgnoreCaseAndAtivoTrue(String nome, Pageable pageable);
}
Esse método vai buscar médicos cujo nome contém a string fornecida, ignorando maiúsculas e minúsculas, e que estão ativos.
Agora, você pode ajustar o seu endpoint @GetMapping
para aceitar um parâmetro de consulta opcional para o nome do médico:
@GetMapping
public ResponseEntity<Page<DadosListagemMedico>> listar(
@RequestParam(required = false) String nome,
@PageableDefault() Pageable paginacao) {
Page<Medico> page;
if (nome != null && !nome.isEmpty()) {
page = repository.findByNomeContainingIgnoreCaseAndAtivoTrue(nome, paginacao);
} else {
page = repository.findAllByAtivoTrue(paginacao);
}
Page<DadosListagemMedico> pageDto = page.map(DadosListagemMedico::new);
return ResponseEntity.ok(pageDto);
}
Com essa implementação, se você chamar o endpoint sem o parâmetro nome
, ele vai listar todos os médicos ativos. Se você fornecer um valor para o parâmetro nome
, ele vai filtrar os médicos cujo nome contém a string fornecida.
Exemplo de chamada do endpoint:
- Para listar todos os médicos ativos:
GET /medicos
- Para buscar médicos pelo nome:
GET /medicos?nome=João
Espero ter ajudado e bons estudos!