89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
|
|
"busniess-user-center/config"
|
|
"busniess-user-center/pkg/middleware/decoder"
|
|
"busniess-user-center/pkg/middleware/logger"
|
|
"busniess-user-center/pkg/middleware/recovery"
|
|
"busniess-user-center/pkg/validator"
|
|
"busniess-user-center/server/user"
|
|
|
|
"github.com/gin-contrib/gzip"
|
|
"github.com/gin-contrib/pprof"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gin-gonic/gin/binding"
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
"github.com/samber/do"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
const (
|
|
httpPost = ":9000"
|
|
)
|
|
|
|
// todo gin 注册自己的校验器
|
|
func addr() string {
|
|
conf := do.MustInvoke[*config.AppConfig](nil)
|
|
if conf.App.Port > 0 {
|
|
return ":" + strconv.Itoa(conf.App.Port)
|
|
}
|
|
|
|
return httpPost
|
|
}
|
|
|
|
func RunWebServer(ctx context.Context) error {
|
|
// 启用插件
|
|
engine, err := newGinEngine()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return engine.Run(addr())
|
|
}
|
|
|
|
func newGinEngine() (*gin.Engine, error) {
|
|
setBindValidator()
|
|
engine := gin.New()
|
|
|
|
pprof.Register(engine)
|
|
|
|
// 设置解压插件
|
|
engine.Use(gzip.Gzip(gzip.DefaultCompression))
|
|
|
|
// 设置日志插件
|
|
slogger := do.MustInvoke[*zap.SugaredLogger](nil)
|
|
conf := do.MustInvoke[*config.AppConfig](nil)
|
|
engine.Use(logger.GinLoggerMiddleware(slogger))
|
|
engine.Use(recovery.GinRecoverMiddleware(slogger))
|
|
|
|
// 解码器插件
|
|
engine.Use(decoder.Base64Decoder(slogger))
|
|
|
|
engine.GET("/metrics", gin.WrapH(promhttp.Handler()))
|
|
engine.GET("/version", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{
|
|
"version": conf.GetVersion(),
|
|
})
|
|
})
|
|
|
|
if err := registerWebRoute(engine); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return engine, nil
|
|
}
|
|
|
|
func registerWebRoute(engine *gin.Engine) error {
|
|
// 注册jwt插件-除了登陆接口
|
|
userApi := engine.Group("/user")
|
|
user.RegisterRoute(userApi)
|
|
return nil
|
|
}
|
|
|
|
func setBindValidator() {
|
|
binding.Validator = validator.NewValidator()
|
|
}
|