From cae6c53b01902e96fff5ba75bf329ee87c3dc51c Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Mon, 27 Feb 2023 18:21:41 +0800 Subject: [PATCH] api resp --- internal/a2r/api2rpc.go | 32 +++++++++++++------------------- internal/apiresp/resp.go | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 19 deletions(-) create mode 100644 internal/apiresp/resp.go diff --git a/internal/a2r/api2rpc.go b/internal/a2r/api2rpc.go index b78c644cb..92df6161b 100644 --- a/internal/a2r/api2rpc.go +++ b/internal/a2r/api2rpc.go @@ -1,49 +1,43 @@ package a2r import ( + "OpenIM/internal/apiresp" + "OpenIM/pkg/common/constant" "context" "github.com/gin-gonic/gin" "google.golang.org/grpc" + "net/http" ) -//// Call TEST -//func Call2[A, B, C, D, E any]( -// apiReq *A, -// apiResp *B, -// rpc func(client E, ctx context.Context, req C, options ...grpc.CallOption) (D, error), -// client func() (E, error), -// c *gin.Context, -// before func(apiReq *A, rpcReq *C, bind func() error) error, -// after func(rpcResp *D, apiResp *B, bind func() error) error, -//) { -// -//} - func Call[A, B, C any]( rpc func(client C, ctx context.Context, req *A, options ...grpc.CallOption) (*B, error), 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 { - // todo 参数错误 + resp = apiresp.Error(constant.ErrArgs.Wrap(err.Error())) // 参数错误 return } if check, ok := any(&req).(interface{ Check() error }); ok { if err := check.Check(); err != nil { - // todo 参数校验失败 + resp = apiresp.Error(constant.ErrArgs.Wrap(err.Error())) // 参数校验失败 return } } cli, err := client() if err != nil { - // todo 获取rpc连接失败 + resp = apiresp.Error(constant.ErrInternalServer.Wrap(err.Error())) // 参数校验失败 return } - resp, err := rpc(cli, c, &req) + data, err := rpc(cli, c, &req) if err != nil { - // todo rpc请求失败 + resp = apiresp.Error(err) // 参数校验失败 return } - _ = resp + resp = apiresp.Success(data) // 成功 } diff --git a/internal/apiresp/resp.go b/internal/apiresp/resp.go new file mode 100644 index 000000000..1ee9d3c76 --- /dev/null +++ b/internal/apiresp/resp.go @@ -0,0 +1,18 @@ +package apiresp + +type ApiResponse struct { + ErrCode int `json:"errCode"` + ErrMsg string `json:"errMsg"` + ErrDlt string `json:"errDlt"` + Data any `json:"data"` +} + +func Success(data any) *ApiResponse { + return &ApiResponse{ + Data: data, + } +} + +func Error(err error) *ApiResponse { + return &ApiResponse{} +}