Quando não mandasse o id do médico era pra ele retornar uma mensagem dizendo para passar a especialidade, mas no meu não funciona nem um e nem outro, os dois dão erro 403 e mandam o seguinte erro no console:
2024-07-12T10:36:31.352-03:00 ERROR 18612 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null] with root cause
java.lang.IllegalArgumentException: The given id must not be null at org.springframework.util.Assert.notNull(Assert.java:204) ~[spring-core-6.0.2.jar:6.0.2]
segue a classe 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;
@Autowired
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 médico informada não existe!");
}
validadores.forEach(v -> v.validar(dados));
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var medico = medicoRepository.findById(dados.idMedico()).get();
if (medico == null){
throw new ValidacaoException("Não existe médico disponivel para essa data!");
}
var consulta = new Consulta(null, medico, paciente, dados.data(), null);
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());
}
}