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

[Dúvida] Validador ValidadorHorarioFuncionamentoClinica

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!

1 resposta
solução!

Olá, Aélio!

Sua observação é muito pertinente e mostra que você está realmente compreendendo e aplicando os conceitos do curso. Parabéns!

Sobre a validação do horário de funcionamento da clínica, você está correto. A validação atual não leva em consideração os minutos, o que pode permitir agendamentos em horários inadequados.

A solução que você propôs, de considerar os minutos na validação, é uma boa alternativa. Com essa alteração, o horário de encerramento da clínica será respeitado de maneira mais precisa.

//assim não deixa agendar as 18:59
var horaConsulta = dataConsulta.getHour() + (dataConsulta.getMinute()/60.0);
var depoisDoEncerramentoDaClinica = horaConsulta > 18.0;

No entanto, sua segunda sugestão, de validar o horário de marcação sempre com hora fechada, também é muito interessante. Isso evita possíveis conflitos de horários e garante que todas as consultas tenham a duração correta.

Para implementar essa validação, você poderia verificar se os minutos da consulta são iguais a zero. Se não forem, a consulta está sendo agendada em um horário inválido.

var horarioInvalido = dataConsulta.getMinute() != 0;

if (horarioInvalido) {
    throw new ValidacaoException("Horário inválido");
}

Ambas as soluções têm seus méritos e podem ser utilizadas de acordo com as necessidades da clínica. Talvez uma combinação das duas possa ser a melhor opção: validar tanto o horário de funcionamento da clínica quanto o horário de marcação das consultas.

Espero ter ajudado e bons estudos!