feat(datenbank): Datenmodell für Anmeldung, Bereiche und Audit
Benutzer mit Rolle, OIDC-Konten, Sitzungen, Passkeys samt kurzlebiger WebAuthn-Herausforderung, Bereiche mit Tageskapazität und Arbeitsfenster sowie ein unveränderlicher Audit-Eintrag je schreibender Aktion. Aufgabe und Zeitblock kommen mit M2 und M4, Kalenderkonto mit M3 — dann mit den Feldern, die der jeweilige Provider wirklich braucht. Prisma 7 nimmt die Verbindung nicht mehr aus dem Schema entgegen: die URL steht in prisma.config.ts, der Client bekommt den pg-Treiberadapter. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
de1f923767
commit
748d032f70
@@ -0,0 +1,31 @@
|
||||
import 'server-only'
|
||||
import { PrismaPg } from '@prisma/adapter-pg'
|
||||
import { PrismaClient } from '@/generated/prisma/client'
|
||||
|
||||
/**
|
||||
* Ein einziger Prisma-Client je Prozess. Im Entwicklungsbetrieb ueberlebt er
|
||||
* das Neuladen der Module, damit nicht bei jedem Speichern ein neuer
|
||||
* Verbindungspool entsteht.
|
||||
*/
|
||||
|
||||
const globalerBereich = globalThis as unknown as {
|
||||
prisma: PrismaClient | undefined
|
||||
}
|
||||
|
||||
function erzeugen(): PrismaClient {
|
||||
const verbindung = process.env.DATABASE_URL
|
||||
if (!verbindung) {
|
||||
throw new Error('DATABASE_URL ist nicht gesetzt.')
|
||||
}
|
||||
const adapter = new PrismaPg({ connectionString: verbindung })
|
||||
return new PrismaClient({
|
||||
adapter,
|
||||
log: process.env.NODE_ENV === 'development' ? ['warn', 'error'] : ['error'],
|
||||
})
|
||||
}
|
||||
|
||||
export const db: PrismaClient = globalerBereich.prisma ?? erzeugen()
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
globalerBereich.prisma = db
|
||||
}
|
||||
Reference in New Issue
Block a user