diff --git a/.gitignore b/.gitignore index f4681a6..74af831 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ app/storage/latex/* # Database dumps *.sql +!deploy/mysql/init.sql backup/ # Temporary files diff --git a/deploy/mysql/init.sql b/deploy/mysql/init.sql new file mode 100755 index 0000000..7a01fb6 --- /dev/null +++ b/deploy/mysql/init.sql @@ -0,0 +1,90 @@ +-- ProostenKrant Database Schema +-- Dutch Family Newspaper System + +CREATE DATABASE IF NOT EXISTS proostenkrant; +USE proostenkrant; + +-- Users table (family members) +CREATE TABLE IF NOT EXISTS users ( + id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(50) NOT NULL UNIQUE, + display_name VARCHAR(100) NOT NULL, + profile_image VARCHAR(255), + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Seasons table +CREATE TABLE IF NOT EXISTS seasons ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(50) NOT NULL, + description TEXT, + start_date DATE NOT NULL, + end_date DATE NOT NULL, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Articles table +CREATE TABLE IF NOT EXISTS articles ( + id INT AUTO_INCREMENT PRIMARY KEY, + title VARCHAR(255) NOT NULL, + content TEXT NOT NULL, + author_id INT NOT NULL, + participants TEXT, -- Comma-separated list of user IDs + event_date DATE NOT NULL, + season_id INT, + article_image VARCHAR(255), + status ENUM('draft', 'published', 'archived') DEFAULT 'draft', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (season_id) REFERENCES seasons(id) ON DELETE SET NULL +); + +-- System settings table +CREATE TABLE IF NOT EXISTS settings ( + id INT AUTO_INCREMENT PRIMARY KEY, + key_name VARCHAR(100) NOT NULL UNIQUE, + value TEXT, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Insert default seasons +INSERT INTO seasons (name, description, start_date, end_date) VALUES +('Lente', 'Lente editie - Voorjaar', '2026-03-20', '2026-06-20'), +('Zomer', 'Zomer editie', '2026-06-21', '2026-09-22'), +('Herfst', 'Herfst editie', '2026-09-23', '2026-12-20'), +('Winter', 'Winter editie', '2026-12-21', '2026-03-19'); + +-- Insert default users (family members) +INSERT INTO users (username, display_name, profile_image) VALUES +('douwe', 'Douwe', NULL), +('pauline', 'Pauline', NULL), +('diede', 'Diede', NULL), +('dien', 'Dien', NULL), +('chris', 'Chris', NULL), +('geert', 'Geert', NULL), +('annick', 'Annick', NULL), +('cedric', 'Cedric', NULL), +('gunter', 'Gunter', NULL), +('daan', 'Daan', NULL), +('kyala', 'Kyala', NULL), +('michel', 'Michel', NULL), +('dries', 'Dries', NULL), +('pieter', 'Pieter', NULL), +('mathilde', 'Mathilde', NULL), +('kevin', 'Kevin', NULL), +('luc', 'Luc', NULL), +('tilde', 'Tilde', NULL); + +-- Insert universal password setting +INSERT INTO settings (key_name, value) VALUES +('universal_password', 'ProostenKrant2024!'); + +-- Create indexes for better performance +CREATE INDEX idx_articles_author ON articles(author_id); +CREATE INDEX idx_articles_season ON articles(season_id); +CREATE INDEX idx_articles_date ON articles(event_date); +CREATE INDEX idx_articles_status ON articles(status);