-- Topic subsystem schema (SQLite) -- Apply manually before/after backend deployment if needed. BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS topic_topic ( id INTEGER PRIMARY KEY AUTOINCREMENT, bot_id TEXT NOT NULL, topic_key TEXT NOT NULL, name TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', is_active INTEGER NOT NULL DEFAULT 1, is_default_fallback INTEGER NOT NULL DEFAULT 0, routing_json TEXT NOT NULL DEFAULT '{}', view_schema_json TEXT NOT NULL DEFAULT '{}', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(bot_id) REFERENCES bot_instance(id) ); CREATE TABLE IF NOT EXISTS topic_item ( id INTEGER PRIMARY KEY AUTOINCREMENT, bot_id TEXT NOT NULL, topic_key TEXT NOT NULL, title TEXT NOT NULL DEFAULT '', content TEXT NOT NULL DEFAULT '', level TEXT NOT NULL DEFAULT 'info', tags_json TEXT, view_json TEXT, source TEXT NOT NULL DEFAULT 'mcp', dedupe_key TEXT, is_read INTEGER NOT NULL DEFAULT 0, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(bot_id) REFERENCES bot_instance(id) ); CREATE UNIQUE INDEX IF NOT EXISTS uq_topic_topic_bot_topic_key ON topic_topic(bot_id, topic_key); CREATE INDEX IF NOT EXISTS idx_topic_topic_bot_id ON topic_topic(bot_id); CREATE INDEX IF NOT EXISTS idx_topic_topic_topic_key ON topic_topic(topic_key); CREATE INDEX IF NOT EXISTS idx_topic_topic_bot_fallback ON topic_topic(bot_id, is_default_fallback); CREATE INDEX IF NOT EXISTS idx_topic_item_bot_id ON topic_item(bot_id); CREATE INDEX IF NOT EXISTS idx_topic_item_topic_key ON topic_item(topic_key); CREATE INDEX IF NOT EXISTS idx_topic_item_level ON topic_item(level); CREATE INDEX IF NOT EXISTS idx_topic_item_source ON topic_item(source); CREATE INDEX IF NOT EXISTS idx_topic_item_is_read ON topic_item(is_read); CREATE INDEX IF NOT EXISTS idx_topic_item_created_at ON topic_item(created_at); CREATE INDEX IF NOT EXISTS idx_topic_item_bot_topic_created_at ON topic_item(bot_id, topic_key, created_at); CREATE INDEX IF NOT EXISTS idx_topic_item_bot_dedupe ON topic_item(bot_id, dedupe_key); COMMIT;