-- Van's DIY & Bastelbedarf — echtes Bestellsystem (Phase 2). -- -- Ersetzt die Beispieldaten in /verwaltung/. Zwei Tabellen: eine Kopf-Tabelle pro Bestellung -- (orders) + eine Zeilen-Tabelle pro bestelltem Artikel (order_items) — bewusst normalisiert -- statt alles als ein JSON-Blob zu speichern, damit "meistverkaufte Produkte je Kategorie" -- eine echte, schnelle SQL-Auswertung ist (GROUP BY) statt jedes Mal alle Bestellungen im -- Code durchzuparsen. CREATE TABLE IF NOT EXISTS orders ( -- Interne, garantiert eindeutige numerische ID (SQLite AUTOINCREMENT) — die menschenlesbare -- Bestellnummer (z.B. "VDB-2026-0201") wird direkt nach dem Einfügen aus dieser ID abgeleitet -- (siehe functions/api/orders.js), dadurch nie eine Race Condition bei paralleler Bestellung. id INTEGER PRIMARY KEY AUTOINCREMENT, bestellnummer TEXT UNIQUE, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, -- bezahlt: Phase-1-Zahlung gilt sofort als erfolgreich (siehe scripts/account.ts-Kommentar zum -- selben Thema) · bearbeitung/versandVorbereitet/versendet/abgeschlossen: manuelle Pflege durch -- qciga/VanVan in /verwaltung/ · storniert: für echte Rückabwicklungen/Fehlbestellungen. status TEXT NOT NULL DEFAULT 'bezahlt' CHECK (status IN ('bezahlt', 'bearbeitung', 'versandVorbereitet', 'versendet', 'abgeschlossen', 'storniert')), kunde_name TEXT NOT NULL, kunde_email TEXT NOT NULL, land TEXT NOT NULL CHECK (land IN ('de', 'at', 'ch', 'lu')), strasse TEXT, plz TEXT, ort TEXT, zahlungsart TEXT, tracking TEXT, zwischensumme REAL NOT NULL DEFAULT 0, versandkosten REAL NOT NULL DEFAULT 0, rabatt_gesamt REAL NOT NULL DEFAULT 0, summe REAL NOT NULL DEFAULT 0, treuebonus_verwendet INTEGER NOT NULL DEFAULT 0, abo_rabatt_verwendet INTEGER NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS order_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id INTEGER NOT NULL REFERENCES orders(id) ON DELETE CASCADE, produkt_slug TEXT NOT NULL, name TEXT NOT NULL, kategorie_slug TEXT, menge INTEGER NOT NULL, preis REAL NOT NULL, gratis INTEGER NOT NULL DEFAULT 0 ); CREATE INDEX IF NOT EXISTS idx_order_items_order_id ON order_items(order_id); CREATE INDEX IF NOT EXISTS idx_orders_status ON orders(status); CREATE INDEX IF NOT EXISTS idx_orders_land ON orders(land); CREATE INDEX IF NOT EXISTS idx_orders_created_at ON orders(created_at);