2024-02-24 16:30:29 +08:00
|
|
|
|
package req
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"mayfly-go/pkg/errorx"
|
|
|
|
|
|
"mayfly-go/pkg/model"
|
|
|
|
|
|
"mayfly-go/pkg/utils/structx"
|
|
|
|
|
|
"mayfly-go/pkg/validatorx"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2025-07-27 21:02:48 +08:00
|
|
|
|
// BindJson 绑定并校验请求结构体参数
|
2026-02-07 13:12:07 +08:00
|
|
|
|
func BindJson[T any](rc *Ctx) *T {
|
|
|
|
|
|
var data T
|
|
|
|
|
|
if err := rc.BindJSON(&data); err != nil {
|
2024-02-24 16:30:29 +08:00
|
|
|
|
panic(ConvBindValidationError(data, err))
|
|
|
|
|
|
} else {
|
2026-02-07 13:12:07 +08:00
|
|
|
|
return &data
|
2024-02-24 16:30:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-27 21:02:48 +08:00
|
|
|
|
// BindJsonAndCopyTo 绑定请求体中的json至form结构体,并拷贝至指定结构体
|
2026-02-07 13:12:07 +08:00
|
|
|
|
func BindJsonAndCopyTo[F, T any](rc *Ctx) (*F, *T) {
|
2025-07-27 21:02:48 +08:00
|
|
|
|
f := BindJson[F](rc)
|
2025-05-24 16:22:54 +08:00
|
|
|
|
return f, structx.CopyTo[T](f)
|
2024-02-24 16:30:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-27 21:02:48 +08:00
|
|
|
|
// BindQuery 绑定查询字符串到指定结构体
|
2026-02-07 13:12:07 +08:00
|
|
|
|
func BindQuery[T any](rc *Ctx) *T {
|
|
|
|
|
|
var data T
|
|
|
|
|
|
if err := rc.BindQuery(&data); err != nil {
|
2024-02-24 16:30:29 +08:00
|
|
|
|
panic(ConvBindValidationError(data, err))
|
|
|
|
|
|
} else {
|
2026-02-07 13:12:07 +08:00
|
|
|
|
return &data
|
2024-02-24 16:30:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-27 21:02:48 +08:00
|
|
|
|
// BindQueryAndPage 绑定查询字符串到指定结构体,并将分页信息也返回
|
2026-02-07 13:12:07 +08:00
|
|
|
|
func BindQueryAndPage[T any](rc *Ctx) (*T, model.PageParam) {
|
|
|
|
|
|
var data T
|
|
|
|
|
|
if err := rc.BindQuery(&data); err != nil {
|
2024-02-24 16:30:29 +08:00
|
|
|
|
panic(ConvBindValidationError(data, err))
|
|
|
|
|
|
} else {
|
2026-02-07 13:12:07 +08:00
|
|
|
|
return &data, rc.GetPageParam()
|
2024-02-24 16:30:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 转换参数校验错误为业务异常错误
|
|
|
|
|
|
func ConvBindValidationError(data any, err error) error {
|
|
|
|
|
|
if e, ok := err.(validator.ValidationErrors); ok {
|
|
|
|
|
|
return errorx.NewBizCode(403, validatorx.Translate2Str(data, e))
|
|
|
|
|
|
}
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|