← back to Wallco Ai

db/migrations/002_chat.sql

34 lines

-- wallco.ai chat + design lineage

CREATE TABLE IF NOT EXISTS wallco_chat_sessions (
  id            BIGSERIAL PRIMARY KEY,
  session_uuid  TEXT UNIQUE NOT NULL,
  context       TEXT NOT NULL DEFAULT 'catalog',   -- 'catalog' | 'design:<id>'
  visitor_ip    INET,
  visitor_email TEXT,
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  last_at       TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE IF NOT EXISTS wallco_chat_messages (
  id            BIGSERIAL PRIMARY KEY,
  session_id    BIGINT NOT NULL REFERENCES wallco_chat_sessions(id),
  role          TEXT NOT NULL CHECK (role IN ('user','assistant','tool','system')),
  content       TEXT NOT NULL,
  tool_name     TEXT,
  tool_args     JSONB,
  tool_result   JSONB,
  generated_design_id BIGINT,           -- if a generate_design tool fired, links here
  created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_wallco_chat_session_uuid ON wallco_chat_sessions(session_uuid);
CREATE INDEX IF NOT EXISTS idx_wallco_chat_session_last ON wallco_chat_sessions(last_at DESC);
CREATE INDEX IF NOT EXISTS idx_wallco_chat_msg_session  ON wallco_chat_messages(session_id, created_at);

-- Design lineage — when a design is generated via "vary this one", we link parent → child
ALTER TABLE spoon_all_designs ADD COLUMN IF NOT EXISTS parent_design_id BIGINT REFERENCES spoon_all_designs(id);
ALTER TABLE spoon_all_designs ADD COLUMN IF NOT EXISTS chat_session_id  BIGINT;
ALTER TABLE spoon_all_designs ADD COLUMN IF NOT EXISTS request_text     TEXT;  -- user's natural-language ask
CREATE INDEX IF NOT EXISTS idx_spoon_parent ON spoon_all_designs(parent_design_id);