86 lines
2.6 KiB
SQL
86 lines
2.6 KiB
SQL
-- Topic subsystem schema (SQLite)
|
|
-- Apply manually before/after backend deployment if needed.
|
|
|
|
BEGIN TRANSACTION;
|
|
|
|
CREATE TABLE IF NOT EXISTS topic_bot_settings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
bot_id TEXT NOT NULL,
|
|
topic_enabled INTEGER NOT NULL DEFAULT 1,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY(bot_id) REFERENCES botinstance(id)
|
|
);
|
|
|
|
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 botinstance(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 botinstance(id)
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uq_topic_bot_settings_bot_id
|
|
ON topic_bot_settings(bot_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;
|