+1
-8
cmd/main.go
+1
-8
cmd/main.go
···
3
import (
4
"context"
5
"os"
6
-
"time"
7
8
"github.com/charmbracelet/log"
9
_ "github.com/joho/godotenv/autoload"
···
53
}
54
55
func runServer(ctx context.Context, cmd *cli.Command) error {
56
-
appContext, cancel := context.WithTimeout(ctx, time.Minute*5)
57
-
defer cancel()
58
logger := log.New(os.Stdout)
59
db, err := db.NewSQLiteDB()
60
if err != nil {
···
62
}
63
logger.Info("database created")
64
65
-
server := server.NewServer(appContext, cmd.String("port"), db, logger)
66
67
if err := server.Start(); err != nil {
68
log.Fatal(err)
···
70
71
return nil
72
}
73
-
74
-
// func migrate(db *sql.DB) {
75
-
// _, err = db.
76
-
// }
···
3
import (
4
"context"
5
"os"
6
7
"github.com/charmbracelet/log"
8
_ "github.com/joho/godotenv/autoload"
···
52
}
53
54
func runServer(ctx context.Context, cmd *cli.Command) error {
55
logger := log.New(os.Stdout)
56
db, err := db.NewSQLiteDB()
57
if err != nil {
···
59
}
60
logger.Info("database created")
61
62
+
server := server.NewServer(cmd.String("port"), db, logger)
63
64
if err := server.Start(); err != nil {
65
log.Fatal(err)
···
67
68
return nil
69
}
+43
-2
internal/db/db.go
+43
-2
internal/db/db.go
···
7
_ "github.com/mattn/go-sqlite3"
8
)
9
10
func NewSQLiteDB() (*sql.DB, error) {
11
db, err := sql.Open("sqlite3", "./pallet.db")
12
+
_, err = db.Exec(`
13
+
pragma foreign_keys = on;
14
+
pragma journal_mode = wal;
15
+
16
+
create table if not exists boards (
17
+
uri text primary key,
18
+
cid text not null,
19
+
rkey text not null,
20
+
owner text not null,
21
+
name text not null,
22
+
description text,
23
+
created_at datetime default current_timestamp,
24
+
indexed_at text not null
25
+
);
26
+
27
+
create table if not exists board_item (
28
+
uri text primary key,
29
+
cid text not null,
30
+
rkey text not null,
31
+
owner text not null,
32
+
board_id text not null,
33
+
type text not null check(type in ('text', 'image')),
34
+
text text,
35
+
36
+
blob_cid text,
37
+
mime_type text,
38
+
width integer,
39
+
height integer,
40
+
alt_text text,
41
+
42
+
position integer,
43
+
created_at datetime default current_timestamp,
44
+
indexed_at text not null,
45
+
46
+
foreign key(board_id) references boards(rkey) on delete cascade,
47
+
48
+
check (
49
+
(type = 'text' and text is not null and blob_cid is null) or
50
+
(type = 'image' and blob_cid is not null and text is null)
51
+
)
52
+
);
53
+
`)
54
55
if err != nil {
56
log.Fatal("error initializing database", err)
···
58
59
defer db.Close()
60
return db, nil
61
+
}
+1
-3
internal/server/server.go
+1
-3
internal/server/server.go