91 lines
4.1 KiB
SQL
91 lines
4.1 KiB
SQL
-- 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.
|