main.main   B
last analyzed

Complexity

Conditions 7

Size

Total Lines 46
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 31
nop 0
dl 0
loc 46
rs 7.736
c 0
b 0
f 0
1
package main
2
3
import (
4
	"os"
5
	"os/signal"
6
	"syscall"
7
8
	"github.com/architectv/estate-task/pkg/handler"
9
	"github.com/architectv/estate-task/pkg/repository"
10
	"github.com/architectv/estate-task/pkg/service"
11
	"github.com/gofiber/fiber/v2"
12
	"github.com/gofiber/fiber/v2/middleware/logger"
13
	"github.com/sirupsen/logrus"
14
	"github.com/spf13/viper"
15
)
16
17
func main() {
18
	logrus.SetFormatter(new(logrus.JSONFormatter))
19
20
	if err := initConfig(); err != nil {
21
		logrus.Fatalf("error initializing configs: %s", err.Error())
22
	}
23
24
	db, err := repository.NewPostgresDB(repository.Config{
25
		Host:     viper.GetString("db.host"),
26
		Port:     viper.GetString("db.port"),
27
		Username: viper.GetString("db.username"),
28
		DBName:   viper.GetString("db.dbname"),
29
		SSLMode:  viper.GetString("db.sslmode"),
30
		Password: viper.GetString("db.password"),
31
	})
32
	if err != nil {
33
		logrus.Fatalf("failed to initialize db: %s", err.Error())
34
	}
35
36
	repos := repository.NewRepository(db)
37
	services := service.NewService(repos)
38
	handlers := handler.NewHandler(services)
39
40
	app := fiber.New()
41
	app.Use(logger.New())
42
	handlers.InitRoutes(app)
43
44
	go func() {
45
		if err := app.Listen(viper.GetString("port")); err != nil {
46
			logrus.Fatalf("failed to listen: %s", err.Error())
47
		}
48
	}()
49
50
	logrus.Println("App started")
51
52
	quit := make(chan os.Signal, 1)
53
	signal.Notify(quit, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
54
	<-quit
55
56
	logrus.Println("Gracefully shutting down...")
57
	if err := app.Shutdown(); err != nil {
58
		logrus.Errorf("error occurred on server shutting down: %s", err.Error())
59
	}
60
61
	if err := db.Close(); err != nil {
62
		logrus.Errorf("error occurred on db connection close: %s", err.Error())
63
	}
64
}
65
66
func initConfig() error {
67
	viper.AddConfigPath("configs")
68
	viper.SetConfigName("config")
69
	return viper.ReadInConfig()
70
}
71