No caso da carrinho-helper que utiliza o prisma, como faria a implementação?
No caso da carrinho-helper que utiliza o prisma, como faria a implementação?
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):
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 }
});
}
}
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 {}
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
}
}
CarrinhoHelper por um "mock" facilmente.PrismaService seja instanciado apenas uma vez (singleton) e passado corretamente para o helper.Espero ter ajudado.