Decisão técnica - melhor abordagem para uma rota http que cria um cliente.
Definição de Padrões no Projeto
Me ajudem a tomar uma decisão, meu banco de dados está diagramado assim:
tabela de customers ---- > id
name
cpf
tabela de emails ---- > email
table
table_id
ou seja, a tabela de email é morfológica, assim como a de addresses e phones uso o knex para fazer as querys
Caso de uso: Cadastro de Cliente
Quando houver a necessidade de criar um cliente no banco de dados, mas alguns dos dados fornecidos pelo front-end não estejam presentes na tabela "customers", como por exemplo, emails, phones, addresses... precisamos decidir entre:
-
Fazer uma transação no Knex, incluindo todos os dados em todas as tabelas. Se algo der errado, faremos um rollback, ou seja, chamaremos apenas um método do repositório no serviço.
-
Criar apenas o registro do cliente e utilizar o padrão Observer para criar os outros registros, como se fosse um efeito dominó.
Comentário: Uma observação importante em relação à opção 2 é que a requisição HTTP ficará aguardando o Observer criar os registros de email, phone e addresses antes de retornar "true". Isso pode resultar em um tempo de resposta mais longo para o cliente, pois depende da eficiência do processo de criação desses registros adicionais.
outra questão, o observer não deve ser assincrono? tipo enviar um email, enviar um whatsapp para o cliente desejando boas vindas, não é certo esperar o observador executar algo para dar um resposta na req http, certo ?