35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
import { getDb } from "./db";
|
|
|
|
/**
|
|
* Stellt additive Schema-Änderungen sicher, ohne dass auf dem Server ein
|
|
* separater `prisma migrate`-Lauf nötig ist. Idempotent: fehlende Tabellen
|
|
* und Spalten werden genau einmal ergänzt, alles andere bleibt unangetastet.
|
|
* Best-effort: Fehler werden geloggt, der Start läuft trotzdem weiter.
|
|
*/
|
|
export async function ensureSchema(): Promise<void> {
|
|
try {
|
|
const db = getDb();
|
|
const tables = (await db.$queryRaw<{ name: string }[]>`SELECT name FROM sqlite_master WHERE type='table'`).map(
|
|
(t) => t.name
|
|
);
|
|
if (!tables.includes("AppSetting")) {
|
|
await db.$executeRaw`CREATE TABLE "AppSetting" ("key" TEXT NOT NULL PRIMARY KEY, "value" TEXT NOT NULL, "updatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP)`;
|
|
}
|
|
if (!tables.includes("HouseholdMember")) {
|
|
await db.$executeRaw`CREATE TABLE "HouseholdMember" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP)`;
|
|
await db.$executeRaw`CREATE UNIQUE INDEX "HouseholdMember_name_key" ON "HouseholdMember"("name")`;
|
|
}
|
|
const cols = (await db.$queryRaw<{ name: string }[]>`SELECT name FROM pragma_table_info('Voucher')`).map(
|
|
(c) => c.name
|
|
);
|
|
if (!cols.includes("providerDomain")) {
|
|
await db.$executeRaw`ALTER TABLE "Voucher" ADD COLUMN "providerDomain" TEXT`;
|
|
}
|
|
if (!cols.includes("createdBy")) {
|
|
await db.$executeRaw`ALTER TABLE "Voucher" ADD COLUMN "createdBy" TEXT`;
|
|
}
|
|
} catch (err) {
|
|
console.error("ensureSchema fehlgeschlagen (Start läuft weiter):", err);
|
|
}
|
|
}
|