-- CAT database schema -- Schema only: this file creates and evolves structure, but inserts no data. -- Safe to run repeatedly on MariaDB. CREATE DATABASE IF NOT EXISTS cat CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE cat; CREATE TABLE IF NOT EXISTS participants ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, allergies TEXT NULL, role VARCHAR(50) NULL CHECK (role IN ('Tagesgast', 'Dauergast')), under_27 TINYINT(1) NOT NULL DEFAULT 0, password_hash VARCHAR(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS bookings ( id INT PRIMARY KEY AUTO_INCREMENT, participant_id VARCHAR(36) NOT NULL, type ENUM('Stay', 'Day') NOT NULL, accommodation_type VARCHAR(50) NULL, meal_preferences TEXT NULL, roommate_requests TEXT NULL, early_departure VARCHAR(32) NULL, other_notes TEXT NULL, is_paid TINYINT(1) NOT NULL DEFAULT 0, manual_total_price DECIMAL(10,2) NULL, total_price DECIMAL(10,2) NOT NULL DEFAULT 0.00, CONSTRAINT fk_bookings_participant FOREIGN KEY (participant_id) REFERENCES participants(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS admin_users ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(80) NOT NULL UNIQUE, email VARCHAR(255) NOT NULL, password_hash VARCHAR(255) NOT NULL, is_active TINYINT(1) NOT NULL DEFAULT 1, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS pricing_settings ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, setting_key VARCHAR(80) NOT NULL UNIQUE, price DECIMAL(10,2) NOT NULL DEFAULT 0.00, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Compatibility migrations for installations whose tables already exist. -- ADD COLUMN IF NOT EXISTS leaves existing columns and values untouched. ALTER TABLE participants ADD COLUMN IF NOT EXISTS name VARCHAR(255) NOT NULL, ADD COLUMN IF NOT EXISTS email VARCHAR(255) NULL, ADD COLUMN IF NOT EXISTS allergies TEXT NULL, ADD COLUMN IF NOT EXISTS role VARCHAR(50) NULL, ADD COLUMN IF NOT EXISTS under_27 TINYINT(1) NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS password_hash VARCHAR(255) NULL; ALTER TABLE bookings ADD COLUMN IF NOT EXISTS participant_id VARCHAR(36) NULL, ADD COLUMN IF NOT EXISTS type ENUM('Stay', 'Day') NULL, ADD COLUMN IF NOT EXISTS accommodation_type VARCHAR(50) NULL, ADD COLUMN IF NOT EXISTS meal_preferences TEXT NULL, ADD COLUMN IF NOT EXISTS roommate_requests TEXT NULL, ADD COLUMN IF NOT EXISTS early_departure VARCHAR(32) NULL, ADD COLUMN IF NOT EXISTS other_notes TEXT NULL, ADD COLUMN IF NOT EXISTS is_paid TINYINT(1) NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS manual_total_price DECIMAL(10,2) NULL, ADD COLUMN IF NOT EXISTS total_price DECIMAL(10,2) NOT NULL DEFAULT 0.00; ALTER TABLE admin_users ADD COLUMN IF NOT EXISTS username VARCHAR(80) NULL, ADD COLUMN IF NOT EXISTS email VARCHAR(255) NULL, ADD COLUMN IF NOT EXISTS password_hash VARCHAR(255) NULL, ADD COLUMN IF NOT EXISTS is_active TINYINT(1) NOT NULL DEFAULT 1, ADD COLUMN IF NOT EXISTS created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE pricing_settings ADD COLUMN IF NOT EXISTS setting_key VARCHAR(80) NULL, ADD COLUMN IF NOT EXISTS price DECIMAL(10,2) NOT NULL DEFAULT 0.00, ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; -- No participants, bookings, administrators, or pricing rows are inserted here. -- Create the first administrator and configure prices through the application.