CREATE TABLE IF NOT EXISTS message_outbox ( id TEXT PRIMARY KEY, channel TEXT NOT NULL, recipient_user_id TEXT NOT NULL, recipient_role TEXT, message_type TEXT NOT NULL, priority TEXT NOT NULL DEFAULT 'normal', title TEXT, content TEXT NOT NULL, payload TEXT, status TEXT NOT NULL DEFAULT 'queued', retry_count INTEGER NOT NULL DEFAULT 0, last_error TEXT, created_at TEXT NOT NULL, sent_at TEXT ); CREATE INDEX IF NOT EXISTS idx_message_outbox_dispatch ON message_outbox(channel, status, priority, created_at); CREATE TABLE IF NOT EXISTS channel_bindings ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, channel_type TEXT NOT NULL, external_chat_id TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'active', updated_at TEXT NOT NULL ); CREATE INDEX IF NOT EXISTS idx_channel_bindings_lookup ON channel_bindings(user_id, channel_type, status, updated_at); CREATE TABLE IF NOT EXISTS audit_logs ( id TEXT PRIMARY KEY, actor TEXT NOT NULL, action TEXT NOT NULL, target TEXT, detail TEXT, created_at TEXT NOT NULL );