mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-30 11:11:28 +08:00
96
kit/ginx/ginx.go
Normal file
96
kit/ginx/ginx.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package ginx
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"pandax/kit/biz"
|
||||
"pandax/kit/logger"
|
||||
"pandax/kit/model"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// 绑定并校验请求结构体参数 结构体添加 例如: binding:"required" 或binding:"required,gt=10"
|
||||
func BindJsonAndValid(g *gin.Context, data any) {
|
||||
if err := g.ShouldBindJSON(data); err != nil {
|
||||
panic(any(biz.NewBizErr("传参格式错误:" + err.Error())))
|
||||
}
|
||||
}
|
||||
|
||||
// 绑定查询字符串到
|
||||
func BindQuery(g *gin.Context, data any) {
|
||||
if err := g.ShouldBindQuery(data); err != nil {
|
||||
panic(any(biz.NewBizErr(err.Error())))
|
||||
}
|
||||
}
|
||||
|
||||
func ParamsToAny(g *gin.Context, in any) {
|
||||
vars := make(map[string]any)
|
||||
for _, v := range g.Params {
|
||||
vars[v.Key] = v.Value
|
||||
}
|
||||
marshal, _ := json.Marshal(vars)
|
||||
err := json.Unmarshal(marshal, in)
|
||||
biz.ErrIsNil(err, "error get path value encoding unmarshal")
|
||||
return
|
||||
}
|
||||
|
||||
// 获取分页参数
|
||||
func GetPageParam(g *gin.Context) *model.PageParam {
|
||||
return &model.PageParam{PageNum: QueryInt(g, "pageNum", 1), PageSize: QueryInt(g, "pageSize", 10)}
|
||||
}
|
||||
|
||||
// 获取查询参数中指定参数值,并转为int
|
||||
func QueryInt(g *gin.Context, qm string, defaultInt int) int {
|
||||
qv := g.Query(qm)
|
||||
if qv == "" {
|
||||
return defaultInt
|
||||
}
|
||||
qvi, err := strconv.Atoi(qv)
|
||||
biz.ErrIsNil(err, "query param not int")
|
||||
return qvi
|
||||
}
|
||||
|
||||
// 获取路径参数
|
||||
func PathParamInt(g *gin.Context, pm string) int {
|
||||
value, _ := strconv.Atoi(g.Param(pm))
|
||||
return value
|
||||
}
|
||||
|
||||
// 文件下载
|
||||
func Download(g *gin.Context, filename string) {
|
||||
g.Writer.Header().Add("success", "true")
|
||||
g.Writer.Header().Set("Content-Length", "-1")
|
||||
g.Writer.Header().Set("Content-Disposition", "attachment; filename="+filename)
|
||||
g.File(filename)
|
||||
}
|
||||
|
||||
// 返回统一成功结果
|
||||
func SuccessRes(g *gin.Context, data any) {
|
||||
g.JSON(http.StatusOK, model.Success(data))
|
||||
}
|
||||
|
||||
// 返回失败结果集
|
||||
func ErrorRes(g *gin.Context, err any) {
|
||||
if err != nil {
|
||||
|
||||
}
|
||||
switch t := err.(type) {
|
||||
case *biz.BizError:
|
||||
g.JSON(http.StatusOK, model.Error(t))
|
||||
break
|
||||
case error:
|
||||
g.JSON(http.StatusOK, model.ServerError())
|
||||
logger.Log.Error(t)
|
||||
// panic(err)
|
||||
break
|
||||
case string:
|
||||
g.JSON(http.StatusOK, model.ServerError())
|
||||
logger.Log.Error(t)
|
||||
// panic(err)
|
||||
break
|
||||
default:
|
||||
logger.Log.Error(t)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user