Este meu if : de confirmação se paciente existe consulta no mesmo dia esta sempre disparando mesmo com a tabela consultas vasia.!@Component public class ValidadorPacienteSemOutraConsultaNoDia implements ValidadorDeAgendamento {
@Autowired
private ConsultaRepository repository;
public void validar(DadosAgendamentoConsulta dados) {
var dadosIdPaciente = dados.idPaciente();
var primeiraHora = dados.data().withHour(7).withMinute(0).withSecond(0);
var ultimaHora = dados.data().withHour(18).withMinute(59).withSecond(59);
boolean consulta = repository.existsByPacienteIdAndDataBetween(dadosIdPaciente, primeiraHora, ultimaHora);
if (consulta) {
System.out.println(dados.idPaciente() + "," + primeiraHora + "," + ultimaHora);
throw new ValidacaoException("Paciente já possui uma consulta agendada nesse dia");
}
}
} @Service public class AgendamentoDeConsultas { @Autowired private ConsultaRepository consultaRepository; @Autowired private PacienteRepository pacienteRepository; @Autowired private MedicoRepository medicoRepository; @Autowired private List validador;
public DadosDetalhamentoConsulta agendar(@Valid DadosAgendamentoConsulta dados) {
if(!pacienteRepository.existsById(dados.idPaciente())){
throw new ValidacaoException("Id do paciente informado não existe");
}
if(dados.idMedico() != null &&!medicoRepository.existsById(dados.idMedico())){
throw new ValidacaoException("Id do medico informado não existe");
}
validador.forEach(v-> v.validar(dados));
var medico_id = escolherMedico(dados);
if(medico_id== null){
throw new ValidacaoException("não existe medico disponivel nessa data!");
}
var paciente_id = pacienteRepository.getReferenceById(dados.idPaciente());
var consulta = new Consulta(null,medico_id, paciente_id, dados.data());
consultaRepository.save(consulta);
return new DadosDetalhamentoConsulta(consulta);
}
private Medico escolherMedico(@Valid DadosAgendamentoConsulta dados) {
if (dados.idMedico() != null) {
return medicoRepository.getReferenceById(dados.idMedico());
}
if (dados.especialidade() == null) {
throw new ValidacaoException("Especialidade é obrigadoria quando medico não foi escolhido");
}
return medicoRepository.EscolherMedicoAleatorioLivreNaData(dados.especialidade(), dados.data());
}
} @Getter @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode(of= "id") @Entity @Table(name ="consultas") public class Consulta { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name ="medico_id")
private Medico medico;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name ="paciente_id")
private Paciente paciente;
private LocalDateTime data;
}