/* ===================================================================== db.js — SQLite-Datenbank (better-sqlite3), Ersatz für Cloudflare D1. D1 ist selbst schon SQLite unter der Haube — deshalb funktioniert das bestehende Schema (../d1/schema.sql) unverändert. WICHTIG: ../d1/schema.sql ist bereits der KONSOLIDIERTE Endzustand (enthält gutschein_code, paypal_order_id, customers-Tabelle direkt) — die migration-*.sql-Dateien daneben waren einmalige ALTER-TABLE-Schritte für die SCHON LAUFENDE alte D1-Datenbank und dürfen auf einer frischen Datenbank NICHT nochmal ausgeführt werden (migration-0002 würde z.B. mit "duplicate column name" fehlschlagen, weil schema.sql die Spalte schon enthält). Deshalb hier bewusst NUR schema.sql. Echte, bestehende Bestelldaten aus der alten D1-Datenbank werden separat importiert (siehe import-d1-daten.js), nicht über die Migrationsdateien. Der Datenbank-Ordner liegt außerhalb des Programmcodes (siehe DB_PATH), damit ein Update des Servers (z.B. "git pull") niemals die echten Bestelldaten anfassen kann. ===================================================================== */ import Database from "better-sqlite3"; import { readFileSync, existsSync, mkdirSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); // Überschreibbar über die Umgebungsvariable DB_PATH (siehe .env) — Standard: eigener, // vom Programmcode getrennter Datenordner. const DB_PATH = process.env.DB_PATH || "/var/lib/vandiy-shop/vandiy-shop.db"; const D1_ORDNER = join(__dirname, "..", "d1"); mkdirSync(dirname(DB_PATH), { recursive: true }); export const db = new Database(DB_PATH); db.pragma("journal_mode = WAL"); // bessere Nebenläufigkeit bei gleichzeitigen Lese-/Schreibzugriffen db.pragma("foreign_keys = ON"); function fuehreSqlDateiAus(pfad) { if (!existsSync(pfad)) return; const sql = readFileSync(pfad, "utf-8"); db.exec(sql); } export function initDb() { fuehreSqlDateiAus(join(D1_ORDNER, "schema.sql")); }