Eai, Fernando!
Tudo bem?
Bom, pelo que eu entendi, a classe que realmente faz essa persistência de dados no banco é a própria "Medicos", as classes DTO'S, no caso os "Records", são usados como uma forma de manipular dados para a classe principal sem usar a própria classe, fazendo com que sejam usadas classes intermediárias para esse processo, assim como foi usado em "DadosCadastroMedico".
Então, acredito que a solução para seu problema, seria uma classe DTO que permita atualizar os campos informados acima.
Segue exemplo de uma classe Record usada para atualizar dados:
public record DadosAtualizacaoMedico(
@NotNull Long id,
... outros atribtos
String email,
DadosEndereco endereco) {
}
Essa classe DTO será usada na classe Medico para realizar essa atualização; A classe Medico é a representação da nossa tabela no banco de dados, nós usamos classes auxiliares para fazer as operações necessárias.
Segue o exemplo abaixo de como poderia ser essa alteração dos dados:
public void atualizarDados(@Valid DadosAtualizacaoMedico dados) {
... outras validações
if(dados.email() != null) this.email = dados.email();
if(dados.endereco() != null) this.endereco.atualizarEndereco(dados.endereco());
}
Veja que o mesmo foi feito acima para atualizar os dados de Endereco, um Record "DadosEndereco" é usado para receber os dados e realiza uma validação de quais campos foram atualizados dentro de um método na classe Endereco chamado atualizarEndereco:
public void atualizarEndereco(DadosEndereco dados) {
if(dados.logradouro() != null) this.logradouro = dados.logradouro();
if(dados.bairro() != null) this.bairro = dados.bairro();
if(dados.cep() != null) this.cep = dados.cep();
if(dados.numero() != null) this.numero = dados.numero();
if(dados.complemento() != null) this.complemento = dados.complemento();
if(dados.cidade() != null) this.cidade = dados.cidade();
if(dados.uf() != null) this.uf = dados.uf();
}
As classes records ou DTO's acima foram usada para receber os dados tanto do Médico quanto do Endereco, sem manipular diretamente a classe Médico ou Endereco. Utilizamos as classes DTO's, realizamos as operações necessárias, atualizamos as classes principais e após finalizar essas modificações, a classe que salvamos foi a "Medicos", nossa Entity que representa nossa tabela no banco de dados.
Espero que tenha ajudado a tirar essa dúvida, qualquer coisa pode mandar mensagem!
Ainda estou aprendendo, então, vamos juntos nessa jornada!