CREATE TABLE IF NOT EXISTS tenants ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, timezone TEXT NOT NULL DEFAULT 'Europe/Berlin', is_active INTEGER NOT NULL DEFAULT 1, created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NULL, role TEXT NOT NULL, email TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, is_active INTEGER NOT NULL DEFAULT 1, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS instructors ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, color TEXT NOT NULL, notes TEXT DEFAULT '', is_active INTEGER NOT NULL DEFAULT 1, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS lesson_types ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL, name TEXT NOT NULL, color TEXT NOT NULL, default_duration INTEGER NOT NULL, category TEXT NOT NULL, requirement_key TEXT DEFAULT NULL, is_billable INTEGER NOT NULL DEFAULT 0, is_counted INTEGER NOT NULL DEFAULT 0, is_rest_relevant INTEGER NOT NULL DEFAULT 0, fixed_duration INTEGER NOT NULL DEFAULT 0, sort_order INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS license_class_templates ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL, code TEXT NOT NULL, name TEXT NOT NULL, is_combination INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE (tenant_id, code), FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS license_template_requirements ( id INTEGER PRIMARY KEY AUTOINCREMENT, template_id INTEGER NOT NULL, requirement_key TEXT NOT NULL, label TEXT NOT NULL, required_units INTEGER NOT NULL, sort_order INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (template_id) REFERENCES license_class_templates (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS students ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL, template_id INTEGER NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, phone TEXT DEFAULT '', notes TEXT DEFAULT '', status TEXT NOT NULL DEFAULT 'active', created_at TEXT NOT NULL, updated_at TEXT NOT NULL, FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE, FOREIGN KEY (template_id) REFERENCES license_class_templates (id) ); CREATE TABLE IF NOT EXISTS student_requirement_snapshots ( id INTEGER PRIMARY KEY AUTOINCREMENT, student_id INTEGER NOT NULL, requirement_key TEXT NOT NULL, label TEXT NOT NULL, required_units INTEGER NOT NULL, sort_order INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (student_id) REFERENCES students (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS appointments ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL, student_id INTEGER DEFAULT NULL, instructor_id INTEGER NOT NULL, lesson_type_id INTEGER NOT NULL, title TEXT NOT NULL, category TEXT NOT NULL, start_at TEXT NOT NULL, end_at TEXT NOT NULL, units INTEGER NOT NULL DEFAULT 1, status TEXT NOT NULL DEFAULT 'planned', notes TEXT DEFAULT '', warning_acknowledged INTEGER NOT NULL DEFAULT 0, created_by INTEGER NOT NULL, updated_by INTEGER NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE, FOREIGN KEY (student_id) REFERENCES students (id) ON DELETE SET NULL, FOREIGN KEY (instructor_id) REFERENCES instructors (id), FOREIGN KEY (lesson_type_id) REFERENCES lesson_types (id), FOREIGN KEY (created_by) REFERENCES users (id), FOREIGN KEY (updated_by) REFERENCES users (id) ); CREATE TABLE IF NOT EXISTS appointment_units ( id INTEGER PRIMARY KEY AUTOINCREMENT, appointment_id INTEGER NOT NULL, requirement_key TEXT DEFAULT NULL, label TEXT DEFAULT NULL, units_counted INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL, FOREIGN KEY (appointment_id) REFERENCES appointments (id) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS settings ( id INTEGER PRIMARY KEY AUTOINCREMENT, tenant_id INTEGER NOT NULL, key_name TEXT NOT NULL, value TEXT NOT NULL, UNIQUE (tenant_id, key_name), FOREIGN KEY (tenant_id) REFERENCES tenants (id) ON DELETE CASCADE );