96 lines
2.9 KiB
SQL
96 lines
2.9 KiB
SQL
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
version INTEGER PRIMARY KEY,
|
|
description TEXT NOT NULL,
|
|
applied_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS comments (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id TEXT,
|
|
username TEXT,
|
|
target_type TEXT NOT NULL,
|
|
target_id TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
likes INTEGER NOT NULL DEFAULT 0,
|
|
is_hidden INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_comments_target
|
|
ON comments(target_type, target_id, is_hidden, created_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS player_metadata (
|
|
steam_id_64 TEXT PRIMARY KEY,
|
|
notes TEXT,
|
|
tags TEXT NOT NULL DEFAULT '[]',
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS strategy_boards (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL,
|
|
map_name TEXT NOT NULL,
|
|
data_json TEXT NOT NULL,
|
|
created_by TEXT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS team_lineups (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
player_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
is_active INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_team_lineups_single_active
|
|
ON team_lineups(is_active)
|
|
WHERE is_active = 1;
|
|
|
|
CREATE TABLE IF NOT EXISTS wiki_pages (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
path TEXT NOT NULL UNIQUE,
|
|
title TEXT NOT NULL,
|
|
content TEXT NOT NULL DEFAULT '',
|
|
updated_by TEXT,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS etl_jobs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
job_type TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'queued'
|
|
CHECK (status IN ('queued', 'running', 'succeeded', 'failed')),
|
|
match_id TEXT,
|
|
input_path TEXT,
|
|
current_stage TEXT,
|
|
progress INTEGER NOT NULL DEFAULT 0
|
|
CHECK (progress >= 0 AND progress <= 100),
|
|
message TEXT,
|
|
log_text TEXT NOT NULL DEFAULT '',
|
|
created_by TEXT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
started_at TIMESTAMP,
|
|
finished_at TIMESTAMP,
|
|
duration_seconds REAL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_etl_jobs_created
|
|
ON etl_jobs(created_at DESC, id DESC);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_etl_jobs_status
|
|
ON etl_jobs(status, created_at);
|
|
|
|
CREATE TABLE IF NOT EXISTS match_imports (
|
|
match_id TEXT PRIMARY KEY,
|
|
content_sha256 TEXT NOT NULL,
|
|
source_path TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'queued',
|
|
job_id INTEGER,
|
|
imported_at TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (job_id) REFERENCES etl_jobs(id) ON DELETE SET NULL
|
|
);
|