36 lines
1.4 KiB
SQL
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);
|