PRAGMA foreign_keys = ON; CREATE TABLE IF NOT EXISTS workspaces ( id INTEGER PRIMARY KEY AUTOINCREMENT, slug TEXT NOT NULL UNIQUE, title TEXT NOT NULL, password_hash TEXT, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS notes ( id INTEGER PRIMARY KEY AUTOINCREMENT, workspace_id INTEGER NOT NULL, slug TEXT NOT NULL, title TEXT NOT NULL, content TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (workspace_id) REFERENCES workspaces(id) ON DELETE CASCADE, UNIQUE(workspace_id, slug) ); CREATE TABLE IF NOT EXISTS note_revisions ( id INTEGER PRIMARY KEY AUTOINCREMENT, note_id INTEGER NOT NULL, content TEXT NOT NULL, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS idx_notes_workspace ON notes(workspace_id, updated_at DESC); CREATE INDEX IF NOT EXISTS idx_note_revisions_note ON note_revisions(note_id, id DESC); -- Preserve data from version 0.4.x: the old note becomes a workspace with one note. INSERT OR IGNORE INTO workspaces (id, slug, title, password_hash, created_at, updated_at) SELECT id, slug, title, password_hash, created_at, updated_at FROM pads; INSERT OR IGNORE INTO notes (id, workspace_id, slug, title, content, created_at, updated_at) SELECT id, id, 'notatka', title, content, created_at, updated_at FROM pads; INSERT OR IGNORE INTO note_revisions (id, note_id, content, created_at) SELECT id, pad_id, content, created_at FROM revisions;