Files
stat_center/router/base.go
T
2026-05-20 16:13:58 +08:00

112 lines
3.0 KiB
Go

package router
import (
"errors"
"fmt"
"net/http"
"stat/common/enum/consts"
"stat/middleware/auth"
"stat/middleware/cors"
"stat/statg"
"strconv"
"github.com/gin-gonic/gin"
_ "stat/docs"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
var (
modMap = map[consts.RunMod]string{
consts.RunModeDev: gin.DebugMode,
consts.RunModeTest: gin.TestMode,
consts.RunModRelease: gin.ReleaseMode,
}
)
var (
apiNot = errors.New("ApiNotFound")
methodNot = errors.New("MethodNotFound")
)
// SetupGin 初始化gin router
func SetupGin() *gin.Engine {
ginMod()
router := ginEngine()
registerMiddleware(router)
registerRouter(router)
if statg.Conf.RunMod != consts.RunModRelease {
setGinSwagger(router)
}
return router
}
func ginMod() {
mod := modMap[statg.Conf.RunMod]
if mod == "" {
mod = "debug"
}
gin.SetMode(mod)
}
func ginEngine() *gin.Engine {
router := gin.Default()
router.HandleMethodNotAllowed = true
router.MaxMultipartMemory = 60 << 20
//pprof.Register(router, "/1D35BBAB35F3/pprof")
router.Use(cors.Cors(&cors.Options{
Origin: nil,
Methods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodHead, http.MethodDelete},
AllowedHeaders: []string{"Content-Length", "Content-Type", "Authorization", "X-User-Agent", "User-Agent"},
ExposedHeaders: []string{"Content-Disposition", "Refresh-Authorization", "Cur-Ver"},
OptionsSuccessStatus: http.StatusOK,
}))
router.NoMethod(func(c *gin.Context) {
c.JSON(http.StatusMethodNotAllowed, methodNot)
})
router.NoRoute(func(c *gin.Context) {
c.JSON(http.StatusNotFound, apiNot)
})
return router
}
func registerMiddleware(router *gin.Engine) {
// router.Use(limit.Limit())
router.Use(auth.Auth)
}
func registerRouter(router *gin.Engine) {
rootRouter := router.Group("/api/stat")
{
adminRouter(rootRouter) // 管理员管理及登陆
authorityRouter(rootRouter) // 角色权限管理
appInfoRouter(rootRouter) // App及落地页管理
channelRouter(rootRouter) // 渠道扣量结算等管理及统计
agentRouter(rootRouter) // 代理管理及统计模块
statRouter(rootRouter) // 数据统计
fileRouter(rootRouter) // 文件上传
opLogRouter(rootRouter) // 操作日志管理
adsRouter(rootRouter) // 广告管理
versionRouter(rootRouter) // 版本落地页
announceRouter(rootRouter) // 公告管理
activityRouter(rootRouter) // 活动抽奖
statadvertiseRouter(rootRouter) // 广告统计
innerRouter(rootRouter) // 服务器同步
applicationRouter(rootRouter) // 配置app应用
appcategoryRouter(rootRouter) // app分类
userInviteRouter(rootRouter) // 兼容
}
}
func setGinSwagger(router *gin.Engine) {
url := ginSwagger.URL(fmt.Sprintf("http://%s:%s/swagger/doc.json", statg.Conf.Host, strconv.Itoa(statg.Conf.Port)))
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
}