mood/inspo boards
1package main
2
3import (
4 "context"
5 "os"
6 "time"
7
8 "github.com/charmbracelet/log"
9 _ "github.com/joho/godotenv/autoload"
10 "github.com/urfave/cli/v3"
11 "tangled.org/dane.is.extraordinarily.cool/pallet/internal/db"
12 "tangled.org/dane.is.extraordinarily.cool/pallet/internal/server"
13)
14
15func main() {
16 if err := run(os.Args); err != nil {
17 log.Fatal(err)
18 os.Exit(-1)
19 }
20}
21
22func run(args []string) error {
23 app := &cli.Command{
24 Name: "pallet",
25 Usage: "pallet app server",
26 }
27
28 app.Flags = []cli.Flag{
29 &cli.StringFlag{
30 Name: "log-level",
31 Usage: "log verbosity level (eg: warn, info, debug)",
32 Sources: cli.EnvVars("GO_LOG_LEVEL", "LOG_LEVEL"),
33 },
34 }
35
36 app.Commands = []*cli.Command{
37 &cli.Command{
38 Name: "start",
39 Usage: "start the pallet app server",
40 Action: runServer,
41 Flags: []cli.Flag{
42 &cli.StringFlag{
43 Name: "port",
44 Usage: "Port to bind the HTTP server to",
45 Value: ":8080",
46 Sources: cli.EnvVars("PORT"),
47 },
48 },
49 },
50 }
51
52 return app.Run(context.Background(), args)
53}
54
55func 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 {
61 log.Fatal(err)
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)
69 }
70
71 return nil
72}
73
74// func migrate(db *sql.DB) {
75// _, err = db.
76// }