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

[Projeto] Problema ao alterar o endereço

Olá.

Identifiquei que ao alterar o endereço na verdade estava criando um novo endereço no banco de dados. Então quando criei o endereço 1 e associei ao adotante 1, ao alterar o endereço do adotante, aparecia no banco o endereço 2 associado ao adotante 1 e o endereço 1 fica perdido no limbo.

Pra solucionar criei InterfaceEnderecoRepository, EnderecoRepository e o método atualizaEnderecoAdotante em AdotanteRepository ficou:

async atualizaEnderecoAdotante(idAdotante: number, endereco: EnderecoEntity): Promise<{ success: boolean; message?: string }> {
        const adotante = await this.repository.findOneBy({id:idAdotante});

        if(!adotante){
            return { success : false , message : "Adotante não encontrado!"};
        }
              
        if(!adotante.endereco){
            const novoEndereco = new EnderecoEntity(endereco.cidade,endereco.estado);
            adotante.endereco = novoEndereco;
            await this.repository.save(adotante);
        }else{
            const enderecoAtualizar = await this.enderecoRepository.findOneBy({id:adotante.endereco.id});
            if(!enderecoAtualizar){
                return { success : false , message : "Endereço não localizado!"};
            }
            Object.assign(enderecoAtualizar,endereco);
            await this.enderecoRepository.save(enderecoAtualizar);
        }
        return { success : true};
    }

Agora funciona adequadamente, quando passo um endereço a API identifica se é pra atualizar ou incluir um novo, evitando lixo no banco de dados.

O interessante foi perceber que a InterfaceEnderecoRepository e a EnderecoRepository não precisam existir para funcionar a atualização do endereço dessa maneira.

Há outra solução para resolver esse problema do "endereço órfão"?

2 respostas

Oii Leonardo, tudo bem?

Que bom que você conseguiu resolver o problema de criação de endereços órfãos no banco de dados. A solução que você implementou é bem robusta e cobre os principais casos de uso. Muito obrigada por compartilhar com a gente!

Pra responder à sua pergunta sobre outras possíveis soluções, uma abordagem alternativa que vejo que poderia ter, é usar transações para garantir que as operações de atualização sejam atômicas. Isso significa que todas as operações dentro de uma transação são executadas completamente ou nenhuma delas é executada, evitando inconsistências no banco de dados.

Um abraço e bons estudos.

solução!

Bom dia, Lorena. Vou pesquisar sobre. Obrigado.