68 lines
2.3 KiB
SQL
68 lines
2.3 KiB
SQL
CREATE TABLE IF NOT EXISTS players (
|
|
id SERIAL PRIMARY KEY,
|
|
first_name TEXT NOT NULL,
|
|
last_name TEXT NOT NULL,
|
|
email TEXT UNIQUE,
|
|
ranking INTEGER DEFAULT 0,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tournaments (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
location TEXT,
|
|
start_date DATE NOT NULL,
|
|
end_date DATE NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS enrollments (
|
|
player_id INTEGER NOT NULL REFERENCES players(id) ON DELETE CASCADE,
|
|
tournament_id INTEGER NOT NULL REFERENCES tournaments(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (player_id, tournament_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS teams (
|
|
id SERIAL PRIMARY KEY,
|
|
player1_id INTEGER NOT NULL REFERENCES players(id) ON DELETE CASCADE,
|
|
player2_id INTEGER NOT NULL REFERENCES players(id) ON DELETE CASCADE,
|
|
tournament_id INTEGER REFERENCES tournaments(id) ON DELETE CASCADE,
|
|
UNIQUE(player1_id, player2_id, tournament_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS matches (
|
|
id SERIAL PRIMARY KEY,
|
|
tournament_id INTEGER NOT NULL REFERENCES tournaments(id) ON DELETE CASCADE,
|
|
court TEXT,
|
|
round TEXT,
|
|
scheduled_at TIMESTAMP WITH TIME ZONE,
|
|
team_a_id INTEGER REFERENCES teams(id) ON DELETE SET NULL,
|
|
team_b_id INTEGER REFERENCES teams(id) ON DELETE SET NULL,
|
|
score_a INTEGER DEFAULT 0,
|
|
score_b INTEGER DEFAULT 0,
|
|
status TEXT DEFAULT 'scheduled' -- scheduled|playing|finished
|
|
);
|
|
|
|
-- Demo data
|
|
INSERT INTO players (first_name, last_name, email, ranking)
|
|
VALUES
|
|
('Flore', 'Van den Broeck', 'flore@example.com', 200),
|
|
('Karim', 'Hassan', 'karim@example.com', 210),
|
|
('Félicie', 'Hassan', 'felicie@example.com', 350),
|
|
('Balthazar', 'Hassan', 'balthazar@example.com', 400)
|
|
ON CONFLICT (email) DO NOTHING;
|
|
|
|
INSERT INTO tournaments (name, location, start_date, end_date)
|
|
SELECT 'Super Sunday - Demo', 'Les Églantiers, WSP', CURRENT_DATE, CURRENT_DATE
|
|
WHERE NOT EXISTS (SELECT 1 FROM tournaments WHERE name='Super Sunday - Demo');
|
|
|
|
-- auto-enroll demo players
|
|
DO $$
|
|
DECLARE t_id INT; p INT;
|
|
BEGIN
|
|
SELECT id INTO t_id FROM tournaments WHERE name='Super Sunday - Demo';
|
|
FOR p IN SELECT id FROM players LOOP
|
|
INSERT INTO enrollments(player_id, tournament_id) VALUES (p, t_id)
|
|
ON CONFLICT DO NOTHING;
|
|
END LOOP;
|
|
END $$; |