Quando tento salvar um agendamento estou recebendo o seguinte erro: Como eu percebi que o problema esta no paciente, seguem os códigos:
Classe Paciente Repository
public interface PacienteRepository extends JpaRepository<Paciente, Long> {
Page<Paciente> findAllByAtivoTrue(Pageable paginacao);
@Query("""
select p.ativo
from Paciente p
where
p.id = :id
""")
boolean findAtivoById(Long id);
}
Classe Paciente
@Getter
@EqualsAndHashCode(of = "id")
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "Paciente")
@Table(name = "Paciente")
public class Paciente {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
private String telefone;
private String cpf;
@Embedded
private Endereco endereco;
private Boolean ativo;
public Paciente(DadosCadastroPaciente dados) {
this.nome = dados.nome();
this.email = dados.email();
this.telefone = dados.telefone();
this.cpf = dados.cpf();
this.endereco = new Endereco(dados.endereco());
}
public void atualizarInformacoes(DadosAtualizacaoPaciente dados) {
if (dados.nome() != null) {
this.nome = dados.nome();
}
if (dados.email() != null) {
this.email = dados.email();
}
if (dados.telefone() != null) {
this.telefone = dados.telefone();
}
if (dados.endereco() != null) {
this.endereco.atualizarInformacoes(dados.endereco());
}
}
public void excluir() {
this.ativo = false;
}
}
Classe AgendaConsulta
//Classe onde esta a regra de negócio do agendamento
@Service
public class AgendaConsultas {
@Autowired
private ConsultaRespository consultaRespository;
@Autowired
private MedicoRepositroy medicoRepositroy;
@Autowired
private PacienteRepository pacienteRepository;
// Pega as classes de vaidação e injeta neste service
@Autowired
private List<ValidadorAgendamentoDeConsulta> validadores;
public DadosDetalhamentoConsulta agendar(DadosAgendamentoConsulta dados) {
// Verificando se o ID recebido do médico e paciente pelo usuário existe
if (!pacienteRepository.existsById(dados.idPaciente())) {
throw new ValidacaoException("O paciente informado não existe");
}
if (dados.idMedico() != null && !medicoRepositroy.existsById(dados.idMedico())) {
throw new ValidacaoException("Médico informado não existe");
}
// Pega as classes validadoras e percorre por todas elas (injeta todos os validadores)
validadores.forEach(v -> v.validar(dados));
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var medico = escolherMedico(dados);
var consulta = new Consulta(null, medico, paciente, dados.data(), null);
consultaRespository.save(consulta);
return new DadosDetalhamentoConsulta(consulta);
}
private Medico escolherMedico(DadosAgendamentoConsulta dados) {
if (dados.idMedico() == null) {
throw new ValidacaoException("É obrigatório adicionar um Médico");
} else
return medicoRepositroy.getReferenceById(dados.idMedico());
}
public void cancelar(DadosCancelamentoConsulta dados) {
if (!consultaRespository.existsById(dados.idConsulta())) {
throw new ValidacaoException("A consulta informada não existe!");
}
var consulta = consultaRespository.getReferenceById(dados.idConsulta());
consulta.cancelar(dados.motivoCancelamento());
}
}