Files
2026-07-20 16:18:05 +08:00

36 lines
1.4 KiB
SQL

CREATE TABLE IF NOT EXISTS session_mappings (
session_key TEXT PRIMARY KEY,
tenant_key TEXT NOT NULL,
channel TEXT NOT NULL,
agent_id TEXT NOT NULL,
conversation_type TEXT NOT NULL CHECK (conversation_type IN ('direct','group')),
external_subject_id TEXT NOT NULL,
weknora_session_id TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_session_mappings_tenant_channel
ON session_mappings (tenant_key, channel, external_subject_id);
CREATE TABLE IF NOT EXISTS turns (
id TEXT PRIMARY KEY,
tenant_key TEXT NOT NULL,
channel TEXT NOT NULL,
external_message_id TEXT NOT NULL,
session_key TEXT NOT NULL,
weknora_session_id TEXT NOT NULL DEFAULT '',
weknora_request_id TEXT NOT NULL DEFAULT '',
question TEXT NOT NULL,
answer TEXT NOT NULL DEFAULT '',
references_json JSONB NOT NULL DEFAULT '[]'::JSONB,
status TEXT NOT NULL CHECK (status IN ('processing','succeeded','failed','cancelled')),
error_message TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (tenant_key, channel, external_message_id)
);
CREATE INDEX IF NOT EXISTS idx_turns_tenant_created ON turns (tenant_key, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_turns_session_created ON turns (session_key, created_at DESC);