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) } // 获取分享数据 shareGroup := r.Group("/share") { // 获取背景图 shareGroup.GET("/background", api.Share.GetBackgroundImage) // 授权 shareGroup.POST("/auth", api.Share.ShareAuth) } // 后台 adminGroup := r.Group("/admin") { // 验证码 adminGroup.GET("/captcha", api.Public.GetCaptcha) // 登陆 adminGroup.POST("/login", api.AdminUser.Login) // 配置 systemGroup := adminGroup.Group("/system") { // 编辑器配置 editorGroup := systemGroup.Group("/editor") { // 编辑器-获取配置 editorGroup.GET("", api.Editor.GetEditorConfig) } } } } // 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) } } // 基础数据 baseGroup := adminGroup.Group("/base") { // 标签 labelGroup := baseGroup.Group("/label") { // 获取标签列表 labelGroup.GET("/list", api.Label.GetLabelList) // 新增标签 labelGroup.POST("", api.Label.AddLabel) // 修改标签 labelGroup.PUT("/:label_id", api.Label.PutLabel) } // 飞花令 tokenGroup := baseGroup.Group("/token") { // 获取列表-分页 tokenGroup.GET("/page", api.BaseToken.GetTokenPage) // 获取列表 tokenGroup.GET("/list", api.BaseToken.GetTokenList) // 新增 tokenGroup.POST("", api.BaseToken.AddBaseToken) // 修改 tokenGroup.PUT("/:token_id", api.BaseToken.PutBaseToken) // 飞花令明细 itemGroup := tokenGroup.Group("/item") { // 获取列表-分页 itemGroup.GET("/page", api.BaseTokenItem.GetBaseTokenItemPage) // 获取列表 itemGroup.GET("/list", api.BaseTokenItem.GetBaseTokenItemList) } } } // 统计 staticGroup := adminGroup.Group("/static") { // 获取统计数据 staticGroup.GET("", api.Static.GetStatic) } // 配置 systemGroup := adminGroup.Group("/system") { // 编辑器配置 editorGroup := systemGroup.Group("/editor") { // 编辑器-上传 editorGroup.POST("", api.Editor.EditorUpload) } } // 用户 userGroup := adminGroup.Group("/user") { // 后台用户 userAdminGroup := userGroup.Group("/admin") { // 获取列表-分页 userAdminGroup.GET("/page", api.AdminUser.GetAdminUserPage) // 新增 userAdminGroup.POST("", api.AdminUser.AddAdminUser) // 修改 userAdminGroup.PUT("/:user_id", api.AdminUser.PutAdminUser) // 修改状态 userAdminGroup.PUT("/status/:user_id", api.AdminUser.PutAdminUserStatus) // 修改禁用状态 userAdminGroup.PUT("/disabled/:user_id", api.AdminUser.PutAdminUserDisabled) // 修改密码 userAdminGroup.PUT("/password", api.AdminUser.PutAdminUserPassword) // 退出登陆 userAdminGroup.PUT("loginout", api.AdminUser.LoginOut) // 删除用户-批量 userAdminGroup.DELETE("", api.AdminUser.DeleteAdminUser) } } } // 获取分享数据 shareGroup := r.Group("/share") { // 获取知识问答数据 shareGroup.GET("/qa", api.Share.GetQuestionQa) // 获取题目数据 shareGroup.GET("/question", api.Share.GetQuestion) } }