summaryrefslogtreecommitdiff
path: root/main.go
blob: 3691e5b3391d8d99943bfe44c669cdb5f40b2028 (plain)
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
68
69
70
71
package main

import (
	"flag"
	"log/slog"
	"os"
	"os/signal"
	"syscall"

	"github.com/SayaAndy/saya-today-web/config"
	"github.com/SayaAndy/saya-today-web/internal/router"

	_ "github.com/SayaAndy/saya-today-web/internal/router/handlers"
	_ "github.com/golang-migrate/migrate/v4/source/file"
	_ "github.com/mattn/go-sqlite3"
)

var (
	configPath = flag.String("c", "config.yaml", "Path to the configuration file (in YAML format)")
)

func main() {
	var err error

	flag.Parse()

	cfg := &config.Config{}
	if err := config.LoadConfig(*configPath, cfg); err != nil {
		slog.Error("fail to load configuration", slog.String("error", err.Error()))
		os.Exit(1)
	}

	slog.SetLogLoggerLevel(cfg.LogLevel)
	slog.Info("starting sayana-web server...")

	app, err := router.NewRouter(cfg)
	if err != nil {
		slog.Error("fail to initialize router app", slog.String("error", err.Error()))
		os.Exit(1)
	}

	if err = app.InitRoutes(); err != nil {
		slog.Error("fail to initialize routes inside router app", slog.String("error", err.Error()))
		os.Exit(1)
	}

	routerShutdown := make(chan struct{}, 1)

	go func() {
		if err := app.Listen(":3000"); err != nil {
			slog.Error("error while running fiber server", slog.String("error", err.Error()))
			if nestedErr := app.Close(); nestedErr != nil {
				slog.Error("error while shutting down fiber server", slog.String("error", err.Error()))
			}
			<-routerShutdown
		}
	}()

	sigChan := make(chan os.Signal, 1)
	signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)

	select {
	case <-sigChan:
		slog.Info("gracefully shutting down...")
		if err = app.Close(); err != nil {
			slog.Error("error while shutting down fiber server", slog.String("error", err.Error()))
		}
	case <-routerShutdown:
		slog.Info("gracefully shutting down...")
	}
}