Files
2026-10-22 00:28:49 +02:00

46 lines
1.6 KiB
SQL

CREATE TABLE show_live_states (
show_id TEXT PRIMARY KEY REFERENCES shows(id) ON DELETE CASCADE,
revision INTEGER NOT NULL DEFAULT 0 CHECK (revision >= 0),
current_usage_id TEXT REFERENCES piece_usages(id) ON DELETE SET NULL,
started_at_utc TEXT,
ended_at_utc TEXT,
presentation_usage_id TEXT REFERENCES piece_usages(id) ON DELETE SET NULL,
presentation_revision INTEGER NOT NULL DEFAULT 0 CHECK (presentation_revision >= 0),
updated_at_utc TEXT NOT NULL
);
CREATE TABLE live_usage_runs (
id TEXT PRIMARY KEY,
show_id TEXT NOT NULL REFERENCES shows(id) ON DELETE CASCADE,
usage_id TEXT NOT NULL REFERENCES piece_usages(id) ON DELETE CASCADE,
started_at_utc TEXT NOT NULL,
ended_at_utc TEXT,
CHECK (ended_at_utc IS NULL OR ended_at_utc >= started_at_utc)
);
CREATE UNIQUE INDEX idx_one_active_live_run_per_show
ON live_usage_runs(show_id) WHERE ended_at_utc IS NULL;
CREATE INDEX idx_live_runs_usage ON live_usage_runs(usage_id, started_at_utc);
CREATE TABLE live_commands (
show_id TEXT NOT NULL REFERENCES shows(id) ON DELETE CASCADE,
command_id TEXT NOT NULL,
action TEXT NOT NULL,
result_revision INTEGER NOT NULL CHECK (result_revision >= 0),
created_at_utc TEXT NOT NULL,
PRIMARY KEY (show_id, command_id)
);
CREATE TABLE presentation_access_tokens (
id TEXT PRIMARY KEY,
show_id TEXT NOT NULL REFERENCES shows(id) ON DELETE CASCADE,
token_hash TEXT NOT NULL UNIQUE,
created_at_utc TEXT NOT NULL,
revoked_at_utc TEXT
);
CREATE INDEX idx_presentation_tokens_show
ON presentation_access_tokens(show_id, revoked_at_utc);
UPDATE piece_usages SET status = 'open' WHERE status = 'current';