forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
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 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 followed_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
47 primary key (user_did, subject_did),
48 check (user_did <> subject_did)
49 );
50 `)
51 if err != nil {
52 return nil, err
53 }
54 return &DB{db: db}, nil
55}