+1
-8
cmd/main.go
+1
-8
cmd/main.go
···
3
3
import (
4
4
"context"
5
5
"os"
6
-
"time"
7
6
8
7
"github.com/charmbracelet/log"
9
8
_ "github.com/joho/godotenv/autoload"
···
53
52
}
54
53
55
54
func runServer(ctx context.Context, cmd *cli.Command) error {
56
-
appContext, cancel := context.WithTimeout(ctx, time.Minute*5)
57
-
defer cancel()
58
55
logger := log.New(os.Stdout)
59
56
db, err := db.NewSQLiteDB()
60
57
if err != nil {
···
62
59
}
63
60
logger.Info("database created")
64
61
65
-
server := server.NewServer(appContext, cmd.String("port"), db, logger)
62
+
server := server.NewServer(cmd.String("port"), db, logger)
66
63
67
64
if err := server.Start(); err != nil {
68
65
log.Fatal(err)
···
70
67
71
68
return nil
72
69
}
73
-
74
-
// func migrate(db *sql.DB) {
75
-
// _, err = db.
76
-
// }
+43
-2
internal/db/db.go
+43
-2
internal/db/db.go
···
7
7
_ "github.com/mattn/go-sqlite3"
8
8
)
9
9
10
-
11
10
func NewSQLiteDB() (*sql.DB, error) {
12
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
+
`)
13
54
14
55
if err != nil {
15
56
log.Fatal("error initializing database", err)
···
17
58
18
59
defer db.Close()
19
60
return db, nil
20
-
}
61
+
}
+1
-3
internal/server/server.go
+1
-3
internal/server/server.go
···
12
12
)
13
13
14
14
type Server struct {
15
-
ctx context.Context
16
15
addr string
17
16
db *sql.DB
18
17
logger *log.Logger
···
23
22
status int
24
23
}
25
24
26
-
func NewServer(ctx context.Context, addr string, db *sql.DB, logger *log.Logger) *Server {
25
+
func NewServer(addr string, db *sql.DB, logger *log.Logger) *Server {
27
26
return &Server{
28
-
ctx,
29
27
addr,
30
28
db,
31
29
logger,