Estou recebendo os seguintes erros no log do programa ao tentar cadastrar a consulta no insomnia:
Hibernate: select u1_0.id, u1_0.login, u1_0.senha from usuarios u1_0 where u1_0.login=? Hibernate: select count() from pacientes p1_0 where p1_0.id=? Hibernate: select count() from medicos m1_0 where m1_0.id=? 2024-07-09T07:21:20.962-03:00 ERROR 8404 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "java.util.List.forEach(java.util.function.Consumer)" because "this.validadores" is null] with root cause
java.lang.NullPointerException: Cannot invoke "java.util.List.forEach(java.util.function.Consumer)" because "this.validadores" is null at med.voll.api.domain.consulta.AgendaDeConsultas.agendar(AgendaDeConsultas.java:37) ~[classes/:na] at med.voll.api.controller.ConsultaController.agendar(ConsultaController.java:27) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.2.jar:6.0.2] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.0.2.jar:6.0.2] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.0.2.jar:6.0.2]...
as classes mencionadas, AgendaDeConsultas:
package med.voll.api.domain.consulta;
import med.voll.api.controller.DadosCancelamentoConsulta; import med.voll.api.domain.ValidacaoException; import med.voll.api.domain.consulta.validacoes.ValidadorAgendamentoDeConsulta; import med.voll.api.domain.medico.Medico; import med.voll.api.domain.medico.MedicoRepository; import med.voll.api.domain.paciente.PacienteRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
import java.util.List;
@Service public class AgendaDeConsultas {
@Autowired
private ConsultaRepository consultaRepository;
@Autowired
private MedicoRepository medicoRepository;
@Autowired
private PacienteRepository pacienteRepository;
private List<ValidadorAgendamentoDeConsulta> validadores;
public DadosDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados){
if (!pacienteRepository.existsById(dados.idPaciente())){
throw new ValidacaoException("Id do paciente informada não existe!");
}
if (dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())){
throw new ValidacaoException("Id do paciente informada não existe!");
}
validadores.forEach(v -> v.validar(dados));
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var medico = medicoRepository.findById(dados.idMedico()).get();
var consulta = new Consulta(null, medico, paciente, dados.data());
consultaRepository.save(consulta);
return new DadosDetalhamentoConsulta(consulta);
}
private Medico escolherMedico(DadosAgendamentoConsulta dados){
if (dados.idMedico() != null){
return medicoRepository.getReferenceById(dados.idMedico());
}
if (dados.especialidade() == null){
throw new ValidacaoException("Especialidade é obrigatória quando o médico não é escolhido!");
}
return medicoRepository.escolherMedicoAleatorioLivreNaData(dados.especialidade(), dados.data());
}
public void cancelar(DadosCancelamentoConsulta dados) {
if (!consultaRepository.existsById(dados.idConsulta())){
throw new ValidacaoException("Id da consulta não existe!");
}
var consulta = consultaRepository.getReferenceById(dados.idConsulta());
consulta.cancelar(dados.motivo());
}
}