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

[Dúvida] Construtor Consulta

Olá, tudo bem?

Estou com um problema na hora de declarar a minha variável consulta dentro do método agendar da classe AgendaDeConsulta, onde mesmo criando o var medico e o var consulta ele da erro e pede para criar um construtor na Consulta (sendo que já existe o lombok com as anotações para isso).

Segue as classes:

AgendaDeConsulta

package med.voll.api.domain.consulta;

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;

@Service
public class AgendaDeConsultas {

    @Autowired
    private ConsultaRepository consultaRepository;

    @Autowired
    private MedicoRepository medicoRepository;

    @Autowired
    private PacienteRepository pacienteRepository;

    public void agendar(DadosAgendamentoConsulta dados) {
        var paciente = pacienteRepository.findById(dados.idPaciente());
        var medico = medicoRepository.findById(dados.idMedico());
        var consulta = new Consulta(null, medico, paciente, dados.data());
        consultaRepository.save(consulta);
    }

}

Consulta

package med.voll.api.domain.consulta;

import jakarta.persistence.*;
import lombok.*;
import med.voll.api.domain.medico.Medico;
import med.voll.api.domain.paciente.Paciente;

import java.time.LocalDateTime;
import java.util.Optional;

// Trecho de código suprimido

@Table(name = "consultas")
@Entity(name = "Consulta")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Consulta {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "medico_id")
    private Medico medico;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "paciente_id")
    private Paciente paciente;

    private LocalDateTime data;

}
4 respostas

Oi!

Confere se na tua classe DadosAgendamentoConsulta o atributo data é do tipo LocalDateTime.

Outra coisa, você está utilizando Eclipse como IDE? No Eclipse o Lombok não vem instalado por padrão.

Estou usando o IntelliJ IDE e o Lombok já está instaladoInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Classe DadosAgendamentoConsulta

package med.voll.api.domain.consulta;

import jakarta.validation.constraints.Future;
import jakarta.validation.constraints.NotNull;
import med.voll.api.domain.medico.Especialidade;

import java.time.LocalDateTime;

// Trecho de código suprimido

public record DadosAgendamentoConsulta(
        Long idMedico,

        @NotNull
        Long idPaciente,

        @NotNull
        @Future
        LocalDateTime data,

        Especialidade especialidade) {
}
solução!

Ah já vi o problema, no seu código para carregar o médico e o paciente pelo id você está chamando o método findById do repository, mas deveria ser o método getReferenceById

Nossa! Que gafe professor! KKKKKK, muito obrigado pela atenção!