busniess-user-center/server/http.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()
}