chore: initialize go-sip repository
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS inbox (
|
||||
command_id TEXT PRIMARY KEY,
|
||||
tenant_id TEXT NOT NULL,
|
||||
tenant_key TEXT NOT NULL,
|
||||
command_type TEXT NOT NULL,
|
||||
body_hash TEXT NOT NULL,
|
||||
body BLOB NOT NULL,
|
||||
status TEXT NOT NULL CHECK (status IN ('received', 'persisted', 'rejected')),
|
||||
received_at TEXT NOT NULL,
|
||||
persisted_at TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tasks (
|
||||
execution_id TEXT PRIMARY KEY,
|
||||
tenant_key TEXT NOT NULL,
|
||||
tenant_id TEXT NOT NULL,
|
||||
task_id TEXT NOT NULL,
|
||||
task_item_id TEXT NOT NULL,
|
||||
task_revision INTEGER NOT NULL,
|
||||
trace_id TEXT NOT NULL,
|
||||
callee TEXT NOT NULL,
|
||||
route_policy_id TEXT NOT NULL,
|
||||
caller_profile_id TEXT NOT NULL,
|
||||
agent_version_id TEXT NOT NULL,
|
||||
variables BLOB NOT NULL,
|
||||
ring_timeout_ms INTEGER NOT NULL,
|
||||
max_call_duration_ms INTEGER NOT NULL,
|
||||
status TEXT NOT NULL CHECK (status IN ('accepted', 'reserved', 'running', 'draining', 'paused', 'stopped', 'finished', 'unknown')),
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
UNIQUE (tenant_key, task_id, task_item_id, task_revision)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS tasks_pending_idx ON tasks (status, created_at);
|
||||
CREATE INDEX IF NOT EXISTS tasks_tenant_idx ON tasks (tenant_key, status, created_at);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS quotas (
|
||||
scope TEXT PRIMARY KEY,
|
||||
limit_value INTEGER NOT NULL CHECK (limit_value >= 0),
|
||||
reserved_value INTEGER NOT NULL DEFAULT 0 CHECK (reserved_value >= 0),
|
||||
unknown_value INTEGER NOT NULL DEFAULT 0 CHECK (unknown_value >= 0),
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS reservations (
|
||||
reservation_id TEXT PRIMARY KEY,
|
||||
execution_id TEXT NOT NULL,
|
||||
tenant_key TEXT NOT NULL,
|
||||
scopes BLOB NOT NULL,
|
||||
state TEXT NOT NULL CHECK (state IN ('held', 'released', 'unknown')),
|
||||
created_at TEXT NOT NULL,
|
||||
released_at TEXT,
|
||||
UNIQUE (execution_id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS reservations_tenant_idx ON reservations (tenant_key, state);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS outbox (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
event_id TEXT NOT NULL UNIQUE,
|
||||
tenant_key TEXT NOT NULL,
|
||||
exchange TEXT NOT NULL,
|
||||
routing_key TEXT NOT NULL,
|
||||
body BLOB NOT NULL,
|
||||
status TEXT NOT NULL CHECK (status IN ('pending', 'dispatching', 'published', 'retry')),
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
last_error TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
published_at TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS outbox_pending_idx ON outbox (status, id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS controls (
|
||||
execution_id TEXT PRIMARY KEY,
|
||||
task_revision INTEGER NOT NULL,
|
||||
action TEXT NOT NULL CHECK (action IN ('pause', 'resume', 'drain', 'stop', 'hangup')),
|
||||
active_call_policy TEXT,
|
||||
reason TEXT,
|
||||
idempotency_key TEXT,
|
||||
applied INTEGER NOT NULL DEFAULT 0,
|
||||
requested_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS replays (
|
||||
idempotency_key TEXT PRIMARY KEY,
|
||||
tenant_id TEXT NOT NULL,
|
||||
source_command_id TEXT NOT NULL,
|
||||
tenant_key TEXT NOT NULL,
|
||||
reason TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
UNIQUE (idempotency_key, source_command_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS leases (
|
||||
lease_id TEXT PRIMARY KEY,
|
||||
scope TEXT NOT NULL,
|
||||
holder_id TEXT NOT NULL,
|
||||
expires_at TEXT NOT NULL,
|
||||
state TEXT NOT NULL CHECK (state IN ('active', 'expired', 'released'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS leases_scope_idx ON leases (scope, state, expires_at);
|
||||
Reference in New Issue
Block a user