1CREATE TABLE IF NOT EXISTS schema_migrations (
2 version INTEGER PRIMARY KEY,
3 applied_at INTEGER NOT NULL
4);
5
6CREATE TABLE IF NOT EXISTS repos (
7 id INTEGER PRIMARY KEY,
8 name TEXT NOT NULL UNIQUE,
9 description TEXT NOT NULL DEFAULT '',
10 visibility TEXT NOT NULL DEFAULT 'private', -- 'public' | 'private'
11 created_at INTEGER NOT NULL
12);
13
14CREATE TABLE IF NOT EXISTS users (
15 id INTEGER PRIMARY KEY,
16 username TEXT NOT NULL UNIQUE,
17 password_hash TEXT NOT NULL,
18 is_admin INTEGER NOT NULL DEFAULT 0,
19 created_at INTEGER NOT NULL
20);
21
22CREATE TABLE IF NOT EXISTS api_tokens (
23 id INTEGER PRIMARY KEY,
24 user_id INTEGER NOT NULL REFERENCES users(id),
25 token_hash TEXT NOT NULL UNIQUE,
26 label TEXT NOT NULL DEFAULT '',
27 created_at INTEGER NOT NULL
28);
29
30CREATE TABLE IF NOT EXISTS repo_permissions (
31 repo_id INTEGER NOT NULL REFERENCES repos(id),
32 user_id INTEGER NOT NULL REFERENCES users(id),
33 role TEXT NOT NULL, -- 'read' | 'write' | 'admin'
34 PRIMARY KEY (repo_id, user_id)
35);
36
37CREATE TABLE IF NOT EXISTS sessions (
38 id INTEGER PRIMARY KEY,
39 user_id INTEGER NOT NULL REFERENCES users(id),
40 token TEXT NOT NULL UNIQUE,
41 expires_at INTEGER NOT NULL
42);