1
resposta

Dúvida sobre Record

Usamos Record para representar classes simples e imutáveis que armazenam principalmente dados, correto? No caso da aula, o professor criou record que acompanha endereço e email...

Minha dúvida é: se o médico mudar de endereço e precisar alterar isso no sistema, como seria possível ele realizar essa mudança, sendo que a classe está definida como Record (imutável)?

1 resposta

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!