From 5e845c8fb684c08f43da82614d7aeebf4adc01bf Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 3 Mar 2023 18:14:48 +0800 Subject: [PATCH] api to rpc --- internal/api/a2r/api2rpc.go | 43 +++++++++++++++++++++++++++++++++++-- internal/apiresp/resp.go | 2 +- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/internal/api/a2r/api2rpc.go b/internal/api/a2r/api2rpc.go index 92df6161b..a0b2263e5 100644 --- a/internal/api/a2r/api2rpc.go +++ b/internal/api/a2r/api2rpc.go @@ -31,12 +31,51 @@ func Call[A, B, C any]( } cli, err := client() if err != nil { - resp = apiresp.Error(constant.ErrInternalServer.Wrap(err.Error())) // 参数校验失败 + resp = apiresp.Error(constant.ErrInternalServer.Wrap(err.Error())) // 获取RPC连接失败 return } data, err := rpc(cli, c, &req) if err != nil { - resp = apiresp.Error(err) // 参数校验失败 + resp = apiresp.Error(err) // RPC调用失败 + return + } + resp = apiresp.Success(data) // 成功 +} + +func CallAny[A, B, C, D any]( + rpc func(client C, ctx context.Context, req *A, options ...grpc.CallOption) (*B, error), + client func() (C, error), + c *gin.Context, + apiReq *D, + cp func(apiReq *D, rpcReq *A) error, +) { + var resp *apiresp.ApiResponse + defer func() { + c.JSON(http.StatusOK, resp) + }() + if err := c.BindJSON(apiReq); err != nil { + resp = apiresp.Error(constant.ErrArgs.Wrap(err.Error())) // 参数错误 + return + } + var req A + if err := cp(apiReq, &req); err != nil { + resp = apiresp.Error(constant.ErrArgs.Wrap(err.Error())) // 参数错误 + return + } + if check, ok := any(&req).(interface{ Check() error }); ok { + if err := check.Check(); err != nil { + resp = apiresp.Error(constant.ErrArgs.Wrap(err.Error())) // 参数校验失败 + return + } + } + cli, err := client() + if err != nil { + resp = apiresp.Error(constant.ErrInternalServer.Wrap(err.Error())) // 获取RPC连接失败 + return + } + data, err := rpc(cli, c, &req) + if err != nil { + resp = apiresp.Error(err) // RPC调用失败 return } resp = apiresp.Success(data) // 成功 diff --git a/internal/apiresp/resp.go b/internal/apiresp/resp.go index 1ee9d3c76..ad3eade2a 100644 --- a/internal/apiresp/resp.go +++ b/internal/apiresp/resp.go @@ -14,5 +14,5 @@ func Success(data any) *ApiResponse { } func Error(err error) *ApiResponse { - return &ApiResponse{} + return &ApiResponse{ErrCode: 10000, ErrMsg: err.Error()} }