Files
Life-OS/drizzle/0001_lifeos_records.sql
T

89 lines
2.9 KiB
SQL

CREATE TABLE lifeos_migrations (
user_id TEXT PRIMARY KEY,
migrated_at TEXT NOT NULL
);
CREATE TABLE lifeos_meta (
user_id TEXT NOT NULL,
kind TEXT NOT NULL CHECK (kind IN ('profile', 'settings', 'system')),
value_json TEXT NOT NULL,
revision INTEGER NOT NULL DEFAULT 1,
updated_at TEXT NOT NULL,
PRIMARY KEY (user_id, kind)
);
CREATE TABLE lifeos_memories (
user_id TEXT NOT NULL,
id TEXT NOT NULL,
memory_date TEXT,
value_json TEXT NOT NULL,
revision INTEGER NOT NULL DEFAULT 1,
updated_at TEXT NOT NULL,
deleted_at TEXT,
PRIMARY KEY (user_id, id)
);
CREATE INDEX idx_lifeos_memories_user_date ON lifeos_memories(user_id, memory_date DESC) WHERE deleted_at IS NULL;
CREATE TABLE lifeos_memory_tags (
user_id TEXT NOT NULL,
memory_id TEXT NOT NULL,
tag TEXT NOT NULL,
PRIMARY KEY (user_id, memory_id, tag),
FOREIGN KEY (user_id, memory_id) REFERENCES lifeos_memories(user_id, id)
);
CREATE INDEX idx_lifeos_memory_tags_user_tag ON lifeos_memory_tags(user_id, tag);
CREATE TRIGGER lifeos_memory_tags_insert AFTER INSERT ON lifeos_memories
WHEN NEW.deleted_at IS NULL
BEGIN
INSERT OR IGNORE INTO lifeos_memory_tags(user_id, memory_id, tag)
SELECT NEW.user_id, NEW.id, value FROM json_each(NEW.value_json, '$.tags')
WHERE type = 'text' AND value <> '';
END;
CREATE TRIGGER lifeos_memory_tags_update AFTER UPDATE OF value_json, deleted_at ON lifeos_memories
BEGIN
DELETE FROM lifeos_memory_tags WHERE user_id = NEW.user_id AND memory_id = NEW.id;
INSERT OR IGNORE INTO lifeos_memory_tags(user_id, memory_id, tag)
SELECT NEW.user_id, NEW.id, value FROM json_each(NEW.value_json, '$.tags')
WHERE NEW.deleted_at IS NULL AND type = 'text' AND value <> '';
END;
CREATE TABLE lifeos_goals (
user_id TEXT NOT NULL,
id TEXT NOT NULL,
target_date TEXT,
done INTEGER NOT NULL DEFAULT 0,
value_json TEXT NOT NULL,
revision INTEGER NOT NULL DEFAULT 1,
updated_at TEXT NOT NULL,
deleted_at TEXT,
PRIMARY KEY (user_id, id)
);
CREATE INDEX idx_lifeos_goals_user_status_date ON lifeos_goals(user_id, done, target_date) WHERE deleted_at IS NULL;
CREATE TABLE lifeos_tasks (
user_id TEXT NOT NULL,
id TEXT NOT NULL,
goal_id TEXT,
due_date TEXT,
done INTEGER NOT NULL DEFAULT 0,
value_json TEXT NOT NULL,
revision INTEGER NOT NULL DEFAULT 1,
updated_at TEXT NOT NULL,
deleted_at TEXT,
PRIMARY KEY (user_id, id)
);
CREATE INDEX idx_lifeos_tasks_user_status_date ON lifeos_tasks(user_id, done, due_date) WHERE deleted_at IS NULL;
CREATE INDEX idx_lifeos_tasks_user_goal ON lifeos_tasks(user_id, goal_id) WHERE deleted_at IS NULL;
CREATE TABLE lifeos_favorites (
user_id TEXT NOT NULL,
id TEXT NOT NULL,
memory_id TEXT,
value_json TEXT NOT NULL,
revision INTEGER NOT NULL DEFAULT 1,
updated_at TEXT NOT NULL,
deleted_at TEXT,
PRIMARY KEY (user_id, id)
);
CREATE INDEX idx_lifeos_favorites_user_memory ON lifeos_favorites(user_id, memory_id) WHERE deleted_at IS NULL;