feat(db): Datenmodell, erste Migration und Seed (#003)
Prisma 7.10 mit Postgres-Adapter, 23 Modelle inklusive Rechnungen mit Positionen, Seed fuer Administrator, Warnregeln und Demo-Daten, Testdatenbank fuer Vitest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import { execFileSync } from "node:child_process";
|
||||
import { Client } from "pg";
|
||||
import "dotenv/config";
|
||||
|
||||
/**
|
||||
* Legt die Testdatenbank an (falls nötig) und spielt alle Migrationen ein.
|
||||
* Ohne `TEST_DATABASE_URL` werden die datenbankgestützten Tests übersprungen.
|
||||
*/
|
||||
export default async function setup() {
|
||||
const url = process.env.TEST_DATABASE_URL;
|
||||
if (!url) {
|
||||
console.warn("TEST_DATABASE_URL ist nicht gesetzt – Datenbanktests werden übersprungen.");
|
||||
return;
|
||||
}
|
||||
|
||||
const ziel = new URL(url);
|
||||
const datenbank = ziel.pathname.replace(/^\//, "");
|
||||
const verwaltung = new URL(url);
|
||||
verwaltung.pathname = "/postgres";
|
||||
|
||||
const client = new Client({ connectionString: verwaltung.toString() });
|
||||
await client.connect();
|
||||
const vorhanden = await client.query("SELECT 1 FROM pg_database WHERE datname = $1", [datenbank]);
|
||||
if (vorhanden.rowCount === 0) {
|
||||
// Datenbanknamen lassen sich nicht parametrisieren; er stammt aus der eigenen Konfiguration.
|
||||
await client.query(`CREATE DATABASE "${datenbank.replace(/"/g, "")}"`);
|
||||
}
|
||||
await client.end();
|
||||
|
||||
execFileSync("npx", ["prisma", "migrate", "deploy"], {
|
||||
env: { ...process.env, DATABASE_URL: url },
|
||||
stdio: "inherit",
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user