import { PrismaClient } from './generated/client.js' import { PrismaPg } from '@prisma/adapter-pg' import { loadEnvFromRepoRoot } from './loadEnv.js' /** * Der Client wird von Prisma als ECMAScript-Module nach `src/generated` * erzeugt (siehe prisma/schema.prisma) und von dort mitübersetzt. Dadurch * lässt er sich sauber weiterreichen, Enums inklusive, und er überlebt das * Bündeln der Container-Images. */ export * from './generated/client.js' export { loadEnvFromRepoRoot } export { resolveTestDatabaseUrl, switchToTestDatabase } from './testDatabase.js' /** * Erzeugt einen Prisma-Client. * * Prisma 7 spricht über einen Treiber-Adapter statt über eine eigene * Rust-Engine. Das passt hier doppelt: der `pg`-Treiber wird für * LISTEN/NOTIFY ohnehin gebraucht (siehe docs/06-chat-und-realtime.md), und * die Container-Images kommen ohne nachzuladende Binärdatei aus. * * Im Betrieb zeigt DATABASE_URL auf pgbouncer im Transaktionsmodus, deshalb * gehören `pgbouncer=true` und ein kleines Pool-Limit in die URL. * Siehe docs/09-performance-und-ux.md und docs/11-betrieb.md. */ export function createPrismaClient(url?: string): PrismaClient { if (!url) { loadEnvFromRepoRoot() url = process.env.DATABASE_URL } if (!url) throw new Error('Konfiguration unvollständig: DATABASE_URL fehlt') const adapter = new PrismaPg({ connectionString: url }) return new PrismaClient({ adapter, log: ['warn', 'error'], }) }