44 lines
1.7 KiB
SQL
44 lines
1.7 KiB
SQL
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;
|