-- Schema for clue_hunt.db -- Drop tables if they exist DROP TABLE IF EXISTS team_clues; DROP TABLE IF EXISTS clues; DROP TABLE IF EXISTS users; DROP TABLE IF EXISTS teams; DROP TABLE IF EXISTS game_settings; DROP TABLE IF EXISTS hunts; -- Create teams table CREATE TABLE teams ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, code TEXT NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create users table CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, role TEXT DEFAULT 'user', team_id INTEGER, FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE SET NULL ); -- Create clues table CREATE TABLE clues ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, description TEXT NOT NULL, location TEXT NOT NULL, qr_code TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create team_clues table (for tracking which teams have found which clues) CREATE TABLE team_clues ( team_id INTEGER NOT NULL, clue_id INTEGER NOT NULL, found_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (team_id, clue_id), FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE, FOREIGN KEY (clue_id) REFERENCES clues(id) ON DELETE CASCADE ); -- Create hunts table CREATE TABLE hunts ( id INTEGER PRIMARY KEY AUTOINCREMENT, active BOOLEAN DEFAULT 0, start_time DATETIME DEFAULT NULL, end_time DATETIME DEFAULT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Insert a default hunt row INSERT INTO hunts (active) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM hunts LIMIT 1); -- Insert initial admin user INSERT INTO users (username, password, role) VALUES ('admin', '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy', 'admin'); -- Password is 'password123' - change this in production! -- Insert sample teams INSERT INTO teams (name, code) VALUES ('Team Alpha', 'ALPHA123'); INSERT INTO teams (name, code) VALUES ('Team Beta', 'BETA456'); INSERT INTO teams (name, code) VALUES ('Team Gamma', 'GAMMA789'); -- Insert sample clues INSERT INTO clues (title, description, location, qr_code) VALUES ('Clue 1', 'Find the red door', 'Location 1', 'QR1'); INSERT INTO clues (title, description, location, qr_code) VALUES ('Clue 2', 'Look under the bridge', 'Location 2', 'QR2'); INSERT INTO clues (title, description, location, qr_code) VALUES ('Clue 3', 'Check the library', 'Location 3', 'QR3');