Import source: src-tauri/migrations/0001_init.sql

Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
arsam
2026-09-18 23:13:49 +03:30
parent ba600db05c
commit 653933270f
+80
View File
@@ -0,0 +1,80 @@
-- Notara initial schema (see PLAN.md — Data Model)
CREATE TABLE workspace_meta (
id INTEGER PRIMARY KEY CHECK (id = 1),
name TEXT NOT NULL DEFAULT 'My Workspace',
theme TEXT NOT NULL DEFAULT 'system',
accent TEXT NOT NULL DEFAULT '#2383e2',
onboarded INTEGER NOT NULL DEFAULT 0,
last_page_id TEXT,
settings JSON NOT NULL DEFAULT '{}'
);
INSERT INTO workspace_meta (id) VALUES (1);
CREATE TABLE pages (
id TEXT PRIMARY KEY,
parent_id TEXT REFERENCES pages(id) ON DELETE CASCADE,
title TEXT NOT NULL DEFAULT '',
icon TEXT,
cover TEXT,
sort_order REAL NOT NULL DEFAULT 0,
is_favorite INTEGER NOT NULL DEFAULT 0,
in_trash INTEGER NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE INDEX idx_pages_parent ON pages(parent_id);
CREATE INDEX idx_pages_trash ON pages(in_trash);
-- Page body as a Yjs document (CRDT): Y.encodeStateAsUpdate(doc)
CREATE TABLE page_docs (
page_id TEXT PRIMARY KEY REFERENCES pages(id) ON DELETE CASCADE,
ydoc BLOB NOT NULL
);
CREATE TABLE databases (
id TEXT PRIMARY KEY,
page_id TEXT NOT NULL REFERENCES pages(id) ON DELETE CASCADE,
name TEXT NOT NULL DEFAULT ''
);
CREATE TABLE db_properties (
id TEXT PRIMARY KEY,
database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
name TEXT NOT NULL,
type TEXT NOT NULL,
config JSON NOT NULL DEFAULT '{}',
sort_order REAL NOT NULL DEFAULT 0
);
CREATE INDEX idx_props_db ON db_properties(database_id);
CREATE TABLE db_rows (
id TEXT PRIMARY KEY,
database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
page_id TEXT NOT NULL REFERENCES pages(id) ON DELETE CASCADE,
sort_order REAL NOT NULL DEFAULT 0
);
CREATE INDEX idx_rows_db ON db_rows(database_id);
CREATE TABLE db_values (
row_id TEXT NOT NULL REFERENCES db_rows(id) ON DELETE CASCADE,
property_id TEXT NOT NULL REFERENCES db_properties(id) ON DELETE CASCADE,
value JSON,
PRIMARY KEY (row_id, property_id)
);
CREATE TABLE db_views (
id TEXT PRIMARY KEY,
database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
name TEXT NOT NULL,
type TEXT NOT NULL,
filters JSON NOT NULL DEFAULT '[]',
sorts JSON NOT NULL DEFAULT '[]',
groups JSON NOT NULL DEFAULT 'null',
visible_props JSON NOT NULL DEFAULT 'null',
sort_order REAL NOT NULL DEFAULT 0
);
CREATE INDEX idx_views_db ON db_views(database_id);
-- Full-text search mirror (title + plain-text body extracted from the Y.Doc)
CREATE VIRTUAL TABLE pages_fts USING fts5(page_id UNINDEXED, title, body);