M3 SaaS-Basis mit Default-Tenant vorbereiten
- Tenant/User/Membership/Participant-Tabellen additiv migrieren - Default-Tenant-Backfill fuer Legacy-Mitarbeiter und Admins ergaenzen - M3-Kontrollskript und Plan-Dokumentation aktualisieren
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
CREATE TABLE IF NOT EXISTS tenants (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
slug VARCHAR(100) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'active',
|
||||
timezone VARCHAR(100) NOT NULL DEFAULT 'Europe/Berlin',
|
||||
locale VARCHAR(20) NOT NULL DEFAULT 'de-DE',
|
||||
currency_code CHAR(3) NOT NULL DEFAULT 'EUR',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_tenants_slug (slug),
|
||||
KEY idx_tenants_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tenant_settings (
|
||||
tenant_id INT PRIMARY KEY,
|
||||
mark_price_cents INT NOT NULL DEFAULT 20,
|
||||
self_entry_enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||||
paypal_enabled TINYINT(1) NOT NULL DEFAULT 0,
|
||||
paypal_url_template VARCHAR(1000) NOT NULL DEFAULT '',
|
||||
sheet_window_days INT NOT NULL DEFAULT 100,
|
||||
negative_warning_cents INT NOT NULL DEFAULT -1000,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_tenant_settings_tenant
|
||||
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
email VARCHAR(255) NOT NULL,
|
||||
email_norm VARCHAR(255) NOT NULL,
|
||||
display_name VARCHAR(255) NOT NULL,
|
||||
password_hash VARCHAR(255) NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'active',
|
||||
email_verified_at DATETIME NULL,
|
||||
mfa_enabled TINYINT(1) NOT NULL DEFAULT 0,
|
||||
disabled_at DATETIME NULL,
|
||||
last_login_at DATETIME NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_users_email_norm (email_norm),
|
||||
KEY idx_users_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tenant_memberships (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
tenant_id INT NOT NULL,
|
||||
user_id INT NOT NULL,
|
||||
role VARCHAR(30) NOT NULL DEFAULT 'member',
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'active',
|
||||
invited_at DATETIME NULL,
|
||||
joined_at DATETIME NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_tenant_memberships_tenant_user (tenant_id, user_id),
|
||||
KEY idx_tenant_memberships_user (user_id),
|
||||
KEY idx_tenant_memberships_tenant_role_status (tenant_id, role, status),
|
||||
CONSTRAINT fk_tenant_memberships_tenant
|
||||
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_tenant_memberships_user
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS participants (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
tenant_id INT NOT NULL,
|
||||
user_id INT NULL,
|
||||
display_name VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(255) NULL,
|
||||
email_norm VARCHAR(255) NULL,
|
||||
paypal_name VARCHAR(255) NULL,
|
||||
active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
legacy_mitarbeiter_id INT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_participants_tenant_legacy (tenant_id, legacy_mitarbeiter_id),
|
||||
UNIQUE KEY uq_participants_tenant_email_norm (tenant_id, email_norm),
|
||||
UNIQUE KEY uq_participants_tenant_user (tenant_id, user_id),
|
||||
KEY idx_participants_tenant_active_name (tenant_id, active, display_name),
|
||||
KEY idx_participants_tenant_paypal_name (tenant_id, paypal_name),
|
||||
KEY idx_participants_user (user_id),
|
||||
CONSTRAINT fk_participants_tenant
|
||||
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_participants_user
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
Reference in New Issue
Block a user