feat(datenbank): Datenmodell mit Datenbankregeln und Seed (#003)

Alle Modelle fuer die fuenf Phasen in einer Migration, damit spaetere
Phasen keine Umbauten an Kerntabellen brauchen. Was auch an der
Service-Schicht vorbei gelten muss, steht als CHECK, partieller Index
oder Trigger in der Datenbank: Personen-Keys ohne Private Key, genau
ein Instanz-Deployment-Key, ein vertrauter Host-Key je Algorithmus,
shell-sichere Zielbenutzer und Pfade.

Das Protokoll ist append-only und per Hash-Kette verbunden; den Hash
berechnet ein Trigger, damit keine Zeile ohne Verkettung entstehen
kann (#005 baut darauf auf).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 09:12:06 +02:00
co-authored by Claude Opus 5.5
parent 224386106b
commit 03c7c45576
15 changed files with 1480 additions and 13 deletions
+21
View File
@@ -0,0 +1,21 @@
import { execFileSync } from "node:child_process";
import "dotenv/config";
/**
* Spielt vor dem Testlauf alle Migrationen in die Testdatenbank ein.
*
* Absichtlich gegen TEST_DATABASE_URL und nie gegen DATABASE_URL: die Hilfen in
* tests/hilfen/db.ts leeren vor jedem Test alle Tabellen.
*/
export default function vorbereiten(): void {
const url = process.env["TEST_DATABASE_URL"];
if (!url) {
throw new Error(
"TEST_DATABASE_URL fehlt (siehe .env.example). Datenbanktests brauchen eine eigene Datenbank.",
);
}
execFileSync("pnpm", ["exec", "prisma", "migrate", "deploy"], {
env: { ...process.env, DATABASE_URL: url },
stdio: "pipe",
});
}