50 lines
1.7 KiB
SQL
50 lines
1.7 KiB
SQL
-- Durable Talk to Me conversations + mission actor snapshots.
|
|
-- Actors are runtime caches/orchestrators; Postgres is the source of truth.
|
|
|
|
CREATE TABLE IF NOT EXISTS grow_conversations (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
title TEXT NOT NULL DEFAULT 'Talk to Me',
|
|
active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS grow_conversations_user_idx
|
|
ON grow_conversations(user_id, updated_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS grow_conversation_messages (
|
|
id TEXT PRIMARY KEY,
|
|
conversation_id TEXT NOT NULL REFERENCES grow_conversations(id) ON DELETE CASCADE,
|
|
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
role TEXT NOT NULL CHECK (role IN ('user', 'assistant')),
|
|
sender TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
metadata JSONB,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS grow_conversation_messages_conversation_idx
|
|
ON grow_conversation_messages(conversation_id, created_at ASC);
|
|
|
|
CREATE TABLE IF NOT EXISTS grow_active_missions (
|
|
instance_id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
mission_id TEXT NOT NULL,
|
|
workflow_id TEXT NOT NULL,
|
|
actor_type TEXT,
|
|
title TEXT NOT NULL,
|
|
short_title TEXT NOT NULL,
|
|
status TEXT NOT NULL,
|
|
progress_percent INTEGER NOT NULL DEFAULT 0,
|
|
current_stage_id TEXT,
|
|
goal TEXT,
|
|
mission JSONB NOT NULL,
|
|
snapshot JSONB,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS grow_active_missions_user_idx
|
|
ON grow_active_missions(user_id, updated_at DESC);
|