mood/inspo boards

Compare changes

Choose any two refs to compare.

Changed files
+48 -14
cmd
internal
db
server
+3 -1
.gitignore
··· 1 1 build 2 - .env 2 + .env 3 + *.db* 4 + *.shm
+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
··· 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
··· 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,