Estou com dificuldades para entender o seguinte:
Por que não fazemos igual no primeiro código? No caso, declarando um construtor public Medico(DadosListagemMedico dadosListagemMedico) na classe Medico?? Não entendi por que temos que criar um construtor no record DadosListagemMedico. Poderiam me explicar o que está sendo feito, de fato?
package med.voll.api.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.dto.medico.DadosCadastroMedico;
import med.voll.api.entity.enums.Especialidade;
@Entity
@Table(name = "medicos")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Medico {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
private String telefone;
private String crm;
@Enumerated(EnumType.STRING)
private Especialidade especialidade;
@Embedded
private Endereco endereco;
public Medico(DadosCadastroMedico dadosCadastroMedico) {
this.nome = dadosCadastroMedico.nome();
this.email = dadosCadastroMedico.email();
this.telefone = dadosCadastroMedico.telefone();
this.crm = dadosCadastroMedico.crm();
this.especialidade = dadosCadastroMedico.especialidade();
this.endereco = new Endereco(dadosCadastroMedico.endereco());
}
}
package med.voll.api.dto.medico;
import med.voll.api.entity.Medico;
import med.voll.api.entity.enums.Especialidade;
public record DadosListagemMedico(
String nome,
String email,
String crm,
Especialidade especialidade) {
public DadosListagemMedico(Medico medico) {
this(medico.getNome(), medico.getEmail(), medico.getCrm(), medico.getEspecialidade());
}
}