-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
93 lines (81 loc) · 2.13 KB
/
main.go
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/gomodule/redigo/redis"
"log"
"phantom/apis/filter"
"phantom/apis/home"
"phantom/apis/product"
"phantom/config"
"phantom/dataLayer"
"phantom/ginRouter"
"phantom/validator"
"time"
)
func main() {
// Read config struct
envConfig := config.ReadEnvConfig()
// Open sql database connection
sqlDb := openSqlDB(envConfig)
defer func(db *sql.DB) {
dbCloseErr := db.Close()
if dbCloseErr != nil {
log.Fatal(dbCloseErr)
}
}(sqlDb)
// Open redis cache pool
redisCachePool := openRedisCachePool(envConfig)
defer func(pool *redis.Pool) {
redisCloseErr := pool.Close()
if redisCloseErr != nil {
log.Fatal(redisCloseErr)
}
}(redisCachePool)
// Pre-populate redis cache pool
cachePopulateErr := dataLayer.PopulateCacheLayer(sqlDb, redisCachePool)
if cachePopulateErr != nil {
log.Fatal(cachePopulateErr)
return
}
// Initialize the validator
validator.Init(redisCachePool)
// Initialize ginRouter
router, routerInitErr := ginRouter.Initialize(redisCachePool, sqlDb)
if routerInitErr != nil {
log.Fatal(routerInitErr)
return
}
// Register routes in router
router.GET("/home", home.ApiHandler)
router.GET("/filter", filter.ApiHandler)
router.GET("/product", product.ApiHandler)
router.Static("/assets","./assets/")
// Start router
err := router.Run()
if err != nil {
return
}
}
func openSqlDB(envConfig *config.EnvConfig) *sql.DB {
dbConfig := envConfig.Database
dataSourceName := fmt.Sprintf("%s:@%s(%s:%s)/%s?parseTime=true",
dbConfig.Username, dbConfig.Network, dbConfig.Host, dbConfig.Port, dbConfig.Name)
db, dbOpenErr := sql.Open(dbConfig.Driver, dataSourceName)
if dbOpenErr != nil {
panic(dbOpenErr)
}
return db
}
func openRedisCachePool(envConfig *config.EnvConfig) *redis.Pool {
cacheConfig := envConfig.Cache
address := fmt.Sprintf("%s:%d", cacheConfig.Host, cacheConfig.Port)
return &redis.Pool{
Dial: func() (redis.Conn, error) {
return redis.Dial(cacheConfig.Network, address)
},
MaxIdle: cacheConfig.MaxIdle,
IdleTimeout: time.Duration(cacheConfig.IdleTimeout) * time.Second,
}
}