Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Exception: Validador paciente ativo

****Estou tentando realizar a consulta no método agendar:

{ "idMedico": 1, "idPaciente": 2, "data": "2023-08-11T12:00:00" }

****Porem o retorno está caindo na exception do ValidadorPacienteAtivo:

Erro: Consulta não pode ser agendada para pacientes inativos!

Aqui está o meur Repository

@Repository
public interface PacientesRepository extends JpaRepository <PacientesEntity, Long> {
    @Query("""
            SELECT p.ativo 
            FROM PacientesEntity p
            WHERE
            p.id = :id
            """)
    Boolean findAtivoById(Long id);
}

Aqui está minha classe de validação

@Component
public class ValidadorPacienteAtivo implements Validador{
    @Autowired
    private PacientesRepository pacientesRepository;
    public void validar(DadosAgendamentoConsulta dados) {
        if(dados.idPaciente() == null) {
            return;
        }

        var pacienteAtivo = pacientesRepository.findAtivoById(dados.idPaciente());
        if(!pacienteAtivo) {
            throw new RuntimeException("Consulta não pode ser agendada para pacientes inativos!");
        }
    }
}

Aqui está minha entidade paciente

@Entity
@Table(name = "pacientes")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class PacientesEntity {
    @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 PacientesEntity(DadosCadastrosPacientes dadosPacientes) {
          this.nome = dadosPacientes.nome();
          this.email = dadosPacientes.email();
          this.telefone = dadosPacientes.telefone();
          this.cpf = dadosPacientes.cpf();
          this.endereco = new Endereco(dadosPacientes.endereco());
    }
    public void atualizarInformacoes(DadosAtualizacaoPacientes dadosPacientes) {
        if (dadosPacientes.nome() != null) {
            this.nome = dadosPacientes.nome();
        }
        if (dadosPacientes.telefone() != null) {
            this.telefone = dadosPacientes.telefone();
        }
        if (dadosPacientes.endereco() != null) {
            this.endereco.atualizarInformacoes(dadosPacientes.endereco());
        }
    }
    public void excluir() {this.ativo = false;}
}
3 respostas

Percebi que realmente meus pacientes estão sendo setados como inativos no banco

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Porém estou rodando a seguinte migration para que seja setado como true

Alter table pacientes add ativo tinyint; update pacientes set ativo = true;

Oi!

Na sua entidade Paciente você declarou o atributo ativo como boolean (primitivo) ao invés de Boolean e por isso o valor padrão será false. Altere o atributo para Boolean e checa no construtor se esse atributo está sendo setado para true.

solução!

Exato, consegui resolver professor! Obrigada