Files
growqr-backend/drizzle/0006_conversations_active_missions.sql
2026-06-04 14:25:20 +05:30

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);