Files
go-sip/internal/store/migrations/017_local_v01_call_terminals.sql
T

30 lines
1.6 KiB
SQL

-- One immutable terminal fact per accepted local execution. Releasing the
-- reservation and recording the fact share a transaction; the final result
-- may be enqueued immediately or later after the recording outcome is known.
CREATE TABLE IF NOT EXISTS local_v01_call_terminals (
execution_id TEXT PRIMARY KEY REFERENCES tasks(execution_id),
call_id TEXT NOT NULL UNIQUE,
source TEXT NOT NULL CHECK (source IN ('mock_agent', 'dispatcher_refusal', 'mock_agent_deadline', 'dispatcher_deadline')),
started_at TEXT NOT NULL,
ended_at TEXT NOT NULL,
outcome TEXT NOT NULL,
reason_code TEXT NOT NULL,
recording_expected INTEGER NOT NULL CHECK (recording_expected IN (0, 1)),
recording_id TEXT UNIQUE,
upload_id TEXT UNIQUE,
recording_manifest BLOB,
recording_outcome BLOB,
recording_outcome_sha256 TEXT,
recording_status TEXT CHECK (recording_status IN ('uploaded', 'unavailable')),
fact_sha256 TEXT NOT NULL,
result_event_id TEXT UNIQUE,
result_sha256 TEXT,
CHECK ((result_event_id IS NULL) = (result_sha256 IS NULL)),
CHECK ((recording_expected = 0 AND recording_id IS NULL AND upload_id IS NULL AND recording_manifest IS NULL AND recording_outcome IS NULL)
OR (recording_expected = 1 AND recording_id IS NOT NULL AND upload_id IS NOT NULL AND recording_manifest IS NOT NULL)),
CHECK ((recording_outcome IS NULL) = (recording_outcome_sha256 IS NULL)),
CHECK ((recording_outcome IS NULL) = (recording_status IS NULL))
);
CREATE INDEX IF NOT EXISTS local_v01_call_terminals_pending_idx
ON local_v01_call_terminals (result_event_id, ended_at);