-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
67 lines (59 loc) · 1.43 KB
/
main.go
File metadata and controls
67 lines (59 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"context"
"fmt"
"gql-mongo-todos-sample/db"
"gql-mongo-todos-sample/db/migrations"
"gql-mongo-todos-sample/internal"
"log/slog"
"os"
"os/signal"
"syscall"
"github.com/urfave/cli/v3"
)
func main() {
logger := slog.New(slog.NewJSONHandler(
os.Stdout,
&slog.HandlerOptions{
Level: slog.LevelDebug,
},
))
slog.SetDefault(logger)
ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGTERM, syscall.SIGINT)
defer cancel()
env := internal.LoadEnv()
config, err := internal.LoadConfig(env.Mode, env.Fp)
if err != nil {
panic(err)
}
validate := internal.NewValidator()
if err := validate.Struct(config); err != nil {
panic(fmt.Errorf("failed to validate config file, %s", err))
}
cache, err := db.NewCacheManager(ctx, config.CacheURL, []int{db.GraphqlCache, db.UserCache})
if err != nil {
panic(err)
}
defer cache.Close()
database, err := db.LoadDB(ctx, db.DBOptions{
Addr: config.DatabaseURL,
Name: config.DatabaseName,
MigrationVersion: config.MigrationVersion,
Migrations: []db.Migration{
migrations.Users{},
migrations.Todos{},
},
})
if err != nil {
panic(err)
}
defer database.Close(ctx)
cmd := &cli.Command{
Name: "todos",
Usage: "todos backend base on graphql and mongodb",
Commands: NewCmd(config, database),
}
if err := cmd.Run(ctx, os.Args); err != nil {
panic(fmt.Errorf("failed to run cmd, %s", err))
}
}