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 { 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); } }