import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PrismaClient } from '../generated/prisma/client'; import { PrismaPg } from '@prisma/adapter-pg'; /** * NestJS-managed Prisma service for Prisma 7. * * Follows the official NestJS + Prisma 7 recipe: * - Uses `prisma-client` generator with `moduleFormat = "cjs"` * - Extends PrismaClient directly for full type-safe API access * - Uses PrismaPg driver adapter with connectionString * * Usage in feature modules: * constructor(private readonly prisma: PrismaService) {} * await this.prisma.placeholder.findMany(); */ @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { constructor(configService: ConfigService) { const databaseUrl = configService.getOrThrow('DATABASE_URL'); const adapter = new PrismaPg({ connectionString: databaseUrl }); super({ adapter }); } async onModuleInit(): Promise { await this.$connect(); } async onModuleDestroy(): Promise { await this.$disconnect(); } }