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
|
|
|
|