new features
This commit is contained in:
84
backend/src/database/migrations/039_create_shop.sql
Normal file
84
backend/src/database/migrations/039_create_shop.sql
Normal file
@@ -0,0 +1,84 @@
|
||||
-- Migration 039: Internal Shop system
|
||||
-- Tables for catalog items, member requests, request line items, and order linking.
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
-- 1. Shop Artikel (Catalog Items)
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
CREATE TABLE IF NOT EXISTS shop_artikel (
|
||||
id SERIAL PRIMARY KEY,
|
||||
bezeichnung TEXT NOT NULL,
|
||||
beschreibung TEXT,
|
||||
kategorie TEXT,
|
||||
bild_pfad TEXT,
|
||||
geschaetzter_preis NUMERIC(10,2),
|
||||
aktiv BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
erstellt_von UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
erstellt_am TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
aktualisiert_am TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_artikel_kategorie ON shop_artikel(kategorie);
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_artikel_aktiv ON shop_artikel(aktiv);
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
-- 2. Shop Anfragen (Member Requests)
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
CREATE TABLE IF NOT EXISTS shop_anfragen (
|
||||
id SERIAL PRIMARY KEY,
|
||||
anfrager_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
status TEXT NOT NULL DEFAULT 'offen'
|
||||
CHECK (status IN ('offen','genehmigt','abgelehnt','bestellt','erledigt')),
|
||||
notizen TEXT,
|
||||
admin_notizen TEXT,
|
||||
bearbeitet_von UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
erstellt_am TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
aktualisiert_am TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_anfragen_anfrager ON shop_anfragen(anfrager_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_anfragen_status ON shop_anfragen(status);
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
-- 3. Shop Anfrage Positionen (Request Line Items)
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
CREATE TABLE IF NOT EXISTS shop_anfrage_positionen (
|
||||
id SERIAL PRIMARY KEY,
|
||||
anfrage_id INT NOT NULL REFERENCES shop_anfragen(id) ON DELETE CASCADE,
|
||||
artikel_id INT REFERENCES shop_artikel(id) ON DELETE SET NULL,
|
||||
bezeichnung TEXT NOT NULL,
|
||||
menge NUMERIC NOT NULL DEFAULT 1,
|
||||
notizen TEXT,
|
||||
erstellt_am TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_anfrage_positionen_anfrage ON shop_anfrage_positionen(anfrage_id);
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
-- 4. Shop Anfrage ↔ Bestellung Link
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
CREATE TABLE IF NOT EXISTS shop_anfrage_bestellung (
|
||||
anfrage_id INT NOT NULL REFERENCES shop_anfragen(id) ON DELETE CASCADE,
|
||||
bestellung_id INT NOT NULL REFERENCES bestellungen(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (anfrage_id, bestellung_id)
|
||||
);
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
-- 5. Auto-update triggers
|
||||
-- ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trg_shop_artikel_aktualisiert') THEN
|
||||
CREATE TRIGGER trg_shop_artikel_aktualisiert BEFORE UPDATE ON shop_artikel
|
||||
FOR EACH ROW EXECUTE FUNCTION update_aktualisiert_am();
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trg_shop_anfragen_aktualisiert') THEN
|
||||
CREATE TRIGGER trg_shop_anfragen_aktualisiert BEFORE UPDATE ON shop_anfragen
|
||||
FOR EACH ROW EXECUTE FUNCTION update_aktualisiert_am();
|
||||
END IF;
|
||||
END $$;
|
||||
Reference in New Issue
Block a user