35 lines
1.5 KiB
SQL
35 lines
1.5 KiB
SQL
-- 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);
|