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