Na hora de fazer o agendamento não está funcionando pois diz que o ID do paciente está nulo, vou deixar o erro e o codigo a baixo:
Erro:
Codigo:
public record DadosAgendamentoConsulta(
Long idMedico,
@NotNull Long idPaciente,
@NotNull @Future LocalDateTime data,
Especialidade especialidade) {
}
public record DadosDetalhamentoConsulta(Long id, Long idMedico, Long idPaciente, LocalDateTime data) {
public DadosDetalhamentoConsulta(Consulta consulta) {
this(consulta.getId(), consulta.getMedico().getId(), consulta.getPaciente().getId(), consulta.getData());
}
}
@RestController
@RequestMapping("consultas")
public class ConsultaController {
@Autowired
private AgendaDeConsultas consultas;
@PostMapping
@Transactional
public ResponseEntity agendar(@RequestBody @Valid DadosAgendamentoConsulta dados) {
System.out.println("1- " + dados);
var dto = consultas.agendar(dados);
return ResponseEntity.ok(dto);
}
@DeleteMapping
@Transactional
public ResponseEntity cancelar(@RequestBody @Valid DadosCancelamentoConsulta dados) {
consultas.cancelar(dados);
return ResponseEntity.noContent().build();
}
}
@Service
public class AgendaDeConsultas {
@Autowired
private ConsultaRepository consultaRepository;
@Autowired
private MedicoRepository medicoRepository;
@Autowired
private PacienteRepository pacienteRepository;
@Autowired
private List<IValidador> validadores;
public DadosDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados) {
System.out.println(dados);
if (!pacienteRepository.existsById(dados.idPaciente())) {
throw new ValidacaoExeption("ID do paciente informado não existe!");
}
if (dados.idMedico() != null && !medicoRepository.existsById(dados.idMedico())) {
throw new ValidacaoExeption("ID do medico informado não existe!");
}
validadores.forEach(v -> v.validar(dados));
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var medico = escolherMedico(dados);
if (medico == null) {
throw new ValidacaoExeption("Não existe medicos disponiveis para consulta nesse momento,tente mais tarde!");
}
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 ValidacaoExeption("Especialidade é obrigatoria quando o medico não for escolhido");
}
return medicoRepository.escolherMedicoAleatorio(dados.especialidade(),dados.data());
}
public void cancelar(DadosCancelamentoConsulta dados) {
if (!consultaRepository.existsById(dados.idConsulta())) {
throw new ValidacaoExeption("ID informado não existe!");
}
var consulta = consultaRepository.getReferenceById(dados.idConsulta());
consulta.cancelar(dados.motivo());
}
}