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