package router import ( "fmt" "github.com/gin-gonic/gin" "hepa-calc-api/api/controller" "hepa-calc-api/api/exception" "hepa-calc-api/api/middlewares" "hepa-calc-api/config" "hepa-calc-api/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) { // 登陆 loginGroup := r.Group("/login") { // 登录 loginGroup.POST("", api.Login.Login) } // 验证码 codeGroup := r.Group("/code") { // 获取手机号验证码 codeGroup.POST("/phone", api.Public.GetPhoneCode) } // 首页 r.GET("/index", api.Public.GetIndex) // 回调 callbackGroup := r.Group("/callback") { // 微信支付回调 wxpayGroup := callbackGroup.Group("/wxpay") { // 单项 singleGroup := wxpayGroup.Group("/single") { // 支付成功 singleGroup.POST("", api.CallBack.WxPaySingle) // 退款 singleGroup.POST("/refund", api.CallBack.WxPaySingleRefund) } // 会员 memberGroup := wxpayGroup.Group("/member") { // 支付成功 memberGroup.POST("", api.CallBack.WxPayMember) // 退款 memberGroup.POST("/refund", api.CallBack.WxPayMemberRefund) } } } // 支付中心 payGroup := r.Group("/pay") { // 获取订单支付数据 payGroup.POST("/order", api.Pay.GetPayOrder) } // 会员配置 memberGroup := r.Group("/member") { // 获取会员配置数据-最少立减金额 memberGroup.GET("/least", api.SystemMember.GetSystemMemberLeast) } // 问题 questionGroup := r.Group("/question") { // 获取问题列表-分页 questionGroup.POST("/page", api.Question.GetQuestionPage) // 获取问题列表-热榜 questionGroup.GET("/hot", api.Question.GetQuestionHot) // 获取问题详情 questionGroup.GET("/:question_id", api.Question.GetQuestion) // 获取问题列表-猜你喜欢 questionGroup.GET("/like", api.Question.GetGuessUserLikeList) } // 分类 classGroup := r.Group("/class") { // 获取分类列表 classGroup.GET("/list", api.Basic.GetBaseClassList) // 获取分类详情 classGroup.GET("/:class_id", api.Basic.GetBaseClass) // 获取分类列表-推荐搜索 classGroup.GET("/recommend/list", api.Basic.GetBaseClassRecommendList) } } // adminRouter 公共路由-验证权限 func adminRouter(r *gin.Engine, api controller.Api) { // 签名 signGroup := r.Group("/sign") { // 获取oss签名 signGroup.GET("/oss", api.Public.GetOssSign) } } // basicRouter 基础数据-验证权限 func basicRouter(r *gin.Engine, api controller.Api) { // 地区 areaGroup := r.Group("/area") { // 获取地区列表 areaGroup.GET("/list", api.Basic.GetAreaList) } // 慢性疾病 chronicGroup := r.Group("/chronic") { // 获取慢性疾病列表 chronicGroup.GET("/list", api.Basic.GetChronicDiseaseList) } // 疾病分类 diseaseGroup := r.Group("/disease") { // 获取疾病分类列表 diseaseGroup.GET("/list", api.Basic.GetDiseaseList) } // 民族 nationGroup := r.Group("/nation") { // 获取民族列表 nationGroup.GET("/list", api.Basic.GetNationList) } } // privateRouter 私有路由-验证权限 func privateRouter(r *gin.Engine, api controller.Api) { // 问题 questionGroup := r.Group("/question") { // 获取问题解锁状态 questionGroup.GET("/unlock/status/:question_id", api.Question.GetQuestionUnlockStatus) // 点击次数 clickGroup := questionGroup.Group("/click") { // 增加问题点击次数(点击进入详情页的人次) clickGroup.PUT("/:question_id", api.Question.PutQuestionClickCount) // 增加问题提交次数(提交个人信息进行了算算的人次) clickGroup.PUT("/submit/:question_id", api.Question.PutQuestionSubmitCount) } } // 用户 centerGroup := r.Group("/user") { // 获取用户数据-基本信息 centerGroup.GET("", api.User.GetUser) // 获取用户数据-详情信息 centerGroup.GET("/info", api.User.GetUserInfo) // 修改用户数据-基本信息 centerGroup.PUT("", api.User.PutUser) // 用户病例 caseGroup := centerGroup.Group("/case") { // 获取用户数据-病例 caseGroup.GET("", api.UserCase.GetUserCase) // 修改用户数据-病例 caseGroup.PUT("", api.UserCase.PutUserCase) } } // 优惠卷 couponGroup := r.Group("/coupon") { // 获取优惠卷列表-分页 couponGroup.GET("", api.UserCoupon.GetUserCouponPage) // 获取还未弹窗的优惠卷 couponGroup.GET("/unnotified", api.UserCoupon.GetUserCouponUnnotified) // 修改还未弹窗的优惠卷 couponGroup.PUT("/unnotified", api.UserCoupon.PutUserCouponUnnotified) usableGroup := couponGroup.Group("/usable") { // 获取患者可使用优惠卷-单项 usableGroup.GET("/question", api.UserCoupon.GetUserUsableQuestionCoupon) // 获取患者可使用优惠卷-会员 usableGroup.GET("/member", api.UserCoupon.GetUserUsableMemberCoupon) } } // 收藏 collectionGroup := r.Group("/collection") { // 问题 questionGroup := collectionGroup.Group("/question") { // 获取用户收藏题目列表-分页 questionGroup.GET("", api.UserCollection.GetUserCollectionPage) // 收藏题目 questionGroup.POST("", api.UserCollection.PutUserCollection) // 取消收藏题目 questionGroup.PUT("/cancel", api.UserCollection.PutUserCollectionCancel) } } // 订单 orderGroup := r.Group("/order") { // 单项订单 singleGroup := orderGroup.Group("/single") { // 获取单项订单列表-分页 singleGroup.GET("/page", api.OrderSingle.GetOrderSinglePage) // 创建单项订单 singleGroup.POST("", api.OrderSingle.AddOrderSingle) // 取消单项订单 singleGroup.PUT("/cancel/:order_id", api.OrderSingle.PutCancelOrderSingle) // 获取单项订单支付数据 singleGroup.GET("/pay/:order_id", api.OrderSingle.GetOrderSinglePay) // 删除单项订单 singleGroup.DELETE("/:order_id", api.OrderSingle.DeleteOrderSingle) // 查询订单支付状态-单项 singleGroup.GET("/pay/status/:order_id", api.OrderSingle.GetOrderSinglePayStatus) // 上传单项答案 singleGroup.POST("/answer/:order_id", api.OrderSingle.PutOrderSingleAnswer) // 获取单项答案 singleGroup.GET("/answer/:order_id", api.OrderSingle.GetOrderSingleAnswer) } // 会员订单 memberGroup := orderGroup.Group("/member") { // 获取会员订单列表-分页 memberGroup.GET("/page", api.OrderMember.GetOrderMemberPage) // 创建会员订单 memberGroup.POST("", api.OrderMember.AddOrderMember) // 获取会员订单支付数据 memberGroup.GET("/pay/:order_id", api.OrderMember.GetOrderMemberPay) // 删除会员订单 memberGroup.DELETE("/:order_id", api.OrderMember.DeleteOrderMember) // 查询订单支付状态-会员 memberGroup.GET("/pay/status/:order_id", api.OrderMember.GetOrderMemberPayStatus) // 获取会员订单列表-最近下单 memberGroup.GET("/recent/list", api.OrderMember.GetOrderMemberRecentList) } } // 会员配置 memberGroup := r.Group("/member") { // 获取会员配置数据 memberGroup.GET("", api.SystemMember.GetSystemMember) } }