···11-package db
22-33-import (
44- "database/sql"
55-66- _ "github.com/mattn/go-sqlite3"
77-)
88-99-type DB struct {
1010- db *sql.DB
1111-}
1212-1313-func Setup(dbPath string) (*DB, error) {
1414- db, err := sql.Open("sqlite3", dbPath)
1515- if err != nil {
1616- return nil, err
1717- }
1818-1919- _, err = db.Exec(`
2020- create table if not exists public_keys (
2121- id integer primary key autoincrement,
2222- did text not null,
2323- name text not null,
2424- key text not null,
2525- created timestamp default current_timestamp,
2626- unique(did, name, key)
2727- );
2828- create table if not exists repos (
2929- id integer primary key autoincrement,
3030- did text not null,
3131- name text not null,
3232- description text not null,
3333- created timestamp default current_timestamp,
3434- unique(did, name)
3535- );
3636- create table if not exists access_levels (
3737- id integer primary key autoincrement,
3838- repo_id integer not null,
3939- did text not null,
4040- access text not null check (access in ('OWNER', 'WRITER')),
4141- created timestamp default current_timestamp,
4242- unique(repo_id, did),
4343- foreign key (repo_id) references repos(id) on delete cascade
4444- );
4545- `)
4646- if err != nil {
4747- return nil, err
4848- }
4949-5050- return &DB{db: db}, nil
5151-}