streamflix-api / src /shared /modules /prisma /prisma.service.ts
Akshar2325
feat(prisma): add SSL configuration for Supabase/Neon PostgreSQL adapter
1e3c043
Raw
History Blame
1.17 kB
import { INestApplication, Injectable, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { PrismaPg } from '@prisma/adapter-pg';
import { Pool } from 'pg';
@Injectable()
export class PrismaService implements OnModuleDestroy {
public prisma: PrismaClient;
constructor() {
// Prisma 7: Use adapter for Supabase/Neon PostgreSQL with SSL configuration
const isCloudDatabase =
process.env.DATABASE_URL?.includes('supabase') ||
process.env.DATABASE_URL?.includes('neon') ||
process.env.NODE_ENV === 'production';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: isCloudDatabase ? { rejectUnauthorized: false } : undefined,
});
const adapter = new PrismaPg(pool);
this.prisma = new PrismaClient({ adapter });
}
getClient(): PrismaClient {
return this.prisma;
}
async onModuleDestroy() {
await this.prisma.$disconnect();
}
async enableShutdownHooks(app: INestApplication) {
// Replace the Prisma beforeExit with Node.js process beforeExit
process.on('beforeExit', async () => {
await app.close();
});
}
}