Release 0.6.0

This commit is contained in:
hnzio committed 2026-10-25 09:45:31 +01:00
1 parent fd47910d09
commit b80dded55d
40 files changed
+4080 -856

No files matched your search

@@ -0,0 +1,115 @@
ALTER TABLE shows ADD COLUMN completed_at_utc TEXT;
ALTER TABLE show_sections ADD COLUMN category_name_snapshot TEXT;
ALTER TABLE show_sections ADD COLUMN category_color_snapshot TEXT;
CREATE TABLE show_finalizations (
show_id TEXT PRIMARY KEY REFERENCES shows(id) ON DELETE CASCADE,
command_id TEXT NOT NULL,
source_revision INTEGER NOT NULL CHECK (source_revision >= 1),
finalized_by_user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
finalized_at_utc TEXT NOT NULL,
UNIQUE (show_id, command_id)
);
CREATE TABLE show_finalization_archived_pieces (
show_id TEXT NOT NULL REFERENCES show_finalizations(show_id) ON DELETE CASCADE,
piece_id TEXT NOT NULL REFERENCES pieces(id) ON DELETE RESTRICT,
PRIMARY KEY (show_id, piece_id)
);
CREATE TABLE piece_usage_history (
usage_id TEXT PRIMARY KEY REFERENCES piece_usages(id) ON DELETE RESTRICT,
show_id TEXT NOT NULL REFERENCES shows(id) ON DELETE RESTRICT,
original_piece_id TEXT NOT NULL REFERENCES pieces(id) ON DELETE RESTRICT,
show_title_snapshot TEXT NOT NULL,
usage_title_snapshot TEXT NOT NULL,
used_at_utc TEXT NOT NULL,
actual_duration_seconds INTEGER NOT NULL CHECK (actual_duration_seconds >= 0)
);
CREATE INDEX idx_piece_usage_history_original
ON piece_usage_history(original_piece_id, used_at_utc DESC);
CREATE TABLE show_duplication_commands (
source_show_id TEXT NOT NULL REFERENCES show_finalizations(show_id) ON DELETE CASCADE,
command_id TEXT NOT NULL,
created_show_id TEXT NOT NULL REFERENCES shows(id) ON DELETE CASCADE,
created_at_utc TEXT NOT NULL,
PRIMARY KEY (source_show_id, command_id)
);
CREATE TABLE show_shares (
id TEXT PRIMARY KEY,
show_id TEXT NOT NULL REFERENCES show_finalizations(show_id) ON DELETE CASCADE,
token_hash TEXT NOT NULL UNIQUE,
scope TEXT NOT NULL CHECK (scope IN ('rundown', 'moderation', 'research')),
password_hash TEXT,
expires_at_utc TEXT,
revoked_at_utc TEXT,
created_by_user_id TEXT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
created_at_utc TEXT NOT NULL
);
CREATE INDEX idx_show_shares_show ON show_shares(show_id, created_at_utc DESC);
CREATE TABLE show_share_sessions (
token_hash TEXT PRIMARY KEY,
share_id TEXT NOT NULL REFERENCES show_shares(id) ON DELETE CASCADE,
created_at_utc TEXT NOT NULL,
expires_at_utc TEXT NOT NULL
);
CREATE INDEX idx_show_share_sessions_share ON show_share_sessions(share_id, expires_at_utc);
CREATE TABLE share_password_attempts (
id TEXT PRIMARY KEY,
share_key TEXT NOT NULL,
address_key TEXT NOT NULL,
attempted_at_utc TEXT NOT NULL
);
CREATE INDEX idx_share_password_attempts_share
ON share_password_attempts(share_key, attempted_at_utc);
CREATE INDEX idx_share_password_attempts_address
ON share_password_attempts(address_key, attempted_at_utc);
UPDATE show_sections
SET category_name_snapshot = (
SELECT name FROM section_categories WHERE id = show_sections.category_id
),
category_color_snapshot = (
SELECT color FROM section_categories WHERE id = show_sections.category_id
)
WHERE show_id IN (SELECT id FROM shows WHERE status = 'completed');
UPDATE shows
SET completed_at_utc = COALESCE(
(SELECT ended_at_utc FROM show_live_states WHERE show_id = shows.id),
updated_at_utc
)
WHERE status = 'completed';
INSERT INTO show_finalizations (
show_id, command_id, source_revision, finalized_by_user_id, finalized_at_utc
)
SELECT id, 'migration-' || id, revision, NULL, completed_at_utc
FROM shows
WHERE status = 'completed';
INSERT INTO piece_usage_history (
usage_id, show_id, original_piece_id, show_title_snapshot, usage_title_snapshot,
used_at_utc, actual_duration_seconds
)
SELECT u.id, sh.id, u.original_piece_id, sh.title, u.title_snapshot,
COALESCE(sh.starts_at_utc, sh.completed_at_utc),
COALESCE((
SELECT sum(max(0, CAST((julianday(COALESCE(r.ended_at_utc, sh.completed_at_utc)) -
julianday(r.started_at_utc)) * 86400 AS INTEGER)))
FROM live_usage_runs r WHERE r.usage_id = u.id
), 0)
FROM piece_usages u
JOIN show_sections s ON s.id = u.show_section_id
JOIN shows sh ON sh.id = s.show_id
WHERE sh.status = 'completed' AND s.is_reserve_bank = 0
AND u.status = 'done' AND u.original_piece_id IS NOT NULL;