Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Mostrar detalhes somente de médicos com cadastro ativo

Da mesma forma que no endpoint de listagem de médicos só exibimos os médicos cujo atributo "ativo" é true (não foram deletados logicamente), não deveríamos fazer essa mesma validação para o endpoint de detalhes do médico?

Algo como:

    @GetMapping("/{id}")
    public ResponseEntity<MedicoDetalheDto> detalhar(@PathVariable Long id) {
        Medico medico = this.repository.getReferenceById(id);
        if (medico.isAtivo()) {
            return ResponseEntity.ok(new MedicoDetalheDto(medico)); // 200 OK
        }

        return ResponseEntity.notFound().build(); // 404 Not Found
    }

E outra dúvida relacionada a essa: como estou fazendo uma validação, isso poderia ser entendido como uma regra de negócio e consequemente fazer mais sentido colocar essa validação/regra em uma nova camada de Service/Use case?

1 resposta
solução!

Olá Matheus,

Sua ideia de validar se o médico está ativo antes de mostrar os detalhes está correta e pode ser uma boa prática para manter a consistência dos dados. A implementação que você sugeriu parece estar correta, mas é importante lembrar que a lógica de negócio deve ser implementada em uma camada separada, como a camada de Service/Use case que você mencionou.

Dessa forma, você pode separar as responsabilidades do seu código e torná-lo mais organizado e fácil de manter. Você pode criar um método na sua camada de Service/Use case que verifique se o médico está ativo e, em seguida, chamar esse método no endpoint de detalhes do médico.

Por exemplo:

@Service
public class MedicoService {

    @Autowired
    private MedicoRepository repository;

    public boolean isMedicoAtivo(Long id) {
        Medico medico = this.repository.getReferenceById(id);
        return medico.isAtivo();
    }
}

E no seu endpoint de detalhes do médico:

    @GetMapping("/{id}")
    public ResponseEntity<MedicoDetalheDto> detalhar(@PathVariable Long id) {
        if (this.service.isMedicoAtivo(id)) {
            Medico medico = this.repository.getReferenceById(id);
            return ResponseEntity.ok(new MedicoDetalheDto(medico)); // 200 OK
        }

        return ResponseEntity.notFound().build(); // 404 Not Found
    }

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software