45 lines
2.1 KiB
JavaScript
45 lines
2.1 KiB
JavaScript
/* =====================================================================
|
|
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"));
|
|
}
|