forge
ExploreLog in

Tahinli/forge

public
0 watching
★ 0
1.1 KiB
1-- Snippets: small, shareable collections of text files owned by one user. Each save writes a
2-- revision holding the whole set of files as JSON, so history never depends on later edits.
3CREATE TABLE snippets (
4 id TEXT PRIMARY KEY,
5 owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
6 title TEXT NOT NULL,
7 description TEXT NOT NULL DEFAULT '',
8 visibility TEXT NOT NULL CHECK (visibility IN ('public','unlisted','private')),
9 created_at TEXT NOT NULL,
10 updated_at TEXT NOT NULL
11);
12CREATE INDEX snippets_owner ON snippets (owner_id, updated_at);
13
14CREATE TABLE snippet_files (
15 snippet_id TEXT NOT NULL REFERENCES snippets(id) ON DELETE CASCADE,
16 name TEXT NOT NULL,
17 content TEXT NOT NULL,
18 position INTEGER NOT NULL,
19 PRIMARY KEY (snippet_id, name)
20);
21
22CREATE TABLE snippet_revisions (
23 id TEXT PRIMARY KEY,
24 snippet_id TEXT NOT NULL REFERENCES snippets(id) ON DELETE CASCADE,
25 author_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
26 created_at TEXT NOT NULL,
27 files_json TEXT NOT NULL
28);
29CREATE INDEX snippet_revisions_snippet ON snippet_revisions (snippet_id, created_at);