60 lines
1.5 kB
1
package db
2
3
import (
4
"database/sql"
5
6
_ "github.com/mattn/go-sqlite3"
7
)
8
9
type DB struct {
10
db *sql.DB
11
}
12
13
func Make(dbPath string) (*DB, error) {
14
db, err := sql.Open("sqlite3", dbPath)
15
if err != nil {
16
return nil, err
17
}
18
_, err = db.Exec(`
19
create table if not exists registrations (
20
id integer primary key autoincrement,
21
domain text not null unique,
22
did text not null,
23
secret text not null,
24
created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
25
registered text
26
);
27
create table if not exists public_keys (
28
id integer primary key autoincrement,
29
did text not null,
30
name text not null,
31
key text not null,
32
created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
33
unique(did, name, key)
34
);
35
create table if not exists repos (
36
id integer primary key autoincrement,
37
did text not null,
38
name text not null,
39
knot text not null,
40
created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
41
unique(did, name, knot)
42
);
43
create table if not exists follows (
44
user_did text not null,
45
subject_did text not null,
46
at_uri text not null,
47
followed_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
48
primary key (user_did, subject_did),
49
check (user_did <> subject_did)
50
);
51
create table if not exists _jetstream (
52
id integer primary key autoincrement,
53
last_time_us integer not null
54
);
55
`)
56
if err != nil {
57
return nil, err
58
}
59
return &DB{db: db}, nil
60
}
61