1
resposta

Dúvida para validação entre entidades

Como poderia fazer uma validação de poder cadastrar apenas um produto caso o UUID exista no repository de usuários?

Eu tentei fazer baseado na implementação atual, mas se adiciono o UsuarioRepository nos providers do ProdutoModule, pelo que vi, é criado uma outra instância do repository de usuários e os dados são diferentes da instância do repository de UsuarioModule e qualquer validação falha.

No Angular sei que existe a possibilidade de passar o { provideIn: root } no Injectable para ter uma instância só. No Nest tem alguma estratégia parecida?

1 resposta

Olá, Danilo! Tudo bem com você? Espero que sim.

Desde já peço perdão pela demora em responder.

Para ter diferentes instâncias do repositório de usuários no ProdutoModule, você pode utilizar o recurso de escopo do Nest.js. O escopo permite que você defina como as instâncias dos seus serviços são criadas e compartilhadas dentro do módulo.

Uma opção é utilizar o escopo Scope.DEFAULT, que é o escopo padrão. Nesse caso, uma nova instância do serviço é criada a cada requisição. Para compartilhar a mesma instância entre os módulos, você pode utilizar o escopo Scope.REQUEST, que cria uma única instância do serviço por requisição.

No seu caso, você pode definir o escopo do serviço do repositório de usuários como Scope.REQUEST no módulo de usuários, e então injetar o mesmo serviço no módulo de produtos. Isso garantirá que você tenha acesso à mesma instância do repositório de usuários em ambos os módulos.

Aqui está um exemplo de como fazer isso:

// No módulo de usuários
@Module({
  providers: [
    {
      provide: UsuarioRepository,
      useClass: UsuarioRepository,
      scope: Scope.REQUEST, // Definindo o escopo como REQUEST
    },
  ],
  exports: [UsuarioRepository],
})
export class UsuarioModule {}

// No módulo de produtos
@Module({
  imports: [UsuarioModule],
  providers: [ProdutoService],
})
export class ProdutoModule {
  constructor(private usuarioRepository: UsuarioRepository) {}
}

Dessa forma, você terá acesso à mesma instância do UsuarioRepository tanto no módulo de usuários quanto no módulo de produtos.

Espero ter ajudado. Caso tenha mais dúvidas, estarei à disposição.

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software