this repo has no description
1package db
2
3import (
4 "database/sql"
5
6 _ "github.com/mattn/go-sqlite3"
7)
8
9type DB struct {
10 db *sql.DB
11}
12
13func Setup(dbPath string) (*DB, error) {
14 db, err := sql.Open("sqlite3", dbPath)
15 if err != nil {
16 return nil, err
17 }
18
19 _, err = db.Exec(`
20 create table if not exists public_keys (
21 id integer primary key autoincrement,
22 did text not null,
23 name text not null,
24 key text not null,
25 created timestamp default current_timestamp,
26 unique(did, name, key)
27 );
28 create table if not exists users (
29 id integer primary key autoincrement,
30 did text not null,
31 unique(did),
32 foreign key (did) references public_keys(did) on delete cascade
33 );
34 create table if not exists repos (
35 id integer primary key autoincrement,
36 did text not null,
37 name text not null,
38 description text not null,
39 created timestamp default current_timestamp,
40 unique(did, name)
41 );
42 create table if not exists access_levels (
43 id integer primary key autoincrement,
44 repo_id integer not null,
45 did text not null,
46 access text not null check (access in ('OWNER', 'WRITER')),
47 created timestamp default current_timestamp,
48 unique(repo_id, did),
49 foreign key (repo_id) references repos(id) on delete cascade
50 );
51 `)
52 if err != nil {
53 return nil, err
54 }
55
56 return &DB{db: db}, nil
57}