Initialize project with basic structure, including Docker configuration, backend and frontend setup, environment configuration, and essential files for development.
This commit is contained in:
108
backend/migrations/001_initial.sql
Normal file
108
backend/migrations/001_initial.sql
Normal file
@@ -0,0 +1,108 @@
|
||||
-- +mixmaker Up
|
||||
CREATE TABLE IF NOT EXISTS schema_migrations (
|
||||
version text PRIMARY KEY,
|
||||
applied_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE accounts (
|
||||
id text PRIMARY KEY,
|
||||
discord_id text NOT NULL UNIQUE,
|
||||
username text NOT NULL,
|
||||
avatar_url text NOT NULL DEFAULT '',
|
||||
role text NOT NULL CHECK (role IN ('admin', 'player')),
|
||||
created_at timestamptz NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE players (
|
||||
id text PRIMARY KEY,
|
||||
account_id text NOT NULL UNIQUE REFERENCES accounts(id),
|
||||
display_name text NOT NULL,
|
||||
tank_rating smallint NOT NULL CHECK (tank_rating BETWEEN 1 AND 40),
|
||||
damage_rating smallint NOT NULL CHECK (damage_rating BETWEEN 1 AND 40),
|
||||
support_rating smallint NOT NULL CHECK (support_rating BETWEEN 1 AND 40),
|
||||
preferred_roles jsonb NOT NULL DEFAULT '[]'::jsonb,
|
||||
preferred_player_ids jsonb NOT NULL DEFAULT '[]'::jsonb,
|
||||
created_at timestamptz NOT NULL,
|
||||
updated_at timestamptz NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE sessions (
|
||||
token_hash text PRIMARY KEY,
|
||||
account_id text NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
|
||||
expires_at timestamptz NOT NULL
|
||||
);
|
||||
CREATE INDEX sessions_expiry_idx ON sessions(expires_at);
|
||||
|
||||
CREATE TABLE events (
|
||||
id text PRIMARY KEY,
|
||||
name text NOT NULL,
|
||||
description text NOT NULL DEFAULT '',
|
||||
starts_at timestamptz NOT NULL,
|
||||
ends_at timestamptz NOT NULL,
|
||||
registration_deadline timestamptz NOT NULL,
|
||||
created_by text NOT NULL REFERENCES accounts(id),
|
||||
created_at timestamptz NOT NULL,
|
||||
updated_at timestamptz NOT NULL,
|
||||
CHECK (ends_at > starts_at),
|
||||
CHECK (registration_deadline <= starts_at)
|
||||
);
|
||||
|
||||
CREATE TABLE rsvps (
|
||||
event_id text NOT NULL REFERENCES events(id) ON DELETE CASCADE,
|
||||
player_id text NOT NULL REFERENCES players(id) ON DELETE CASCADE,
|
||||
status text NOT NULL CHECK (status IN ('Going', 'Maybe', 'NotGoing')),
|
||||
actor_account_id text NOT NULL REFERENCES accounts(id),
|
||||
source text NOT NULL CHECK (source IN ('player', 'admin')),
|
||||
updated_at timestamptz NOT NULL,
|
||||
PRIMARY KEY(event_id, player_id)
|
||||
);
|
||||
|
||||
CREATE TABLE teams (
|
||||
id text PRIMARY KEY,
|
||||
event_id text NOT NULL REFERENCES events(id) ON DELETE CASCADE,
|
||||
name text NOT NULL,
|
||||
captain_player_id text REFERENCES players(id),
|
||||
slots jsonb NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE rulesets (
|
||||
id text PRIMARY KEY,
|
||||
name text NOT NULL,
|
||||
body jsonb NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE series (
|
||||
id text PRIMARY KEY,
|
||||
tournament_id text NOT NULL DEFAULT '',
|
||||
body jsonb NOT NULL,
|
||||
version integer NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE tournaments (
|
||||
id text PRIMARY KEY,
|
||||
event_id text NOT NULL REFERENCES events(id) ON DELETE CASCADE,
|
||||
body jsonb NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE draft_states (
|
||||
id text PRIMARY KEY,
|
||||
kind text NOT NULL CHECK (kind IN ('map', 'hero', 'coin')),
|
||||
body jsonb NOT NULL,
|
||||
version integer NOT NULL DEFAULT 0,
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE audit_log (
|
||||
id bigserial PRIMARY KEY,
|
||||
actor_account_id text NOT NULL REFERENCES accounts(id),
|
||||
action text NOT NULL,
|
||||
subject_id text NOT NULL,
|
||||
payload jsonb NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX audit_subject_idx ON audit_log(subject_id, created_at);
|
||||
|
||||
-- +mixmaker Down
|
||||
DROP TABLE IF EXISTS audit_log, draft_states, tournaments, series, rulesets, teams,
|
||||
rsvps, events, sessions, players, accounts, schema_migrations CASCADE;
|
||||
Reference in New Issue
Block a user