-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
61 lines (56 loc) · 1.61 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
package main
import (
"AnimeLifeBackEnd/core"
"AnimeLifeBackEnd/env"
"AnimeLifeBackEnd/global"
"AnimeLifeBackEnd/middlewares"
"AnimeLifeBackEnd/routes"
"AnimeLifeBackEnd/websocket"
"github.com/gin-gonic/gin"
)
func main() {
gin.SetMode(env.Mode)
router := gin.New()
global.Viper = core.InitViper()
logger := core.InitZapLogger(env.Mode)
global.Logger = logger.Sugar()
defer logger.Sync()
if env.Mode == "release" {
// register the zap logger and zap recovery which writes log to zap
router.Use(middlewares.ZapLogger(logger))
router.Use(middlewares.RecoveryWithZap(logger, true))
} else {
router.Use(gin.Logger())
router.Use(gin.Recovery())
}
router.Use(middlewares.NewCors())
// Init Mysql
global.MysqlDB = core.InitMysqlDB()
if global.MysqlDB != nil {
core.RegisterTables(global.MysqlDB)
db, _ := global.MysqlDB.DB()
defer db.Close()
}
// Init Redis
global.RedisDB = core.InitRedisDB()
authJWT := middlewares.InitJWTAuth()
global.WsHub = websocket.NewHub()
go global.WsHub.Run()
apiEndpointGroup := routes.RouterGroupApp.RouterGroup
authEndpoints := routes.RouterGroupApp.AuthRouter
websocketEndpoints := routes.RouterGroupApp.WebsocketRouter
metricsEndpoints := routes.RouterGroupApp.MetricsRouter
// 注册所有不需要认证的endpoint
publicGroup := router.Group("")
{
authEndpoints.AddAuthRoutes(publicGroup, authJWT)
websocketEndpoints.AddWebsocketRoutes(publicGroup)
metricsEndpoints.AddMetricsRoutes(publicGroup)
}
privateGroup := router.Group("")
privateGroup.Use(authJWT.MiddlewareFunc())
{
apiEndpointGroup.AddApiRoutes(privateGroup, publicGroup)
}
router.Run(":8080")
}