package router import ( "fmt" "github.com/gin-gonic/gin" "net/http" "vote-video-api/api/controller" "vote-video-api/api/exception" "vote-video-api/api/middlewares" "vote-video-api/config" "vote-video-api/consts" ) // Init 初始化路由 func Init() *gin.Engine { r := gin.New() // 环境设置 if config.C.Env == "prod" { gin.SetMode(gin.ReleaseMode) } // 获取请求参数中间件-json格式下会导致接口获取不到请求数据 r.Use(middlewares.RequestParamsMiddleware()) // 日志中间件 r.Use(middlewares.Logrus()) // 异常 r.Use(gin.Recovery()) // 404处理 r.NoRoute(func(c *gin.Context) { path := c.Request.URL.Path method := c.Request.Method c.JSON(http.StatusNotFound, gin.H{ "msg": fmt.Sprintf("%s %s not found", method, path), "code": consts.ClientHttpNotFound, "data": "", }) }) // 异常处理 r.Use(exception.Recover()) // 跨域处理 r.Use(middlewares.Cors()) // 加载基础路由 api := controller.Api{} // 公开路由-不验证权限 publicRouter(r, api) // 验证jwt r.Use(middlewares.Jwt()) // 验证权限 r.Use(middlewares.Auth()) // 私有路由-验证权限 privateRouter(r, api) // 公共路由-验证权限 adminRouter(r, api) // 基础数据-验证权限 basicRouter(r, api) return r } // publicRouter 公开路由-不验证权限 func publicRouter(r *gin.Engine, api controller.Api) { // 登录 r.POST("/login", api.Login.Login) // 增加浏览数量 r.POST("/browse", api.Public.AddBrowse) // 协议 articleGroup := r.Group("/agreement") { // 获取协议详情 articleGroup.GET("", api.Basic.GetBasicAgreement) } // 数据 dataGroup := r.Group("/data") { // 获取数据详情 dataGroup.GET("", api.Public.GetData) } } // adminRouter 公共路由-验证权限 func adminRouter(r *gin.Engine, api controller.Api) { } // basicRouter 基础数据-验证权限 func basicRouter(r *gin.Engine, api controller.Api) { } // privateRouter 私有路由-验证权限 func privateRouter(r *gin.Engine, api controller.Api) { // 图文 articleGroup := r.Group("/article") { // 获取图文列表-分页 articleGroup.GET("/page", api.Article.GetArticlePage) // 获取图文详情 articleGroup.GET("/:article_id", api.Article.GetArticle) } // 视频 videoGroup := r.Group("/video") { // 获取视频列表-分页 videoGroup.GET("/page", api.Video.GetVideoPage) // 获取视频详情 videoGroup.GET("/:video_id", api.Video.GetVideo) } // 排名 rankGroup := r.Group("/rank") { // 获取文章排名列表 rankGroup.GET("/article", api.Article.GetArticleRankList) // 获取视频排名列表 rankGroup.GET("/video", api.Video.GetVideoRankList) } // 投票 voteGroup := r.Group("/vote") { // 文章投票 voteGroup.POST("/article/:article_id", api.Article.AddArticleVote) // 视频投票 voteGroup.POST("/video/:video_id", api.Video.AddVideoVote) } }