-- Chat Switchboard — 007 Notes & Links (SQLite) CREATE TABLE IF NOT EXISTS notes ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, title TEXT NOT NULL, content TEXT DEFAULT '', folder_path TEXT DEFAULT '/', tags TEXT DEFAULT '[]', metadata TEXT DEFAULT '{}', source_channel_id TEXT REFERENCES channels(id) ON DELETE SET NULL, source_message_id TEXT, team_id TEXT REFERENCES teams(id) ON DELETE SET NULL, created_at TEXT DEFAULT (datetime('now')), updated_at TEXT DEFAULT (datetime('now')) ); CREATE INDEX IF NOT EXISTS idx_notes_user ON notes(user_id); CREATE INDEX IF NOT EXISTS idx_notes_folder ON notes(user_id, folder_path); CREATE INDEX IF NOT EXISTS idx_notes_updated ON notes(user_id, updated_at); CREATE INDEX IF NOT EXISTS idx_notes_team ON notes(team_id); CREATE INDEX IF NOT EXISTS idx_notes_source_msg ON notes(source_message_id); CREATE TABLE IF NOT EXISTS note_links ( source_note_id TEXT NOT NULL REFERENCES notes(id) ON DELETE CASCADE, target_note_id TEXT REFERENCES notes(id) ON DELETE CASCADE, target_title TEXT NOT NULL, display_text TEXT, is_transclusion INTEGER NOT NULL DEFAULT 0, created_at TEXT DEFAULT (datetime('now')), PRIMARY KEY (source_note_id, target_title) ); CREATE INDEX IF NOT EXISTS idx_note_links_target ON note_links(target_note_id);