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.
This commit is contained in:
Harlekin
2026-09-01 00:01:29 +02:00
parent 72c47e74a6
commit 8f0644e053
20 changed files with 9085 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
{
"name": "@afis/db",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"default": "./dist/index.js"
}
},
"scripts": {
"build": "prisma generate && tsc -p tsconfig.build.json",
"dev": "tsc -p tsconfig.build.json --watch",
"generate": "prisma generate",
"lint": "eslint src prisma --max-warnings 0",
"migrate": "prisma migrate dev",
"migrate:deploy": "prisma migrate deploy",
"seed": "tsx prisma/seed.ts",
"studio": "prisma studio",
"test": "vitest run --passWithNoTests",
"typecheck": "tsc --noEmit"
},
"prisma": {
"seed": "tsx prisma/seed.ts"
},
"dependencies": {
"@prisma/adapter-pg": "7.10.0",
"@prisma/client": "7.10.0",
"pg": "8.13.1"
},
"devDependencies": {
"@eslint/js": "^9.39.0",
"@prisma/config": "7.10.0",
"@types/pg": "^8.11.10",
"eslint": "9.39.5",
"prisma": "7.10.0",
"tsx": "4.20.6",
"typescript": "5.9.3",
"typescript-eslint": "^8.20.0",
"vitest": "4.1.11"
},
"files": [
"dist",
"prisma"
]
}