Rodrigo, tudo blz?
Estudando aqui, verifiquei que tem um pequeno problema na validação do horário de funcionamento da clínica.
**public class ValidadorHorarioFuncionamentoClinica implements ValidadorAgendamentoDeConsulta {
public void validar(DadosAgendamentoConsulta dados) {
var dataConsulta = dados.data();
var domingo = dataConsulta.getDayOfWeek().equals(DayOfWeek.SUNDAY);
var antesDaAberturaDaClinica = dataConsulta.getHour() < 7;
var depoisDoEncerramentoDaClinica = dataConsulta.getHour() > 18;
if (domingo || antesDaAberturaDaClinica || depoisDoEncerramentoDaClinica) {
throw new ValidacaoException("Consulta fora do horário de funcionamento da clínica");
}
}
}**
Nessa validação - var depoisDoEncerramentoDaClinica = dataConsulta.getHour() > 18; - os minutos são descartados, mas no endpoint da chamada para agendar uma consulta, o* json aceita na data do agendamento hora e minutos*. Se for enviado uma hora como 18:59, o validador falha e deixa marcar uma consulta as 18:59, praticamente no fechameto da clínica.
{ "idMedico": 9, "idPaciente": 4, "data": "2023-09-21T18:59" }
Implementei essa alteração pra evitar o problema, não sei se é a melhor.
**//assim não deixa agendar as 18:59 var horaConsulta = dataConsulta.getHour() + (dataConsulta.getMinute()/60.0); var depoisDoEncerramentoDaClinica = horaConsulta > 18.0; **
Entretanto, acho que a solução melhor seria validar o horário de marcação sempre com hora fechada, já que, pelas regras, as consultas têm duração de 1h, e começa o atendimento as 07h. Então, as consultas só poderiam ser agendadas sempre as 07h, 08h, 09h, 10h e assim por diante.
Assim, poderia ser criado um outro validador para bloquear horário inválido, como no caso de ser enviado uma hora tipo 15:20, daria a msg "Horário inválido", já que marcando uma consulta as 15:20, ela, em tese, terminaria as 16:20, impactando na próxima consulta das 16:00.
O que vc acha? qual seria a melhor solução?
Obrigado!