1
resposta

Duvida sobre carrinho-helper

No caso da carrinho-helper que utiliza o prisma, como faria a implementação?

1 resposta

Oi, Everton.

Quando lidamos com classes utilitárias ou helpers que possuem dependências externas, como o Prisma, a lógica de injeção segue o mesmo princípio que aplicamos aos casos de uso e repositórios.

Para que o NestJS consiga gerenciar o carrinho-helper, ele precisa ser transformado em um provedor. Se ele utiliza o Prisma, ele depende de uma camada de infraestrutura.

Uma ideia de como fazer (você pode elaborar mais):

1. Tornar o Helper injetável

Primeiro, adicione o decorator @Injectable() na classe. No construtor, você deve injetar o serviço do Prisma (geralmente chamado de PrismaService).

import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/infra/database/prisma/prisma.service';

@Injectable()
export class CarrinhoHelper {
  constructor(private readonly prisma: PrismaService) {}

  // Exemplo de método que utiliza o prisma
  async calcularTotal(carrinhoId: string) {
    return this.prisma.carrinho.findUnique({
      where: { id: carrinhoId }
    });
  }
}

2. Configurar o módulo

Para que outros componentes consigam usar esse helper via injeção de dependência, você precisa declará-lo no módulo correspondente. Se o CarrinhoHelper for usado em vários lugares, você pode colocá-lo no CarrinhoModule.

@Module({
  providers: [CarrinhoHelper, PrismaService],
  exports: [CarrinhoHelper], // Exportar para que outros módulos o vejam
})
export class CarrinhoModule {}

3. Utilizar no caso de uso ou controller

Agora, em vez de instanciar o helper manualmente com new CarrinhoHelper(), você o solicita no construtor de onde for necessário:

@Injectable()
export class AdicionarItemCarrinhoCasoDeUso {
  constructor(
    private readonly carrinhoHelper: CarrinhoHelper,
    private readonly carrinhoRepositorio: ICarrinhoRepositorio
  ) {}

  async executar(dados: any) {
    // Uso do helper injetado
    const total = await this.carrinhoHelper.calcularTotal(dados.id);
    // ... restante da lógica
  }
}

Por que fazer assim?

  • Testabilidade: Se você precisar criar um teste unitário para o seu caso de uso, poderá substituir o CarrinhoHelper por um "mock" facilmente.
  • Gestão de instâncias: O NestJS garante que o PrismaService seja instanciado apenas uma vez (singleton) e passado corretamente para o helper.
  • Desacoplamento: Seu código para de se preocupar em "como criar" o objeto e foca apenas em "como usar" as funções dele.

Espero ter ajudado.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!