WrapBody 是一个中间件,用于包裹业务逻辑函数,自动绑定请求体、处理响应并集中管理错误处理。
(bizFn func(ctx *gin.Context, req Req) (Result, error))
| 8 | |
| 9 | // WrapBody 是一个中间件,用于包裹业务逻辑函数,自动绑定请求体、处理响应并集中管理错误处理。 |
| 10 | func WrapBody[Req any](bizFn func(ctx *gin.Context, req Req) (Result, error)) gin.HandlerFunc { |
| 11 | return func(ctx *gin.Context) { |
| 12 | var req Req |
| 13 | if err := ctx.ShouldBindJSON(&req); err != nil { |
| 14 | apiresponse.BadRequestError(ctx, "无效的请求参数") |
| 15 | return |
| 16 | } |
| 17 | |
| 18 | res, err := bizFn(ctx, req) |
| 19 | if err != nil { |
| 20 | apiresponse.InternalServerErrorWithDetails(ctx, gin.H{"error": err.Error()}, res.Msg) |
| 21 | return |
| 22 | } |
| 23 | |
| 24 | ctx.JSON(http.StatusOK, apiresponse.ApiResponse{ |
| 25 | Code: res.Code, |
| 26 | Data: res.Data, |
| 27 | Message: res.Msg, |
| 28 | }) |
| 29 | } |
| 30 | } |
| 31 | |
| 32 | func WrapParam[Req any](bizFn func(ctx *gin.Context, req Req) (Result, error)) gin.HandlerFunc { |
| 33 | return func(ctx *gin.Context) { |
no test coverage detected