package router import ( "errors" "fmt" "net/http" "stat/api/versionApi" "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) // 兼容 advitiseV2Router(rootRouter) // 广告管理V2(素材/位置/绑定) refundOrderRouter(rootRouter) // 退款订单管理 } // 双端下载落地页(无需登陆鉴权) router.GET("/download/:appId/:channel", versionApi.CpcDownload) } 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)) }