Ao testar o agendamento, todas as requisições são executadas, mesmo que não esteja de acordo com as validações, ou seja, as validações não estão funcionando.
@Service
public class AgendaDeConsultas {
@Autowired
private MedicoRepository medicoRepository;
@Autowired
private PacienteRepository pacienteRepository;
@Autowired
private ConsultaRepository consultaRepository;
@Autowired
private List<ValidadorAgendamentoDeConsulta> validadores;
public DadosDetalhamentoConsulta agenda(DadosAgendamentoConsulta dados) throws ValidacaoException {
if (!pacienteRepository.existsById(dados.idPaciente())) {
throw new ValidacaoException("O ID do paciente informado não existe!");
}
if (dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())) {
throw new ValidacaoException("O ID do médico informado não existe!");
}
validadores.forEach(validador -> {
try {
validador.valida(dados);
} catch (ValidacaoException e) {
e.printStackTrace();
}
});
Medico medico = escolheMedico(dados);
if (medico == null) {
throw new ValidacaoException("Não existe médico disponível nessa data!");
}
Paciente paciente = pacienteRepository.getReferenceById(dados.idPaciente());
Consulta consulta = new Consulta(null, medico, paciente, dados.data(), null);
consultaRepository.save(consulta);
return new DadosDetalhamentoConsulta(consulta);
}
private Medico escolheMedico(DadosAgendamentoConsulta dados) throws ValidacaoException {
if (dados.idMedico() != null && medicoRepository.existsById(dados.idMedico())) {
return medicoRepository.getReferenceById(dados.idMedico());
}
if (dados.especialidade() == null) {
throw new ValidacaoException("É obrigatório inserir a especialidade quando o médio não for escolhido!");
}
return medicoRepository.escolheMedicoAleatorioLivreNaData(dados.especialidade(), dados.data());
}
}