zhangqian
2023-08-09 4f69f07912ea3da9770983c9d4bacbcebbb366e4
pkg/contextx/contextx.go
@@ -1,101 +1,102 @@
package contextx
import (
   "aps_crm/pkg/ecode"
   "aps_crm/pkg/logx"
   "github.com/gin-gonic/gin"
   "net/http"
)
type (
   Context struct {
      ctx       *gin.Context
      paramsMap map[string]interface{}
   }
   Response struct {
      Code int         `json:"code"`
      Data interface{} `json:"data"`
      Msg  string      `json:"msg"`
   }
)
func NewContext(ctx *gin.Context, params interface{}) (r *Context, isAllow bool) {
   r = &Context{
      ctx: ctx,
   }
   if r.ctx.Request.Method == "OPTIONS" {
      r.ctx.String(http.StatusOK, "")
      return
   }
   defer func() {
      query := r.ctx.Request.URL.RawQuery
      if query != "" {
         query = "?" + query
      }
      urlPath := r.ctx.Request.URL.Path
      logx.Infof("%s | %s %s | uid: %s | %+v", ctx.ClientIP(), r.ctx.Request.Method, urlPath+query, r.GetUserId(), params)
   }()
   // validate params
   if params != nil {
      if err := r.ctx.ShouldBind(params); err != nil {
         r.Fail(ecode.ParamsErr)
         return
      }
   }
   isAllow = true
   return
}
func (slf *Context) GetRequestPath() (r string) {
   r = slf.ctx.Request.URL.Path
   return
}
func (slf *Context) GetUserId() (r string) {
   v := slf.paramsMap["userId"]
   switch v.(type) {
   case string:
      r = v.(string)
   }
   return
}
func (slf *Context) Result(code int, data interface{}, msg string) {
   slf.ctx.JSON(http.StatusOK, Response{
      Code: code,
      Data: data,
      Msg:  msg,
   })
}
func (slf *Context) Ok() {
   slf.Result(ecode.OK, map[string]interface{}{}, "")
}
func (slf *Context) OkWithDetailed(data interface{}) {
   slf.Result(ecode.OK, data, "")
}
func (slf *Context) Fail(errCode int) {
   slf.Result(errCode, map[string]interface{}{}, ecode.GetMsg(errCode))
}
func (slf *Context) FailWithMsg(errCode int, msg string) {
   slf.Result(errCode, map[string]interface{}{}, msg)
}
func (slf *Context) FailWithDetailed(errCode int, data interface{}) {
   slf.Result(errCode, data, ecode.GetMsg(errCode))
}
func (slf *Context) GetCtx() *gin.Context {
   return slf.ctx
}
func (slf *Context) SetCtx(c *gin.Context) *Context {
   slf.ctx = c
   return slf
}
package contextx
import (
   "aps_crm/pkg/ecode"
   "aps_crm/pkg/logx"
   "github.com/gin-gonic/gin"
   "net/http"
)
type (
   Context struct {
      ctx       *gin.Context
      paramsMap map[string]interface{}
   }
   Response struct {
      Code int         `json:"code"`
      Data interface{} `json:"data"`
      Msg  string      `json:"msg"`
   }
)
func NewContext(ctx *gin.Context, params interface{}) (r *Context, isAllow bool) {
   r = &Context{
      ctx: ctx,
   }
   if r.ctx.Request.Method == "OPTIONS" {
      r.ctx.String(http.StatusOK, "")
      return
   }
   defer func() {
      query := r.ctx.Request.URL.RawQuery
      if query != "" {
         query = "?" + query
      }
      urlPath := r.ctx.Request.URL.Path
      logx.Infof("%s | %s %s | uid: %s | %+v", ctx.ClientIP(), r.ctx.Request.Method, urlPath+query, r.GetUserId(), params)
   }()
   // validate params
   if params != nil {
      if err := r.ctx.ShouldBind(params); err != nil {
         logx.Errorf("bind param error: %v", err.Error())
         r.Fail(ecode.ParamsErr)
         return
      }
   }
   isAllow = true
   return
}
func (slf *Context) GetRequestPath() (r string) {
   r = slf.ctx.Request.URL.Path
   return
}
func (slf *Context) GetUserId() (r string) {
   v := slf.paramsMap["userId"]
   switch v.(type) {
   case string:
      r = v.(string)
   }
   return
}
func (slf *Context) Result(code int, data interface{}, msg string) {
   slf.ctx.JSON(http.StatusOK, Response{
      Code: code,
      Data: data,
      Msg:  msg,
   })
}
func (slf *Context) Ok() {
   slf.Result(ecode.OK, map[string]interface{}{}, "")
}
func (slf *Context) OkWithDetailed(data interface{}) {
   slf.Result(ecode.OK, data, "")
}
func (slf *Context) Fail(errCode int) {
   slf.Result(errCode, map[string]interface{}{}, ecode.GetMsg(errCode))
}
func (slf *Context) FailWithMsg(errCode int, msg string) {
   slf.Result(errCode, map[string]interface{}{}, msg)
}
func (slf *Context) FailWithDetailed(errCode int, data interface{}) {
   slf.Result(errCode, data, ecode.GetMsg(errCode))
}
func (slf *Context) GetCtx() *gin.Context {
   return slf.ctx
}
func (slf *Context) SetCtx(c *gin.Context) *Context {
   slf.ctx = c
   return slf
}