148 lines
2.9 KiB
Go

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)
}
}