schema.sql
Raw
1CREATE TABLE IF NOT EXISTS users (
2 id INTEGER PRIMARY KEY AUTOINCREMENT,
3 username TEXT UNIQUE NOT NULL,
4 password_hash TEXT,
5 created_at TEXT NOT NULL,
6 avatar_version INTEGER NOT NULL DEFAULT 1,
7 git_name TEXT,
8 git_email TEXT
9);
10
11CREATE TABLE IF NOT EXISTS passkeys (
12 id INTEGER PRIMARY KEY AUTOINCREMENT,
13 user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
14 credential_id TEXT UNIQUE NOT NULL,
15 public_key TEXT NOT NULL,
16 counter INTEGER NOT NULL DEFAULT 0,
17 created_at TEXT NOT NULL
18);
19
20CREATE TABLE IF NOT EXISTS sessions (
21 id TEXT PRIMARY KEY,
22 user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
23 expires_at TEXT NOT NULL,
24 created_at TEXT NOT NULL
25);
26
27CREATE TABLE IF NOT EXISTS repositories (
28 id INTEGER PRIMARY KEY AUTOINCREMENT,
29 name TEXT UNIQUE NOT NULL,
30 description TEXT,
31 is_private INTEGER NOT NULL DEFAULT 0,
32 is_pinned INTEGER NOT NULL DEFAULT 0,
33 default_branch TEXT NOT NULL DEFAULT 'main',
34 created_at TEXT NOT NULL,
35 issue_seq INTEGER NOT NULL DEFAULT 0,
36 patch_seq INTEGER NOT NULL DEFAULT 0,
37 issue_template TEXT,
38 patch_template TEXT
39);
40
41CREATE TABLE IF NOT EXISTS issues (
42 id INTEGER PRIMARY KEY AUTOINCREMENT,
43 repo_id INTEGER NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
44 author_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
45 number INTEGER NOT NULL,
46 title TEXT NOT NULL,
47 body TEXT NOT NULL DEFAULT '',
48 status TEXT NOT NULL DEFAULT 'open',
49 created_at TEXT NOT NULL,
50 updated_at TEXT NOT NULL,
51 edited_at TEXT,
52 UNIQUE(repo_id, number)
53);
54
55CREATE TABLE IF NOT EXISTS issue_comments (
56 id INTEGER PRIMARY KEY AUTOINCREMENT,
57 issue_id INTEGER NOT NULL REFERENCES issues(id) ON DELETE CASCADE,
58 author_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
59 body TEXT NOT NULL,
60 created_at TEXT NOT NULL,
61 edited_at TEXT
62);
63
64CREATE TABLE IF NOT EXISTS issue_reactions (
65 id INTEGER PRIMARY KEY AUTOINCREMENT,
66 issue_id INTEGER NOT NULL REFERENCES issues(id) ON DELETE CASCADE,
67 comment_id INTEGER REFERENCES issue_comments(id) ON DELETE CASCADE,
68 user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
69 emoji TEXT NOT NULL,
70 UNIQUE(issue_id, comment_id, user_id)
71);
72
73CREATE TABLE IF NOT EXISTS patches (
74 id INTEGER PRIMARY KEY AUTOINCREMENT,
75 repo_id INTEGER NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
76 author_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
77 number INTEGER NOT NULL,
78 title TEXT NOT NULL,
79 description TEXT NOT NULL DEFAULT '',
80 patch_content TEXT NOT NULL,
81 status TEXT NOT NULL DEFAULT 'open',
82 author_name TEXT NOT NULL DEFAULT '',
83 author_email TEXT NOT NULL DEFAULT '',
84 created_at TEXT NOT NULL,
85 updated_at TEXT NOT NULL,
86 edited_at TEXT,
87 version TEXT NOT NULL DEFAULT '',
88 UNIQUE(repo_id, number)
89);
90
91CREATE TABLE IF NOT EXISTS patch_comments (
92 id INTEGER PRIMARY KEY AUTOINCREMENT,
93 patch_id INTEGER NOT NULL REFERENCES patches(id) ON DELETE CASCADE,
94 author_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
95 body TEXT NOT NULL,
96 created_at TEXT NOT NULL,
97 edited_at TEXT
98);
99
100CREATE TABLE IF NOT EXISTS patch_reactions (
101 id INTEGER PRIMARY KEY AUTOINCREMENT,
102 patch_id INTEGER NOT NULL REFERENCES patches(id) ON DELETE CASCADE,
103 comment_id INTEGER REFERENCES patch_comments(id) ON DELETE CASCADE,
104 user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
105 emoji TEXT NOT NULL,
106 UNIQUE(patch_id, comment_id, user_id)
107);
108
109CREATE TABLE IF NOT EXISTS ssh_keys (
110 id INTEGER PRIMARY KEY AUTOINCREMENT,
111 user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
112 name TEXT NOT NULL,
113 public_key TEXT NOT NULL,
114 fingerprint TEXT NOT NULL UNIQUE,
115 created_at TEXT NOT NULL
116);
117
118CREATE TABLE IF NOT EXISTS releases (
119 id INTEGER PRIMARY KEY AUTOINCREMENT,
120 repo_id INTEGER NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
121 tag_name TEXT,
122 name TEXT NOT NULL,
123 notes TEXT,
124 include_source_code INTEGER NOT NULL DEFAULT 0,
125 created_at TEXT NOT NULL,
126 UNIQUE(repo_id, tag_name)
127);
128
129CREATE TABLE IF NOT EXISTS release_assets (
130 id INTEGER PRIMARY KEY AUTOINCREMENT,
131 release_id INTEGER NOT NULL REFERENCES releases(id) ON DELETE CASCADE,
132 filename TEXT NOT NULL,
133 size INTEGER NOT NULL,
134 content_type TEXT NOT NULL,
135 created_at TEXT NOT NULL
136);
137