46 lines
1.6 KiB
SQL
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';
|