2024-07-02 17:37:50 +08:00

197 lines
4.2 KiB
Go

package router
import (
"fmt"
"github.com/gin-gonic/gin"
"knowledge/api/controller"
"knowledge/api/exception"
"knowledge/api/middlewares"
"knowledge/config"
"knowledge/consts"
"net/http"
)
// 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) {
migrateGroup := r.Group("/migrate")
{
migrateGroup.GET("", api.Migrate.Migrate)
}
adminGroup := r.Group("/admin")
// 验证码
adminGroup.GET("/captcha", api.Public.GetCaptcha)
// 登陆
adminGroup.POST("/login", api.AdminUser.Login)
// 新增题目
adminGroup.POST("/question/test", api.Question.AddQuestionTest)
// 修改题目
adminGroup.PUT("/question/test/:question_id", api.Question.PutQuestionTest)
// 分享
shareGroup := r.Group("/share")
{
// 获取分享数据
shareGroup.GET("", api.Share.GetShare)
}
}
// 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) {
adminGroup := r.Group("/admin")
// 题目
questionGroup := adminGroup.Group("/question")
{
// 获取题目列表-分页
questionGroup.POST("/page", api.Question.GetQuestionPage)
// 获取题目详情
questionGroup.GET("/:question_id", api.Question.GetQuestion)
// 新增题目
questionGroup.POST("", api.Question.AddQuestion)
// 修改题目
questionGroup.PUT("/:question_id", api.Question.PutQuestion)
// 删除题目
questionGroup.DELETE("", api.Question.DeleteQuestion)
// 获取题目数量
questionGroup.GET("/count", api.Question.GetQuestionCount)
}
// 问答
qaGroup := adminGroup.Group("/qa")
{
// 获取问答题库列表-分页
qaGroup.POST("/page", api.QuestionQa.GetQuestionQaPage)
// 新增问答题库
qaGroup.POST("", api.QuestionQa.AddQuestionQa)
// 修改问答题库
qaGroup.PUT("/:qa_id", api.QuestionQa.PutQuestionQa)
// 修改问答题库密码
qaGroup.PUT("/password/:qa_id", api.QuestionQa.PutQuestionQaPassword)
// 修改问答题库有效期
qaGroup.PUT("/expire/:qa_id", api.QuestionQa.PutQuestionQaExpire)
// 修改问答题库规则解释
qaGroup.PUT("/rule/:qa_id", api.QuestionQa.PutQuestionQaRule)
// 获取问答题库详情
qaGroup.GET("/:qa_id", api.QuestionQa.GetQuestionQa)
// 题库明细
itemGroup := qaGroup.Group("/item")
{
// 获取问答题库明细列表-分页
itemGroup.POST("/page", api.QuestionQaItem.GetQuestionQaItemPage)
// 删除问答题库明细
itemGroup.DELETE("", api.QuestionQaItem.DeleteQuestionQaItem)
// 修改必选
itemGroup.PUT("/must/:item_id", api.QuestionQaItem.PutQuestionQaItemMust)
}
}
// 标签
labelGroup := adminGroup.Group("/label")
{
// 获取标签列表
labelGroup.GET("/list", api.Label.GetLabelList)
// 新增标签
labelGroup.POST("", api.Label.AddLabel)
// 修改标签
labelGroup.PUT("/:label_id", api.Label.PutLabel)
}
// 统计
staticGroup := adminGroup.Group("/static")
{
// 获取统计数据
staticGroup.GET("", api.Static.GetStatic)
}
}