Workspace und Datenmodell
pnpm-Workspace mit web/, worker/, pdf/ und packages/db. Das Datenbankpaket ist eigenständig, weil Web-App und Worker denselben Prisma-Client brauchen. Schema nach docs/04-datenmodell.md, mit drei Abweichungen, die dort begründet sind: CaseParticipant bekommt einen eigenen Schlüssel statt eines zusammengesetzten mit NULL-Spalten, die Aktenzeichen laufen über CaseCounter statt über eine Sequenz pro Jahr, und ServiceHeartbeat kommt dazu, damit /api/health den Gateway-Zustand kennt, ohne Discord zu fragen. Die zweite Migration enthält, was Prisma nicht ausdrücken kann: - kein DELETE auf CaseEntry, CaseEntryVersion und AuditLog - authorId, createdAt, caseId und type eines Eintrags sind unveränderlich - an einer Eintragsversion darf nur minClearance angehoben werden - Volltextsuche mit deutscher Konfiguration; geschwärzte Bereiche werden vor dem Indizieren entfernt, sonst verrät ein Treffer den Inhalt - pg_notify bei Rollen- und Mapping-Änderungen Acht Tests prüfen diese Regeln gegen eine echte Postgres-Instanz, nicht gegen die Anwendungslogik. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
4446e3f0ac
commit
51984f17d4
@@ -0,0 +1,27 @@
|
||||
import { existsSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { defineConfig, env } from '@prisma/config'
|
||||
|
||||
// Prisma 7 lädt die .env nicht mehr selbst. Im Betrieb stehen die Werte
|
||||
// bereits in der Umgebung (Dockge-Reiter), lokal kommen sie aus der Datei.
|
||||
for (const candidate of [path.resolve('../../.env'), path.resolve('.env')]) {
|
||||
if (existsSync(candidate)) {
|
||||
process.loadEnvFile(candidate)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrationen laufen bewusst über DIRECT_DATABASE_URL, also an pgbouncer vorbei:
|
||||
* im Transaktionsmodus überstehen sie den Pool nicht. Siehe docs/11-betrieb.md.
|
||||
*/
|
||||
export default defineConfig({
|
||||
schema: path.join('prisma', 'schema.prisma'),
|
||||
migrations: {
|
||||
path: path.join('prisma', 'migrations'),
|
||||
seed: 'tsx prisma/seed.ts',
|
||||
},
|
||||
datasource: {
|
||||
url: env('DIRECT_DATABASE_URL'),
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user