3.7 KiB
3.7 KiB
Datenmodell & Beziehungen (Schema)
Das Datenbankschema besteht aus folgenden Tabellen im Schema public:
companies (Unternehmen)
- Repräsentiert die Partner-Unternehmen (Retailer).
id(UUID, Primary Key)name(TEXT)street,zip,city,email(Adressdaten)
users (Systembenutzer)
- Erweitert die Authentifizierungsdaten aus
auth.users. id(UUID, Referencesauth.users(id))role(TEXT, standardmäßig'partner', oder'admin')company_id(UUID, Referencespublic.companies(id))
end_customers (Endkunden)
- Die Endkunden, für die die Partner Lizenzen bestellen.
id(UUID, Primary Key)partner_id(UUID, Referencespublic.companies(id)) <-- Direkte Zuordnung zur Firma des Partnerscompany_name(TEXT)first_name,last_name,street,zip,city,email(Stammdaten)bank_iban,bank_bic,bank_name,bank_owner(Bankdaten)is_anonymized(BOOLEAN) <-- Für DSGVO-Löschung
categories (Kategorien)
- Steuert das Layout und Verhalten im Wizard.
id(UUID, Primary Key)name(TEXT)is_required(BOOLEAN) <-- Muss ausgewählt werdenallow_multiselect(BOOLEAN) <-- Mehrfachauswahl erlaubt (Checkbox statt Radio)sort_order(INTEGER) <-- Sortierung im Wizardshow_in_branches(BOOLEAN)preselect(BOOLEAN)resets_others(BOOLEAN)
products (Katalogprodukte / Basis-Editionen)
- Hauptlösungen (z.B. Basic-Kasse, Backoffice).
id(UUID, Primary Key)category_id(UUID, Referencescategories)name(TEXT)base_price(DECIMAL)tax_rate(DECIMAL)billing_interval(TEXT:'one_time'/'monthly')show_in_branches(BOOLEAN)allow_update_discount(BOOLEAN) <-- Berechtigung für Update-Rabatt
modules (Zusatzmodule / Erweiterungen)
- Optionale Erweiterungen für Produkte. Repräsentiert im TypeScript-Code durch das Interface
ProductModule. id(UUID, Primary Key)product_id(UUID, Referencesproducts)category_id(UUID, Referencescategories)name(TEXT)price(DECIMAL)has_quantity(BOOLEAN)
global_inclusions (Globale automatische Beigaben)
- Regelt, welche Module bei Auswahl eines Produkts kostenlos enthalten sind.
id(UUID, Primary Key)trigger_product_id(UUID, Referencesproducts)included_module_id(UUID, Referencesmodules)
global_exclusions (Globale Ausschlüsse)
- Regelt Inkompatibilitäten zwischen Produkten und/oder Modulen.
id(UUID, Primary Key)product_id(UUID, Referencesproducts)excluded_product_id(UUID, Referencesproducts, optional)excluded_module_id(UUID, Referencesmodules, optional)
orders (Bestellungen / Anfragen)
- Gespeicherte Snapshots von Konfigurationen.
id(UUID, Primary Key)user_id(UUID, Referencesauth.users(id))company_id(UUID, Referencespublic.companies(id))end_customer_id(UUID, Referencesend_customers(id))order_number(TEXT, Format:AE-YYYY-NNNNN)order_hash(TEXT, Idempotenz-Guard)type(TEXT:'purchase'/'subscription') <-- Wichtig für den Checkout-Splitpayment_method(TEXT) <-- Rechnung bei Kauf, SEPA bei Abototal_price(DECIMAL)customer_data(JSONB) <-- Stammdaten zum Bestellzeitpunktorder_data(JSONB) <-- Konfiguration zum Bestellzeitpunktpdf_url(TEXT)status(TEXT:'pending','active','completed','cancelled')created_at(TIMESTAMPTZ)
settings (Systemeinstellungen)
- Globale Shopeinstellungen (SMTP und LicServer).
id(TEXT, Primary Key, z.B.'licserver','smtp')host(TEXT)port(INTEGER)secure(BOOLEAN)user(TEXT)pass(TEXT)licserver_base_url(TEXT)licserver_api_key(TEXT)updated_at(TIMESTAMPTZ)