Add idempotent schema-only database definition
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
-- 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,
|
||||
other_notes TEXT NULL,
|
||||
is_paid TINYINT(1) NOT NULL DEFAULT 0,
|
||||
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 other_notes TEXT NULL,
|
||||
ADD COLUMN IF NOT EXISTS is_paid TINYINT(1) NOT NULL DEFAULT 0,
|
||||
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.
|
||||
Reference in New Issue
Block a user