middleware checker

pull/458/head
withchao 2 years ago
parent 9afbd851c9
commit 4edf0c1ffb

@ -22,13 +22,10 @@ func Call[A, B, C any](
apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) // 参数错误 apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) // 参数错误
return return
} }
if check, ok := any(&req).(checker.Checker); ok { if err := checker.Validate(&req); err != nil {
if err := check.Check(); err != nil {
log.ZWarn(c, "custom check error", err, "req", req)
apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error())) // 参数校验失败 apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error())) // 参数校验失败
return return
} }
}
data, err := rpc(client, c, &req) data, err := rpc(client, c, &req)
if err != nil { if err != nil {
apiresp.GinError(c, err) // RPC调用失败 apiresp.GinError(c, err) // RPC调用失败

@ -3,3 +3,12 @@ package checker
type Checker interface { type Checker interface {
Check() error Check() error
} }
func Validate(args any) error {
if checker, ok := args.(Checker); ok {
if err := checker.Check(); err != nil {
return err
}
}
return nil
}

@ -92,13 +92,13 @@ func RpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.Unary
return nil, status.New(codes.InvalidArgument, err.Error()).Err() return nil, status.New(codes.InvalidArgument, err.Error()).Err()
} }
} }
if err := req.(checker.Checker); err != nil {
if err := err.Check(); err != nil {
return nil, status.New(codes.InvalidArgument, err.Error()).Err()
}
}
log.ZInfo(ctx, "rpc server req", "funcName", funcName, "req", rpcString(req)) log.ZInfo(ctx, "rpc server req", "funcName", funcName, "req", rpcString(req))
resp, err = handler(ctx, req) resp, err = func() (interface{}, error) {
if err := checker.Validate(req); err != nil {
return nil, err
}
return handler(ctx, req)
}()
if err == nil { if err == nil {
log.ZInfo(ctx, "rpc server resp", "funcName", funcName, "resp", rpcString(resp)) log.ZInfo(ctx, "rpc server resp", "funcName", funcName, "resp", rpcString(resp))
return resp, nil return resp, nil

Loading…
Cancel
Save