1
resposta

java.lang.IllegalArgumentException ao salvar agendamento

Quando tento salvar um agendamento estou recebendo o seguinte erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeComo 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());
    }
}
1 resposta

Oi Natali!

Posta o resto da exception, pois não deu para identificar o problema.