diff --git a/internal/api/a2r/api2rpc.go b/internal/api/a2r/api2rpc.go index a0b2263e5..d60eeb8bb 100644 --- a/internal/api/a2r/api2rpc.go +++ b/internal/api/a2r/api2rpc.go @@ -6,7 +6,6 @@ import ( "context" "github.com/gin-gonic/gin" "google.golang.org/grpc" - "net/http" ) func Call[A, B, C any]( @@ -14,69 +13,26 @@ func Call[A, B, C any]( client func() (C, error), c *gin.Context, ) { - var resp *apiresp.ApiResponse - defer func() { - c.JSON(http.StatusOK, resp) - }() var req A if err := c.BindJSON(&req); err != nil { - resp = apiresp.Error(constant.ErrArgs.Wrap(err.Error())) // 参数错误 + apiresp.GinError(c, 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())) // 参数校验失败 + apiresp.GinError(c, constant.ErrArgs.Wrap(err.Error())) // 参数校验失败 return } } cli, err := client() if err != nil { - resp = apiresp.Error(constant.ErrInternalServer.Wrap(err.Error())) // 获取RPC连接失败 + apiresp.GinError(c, constant.ErrInternalServer.Wrap(err.Error())) // 获取RPC连接失败 return } data, err := rpc(cli, c, &req) if err != nil { - resp = apiresp.Error(err) // RPC调用失败 + apiresp.GinError(c, 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) // 成功 + apiresp.GinSuccess(c, data) // 成功 } diff --git a/internal/api/auth.go b/internal/api/auth.go index 36d11331b..d98ea360a 100644 --- a/internal/api/auth.go +++ b/internal/api/auth.go @@ -20,7 +20,7 @@ type Auth struct { } func (o *Auth) client() (auth.AuthClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImGroupName) + conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImGroupName, nil) if err != nil { return nil, err } diff --git a/internal/apiresp/gin.go b/internal/apiresp/gin.go new file mode 100644 index 000000000..772a15c52 --- /dev/null +++ b/internal/apiresp/gin.go @@ -0,0 +1,18 @@ +package apiresp + +import ( + "github.com/gin-gonic/gin" + "net/http" +) + +func GinError(c *gin.Context, err error) { + if err == nil { + GinSuccess(c, nil) + return + } + c.JSON(http.StatusOK, apiError(err)) +} + +func GinSuccess(c *gin.Context, data any) { + c.JSON(http.StatusOK, apiSuccess(data)) +} diff --git a/internal/apiresp/resp.go b/internal/apiresp/resp.go index ad3eade2a..a148e9f64 100644 --- a/internal/apiresp/resp.go +++ b/internal/apiresp/resp.go @@ -7,12 +7,12 @@ type ApiResponse struct { Data any `json:"data"` } -func Success(data any) *ApiResponse { +func apiSuccess(data any) *ApiResponse { return &ApiResponse{ Data: data, } } -func Error(err error) *ApiResponse { +func apiError(err error) *ApiResponse { return &ApiResponse{ErrCode: 10000, ErrMsg: err.Error()} }