diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index 6b5ecdb5c..79cb33575 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -14,12 +14,12 @@ import ( "google.golang.org/protobuf/types/known/wrapperspb" ) -func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (isPass bool, err error) { +func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (err error) { defer func() { - trace_log.SetContextInfo(ctx, utils.GetSelfFuncName(), err, "req", req, "isPass", isPass, "err", err) + trace_log.SetContextInfo(ctx, utils.GetSelfFuncName(), err, "req", req) }() if !config.Config.Callback.CallbackBeforeCreateGroup.Enable { - return true, nil + return nil } log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.String()) commonCallbackReq := &cbApi.CallbackBeforeCreateGroupReq{ @@ -34,9 +34,9 @@ func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) } //utils.CopyStructFields(req, msg.MsgData) defer log.NewDebug(req.OperationID, utils.GetSelfFuncName(), commonCallbackReq, *resp) - isPass, err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeCreateGroupCommand, commonCallbackReq, + err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeCreateGroupCommand, commonCallbackReq, resp, config.Config.Callback.CallbackBeforeCreateGroup.CallbackTimeOut, &config.Config.Callback.CallbackBeforeCreateGroup.CallbackFailedContinue) - if isPass && err == nil { + if err == nil { if resp.GroupID != nil { req.GroupInfo.GroupID = *resp.GroupID } @@ -74,16 +74,16 @@ func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) req.GroupInfo.LookMemberInfo = *resp.LookMemberInfo } } - return isPass, err + return err } -func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, groupMember *im_mysql_model.GroupMember, groupEx string) (isPass bool, err error) { +func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, groupMember *im_mysql_model.GroupMember, groupEx string) (err error) { defer func() { - trace_log.SetContextInfo(ctx, "CallbackBeforeMemberJoinGroup", err, "groupMember", *groupMember, "groupEx", groupEx, "isPass", isPass) + trace_log.SetContextInfo(ctx, "CallbackBeforeMemberJoinGroup", err, "groupMember", *groupMember, "groupEx", groupEx) }() callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackBeforeMemberJoinGroup.Enable { - return true, nil + return nil } log.NewDebug(operationID, "args: ", *groupMember) callbackReq := cbApi.CallbackBeforeMemberJoinGroupReq{ @@ -97,9 +97,9 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, grou resp := &cbApi.CallbackBeforeMemberJoinGroupResp{ CommonCallbackResp: &callbackResp, } - isPass, err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeMemberJoinGroupCommand, callbackReq, + err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeMemberJoinGroupCommand, callbackReq, resp, config.Config.Callback.CallbackBeforeMemberJoinGroup.CallbackTimeOut, &config.Config.Callback.CallbackBeforeMemberJoinGroup.CallbackFailedContinue) - if isPass && err == nil { + if err == nil { if resp.MuteEndTime != nil { groupMember.MuteEndTime = utils.UnixSecondToTime(*resp.MuteEndTime) } @@ -116,16 +116,16 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, grou groupMember.RoleLevel = *resp.RoleLevel } } - return isPass, err + return err } -func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (isPass bool, err error) { +func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (err error) { defer func() { trace_log.SetContextInfo(ctx, "CallbackBeforeSetGroupMemberInfo", err, "req", *req) }() callbackResp := cbApi.CommonCallbackResp{OperationID: req.OperationID} if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable { - return true, nil + return nil } callbackReq := cbApi.CallbackBeforeSetGroupMemberInfoReq{ CallbackCommand: constant.CallbackBeforeSetGroupMemberInfoCommand, @@ -148,9 +148,9 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroup resp := &cbApi.CallbackBeforeSetGroupMemberInfoResp{ CommonCallbackResp: &callbackResp, } - isPass, err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSetGroupMemberInfoCommand, callbackReq, + err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSetGroupMemberInfoCommand, callbackReq, resp, config.Config.Callback.CallbackBeforeSetGroupMemberInfo.CallbackTimeOut, &config.Config.Callback.CallbackBeforeSetGroupMemberInfo.CallbackFailedContinue) - if isPass && err == nil { + if err == nil { if resp.FaceURL != nil { req.FaceURL = &wrapperspb.StringValue{Value: *resp.FaceURL} } @@ -164,5 +164,5 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroup req.Ex = &wrapperspb.StringValue{Value: *resp.Ex} } } - return isPass, err + return err } diff --git a/pkg/call_back_struct/common.go b/pkg/call_back_struct/common.go index e763e6680..73e0f39e0 100644 --- a/pkg/call_back_struct/common.go +++ b/pkg/call_back_struct/common.go @@ -1,7 +1,7 @@ package call_back_struct import ( - "errors" + "Open_IM/pkg/common/constant" "fmt" ) @@ -26,26 +26,25 @@ type CommonCallbackReq struct { } type CallbackResp interface { - Parse() (IsPass bool, err error) + Parse() (err error) } type CommonCallbackResp struct { ActionCode int `json:"actionCode"` - ErrCode int `json:"errCode"` + ErrCode int32 `json:"errCode"` ErrMsg string `json:"errMsg"` OperationID string `json:"operationID"` } -func (c *CommonCallbackResp) Parse() (isPass bool, err error) { - if c.ActionCode != 0 { - err = errors.New(fmt.Sprintf("callback response error actionCode is %d, errCode is %d, errMsg is %s", c.ActionCode, c.ErrCode, c.ErrMsg)) - return false, err +func (c *CommonCallbackResp) Parse() (err error) { + if c.ActionCode != constant.NoError || c.ErrCode != constant.NoError { + newErr := constant.ErrCallback + newErr.ErrCode = c.ErrCode + newErr.DetailErrMsg = fmt.Sprintf("callback response error actionCode is %d, errCode is %d, errMsg is %s", c.ActionCode, c.ErrCode, c.ErrMsg) + err = newErr + return } - if c.ErrCode != 0 { - err = errors.New(fmt.Sprintf("callback response error actionCode is %d, errCode is %d, errMsg is %s", c.ActionCode, c.ErrCode, c.ErrMsg)) - return false, err - } - return true, nil + return } type UserStatusBaseCallback struct { diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index cb2f583aa..26f9be6f5 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -10,9 +10,9 @@ import ( ) type ErrInfo struct { - ErrCode int32 - ErrMsg string - WrapErrMsg string + ErrCode int32 + ErrMsg string + DetailErrMsg string } func (e ErrInfo) Error() string { @@ -24,13 +24,15 @@ func (e ErrInfo) Code() int32 { } var ( - ErrNone = ErrInfo{0, "", ""} - ErrRpcConn = ErrInfo{GRPCConnIsNil, "grpc conn is nil", ""} - ErrArgs = ErrInfo{ArgsError, "ArgsError", ""} - ErrDatabase = ErrInfo{DatabaseError, "DatabaseError", ""} - ErrInternalServer = ErrInfo{ServerInternalError, "ServerInternalError", ""} - ErrNetwork = ErrInfo{NetworkError, "NetworkError", ""} - ErrNoPermission = ErrInfo{NoPermissionError, "NoPermissionError", ""} + ErrNone = ErrInfo{0, "", ""} + ErrRpcConn = ErrInfo{GRPCConnIsNil, "grpc conn is nil", ""} + ErrArgs = ErrInfo{ArgsError, "ArgsError", ""} + ErrDatabase = ErrInfo{DatabaseError, "DatabaseError", ""} + ErrInternalServer = ErrInfo{ServerInternalError, "ServerInternalError", ""} + ErrNetwork = ErrInfo{NetworkError, "NetworkError", ""} + ErrNoPermission = ErrInfo{NoPermissionError, "NoPermissionError", ""} + ErrCallback = ErrInfo{ErrMsg: "CallbackError"} + ErrCallbackContinue = ErrInfo{ErrMsg: "CallbackContinueError"} ErrUserIDNotFound = ErrInfo{UserIDNotFoundError, "UserIDNotFoundError", ""} ErrGroupIDNotFound = ErrInfo{GroupIDNotFoundError, "GroupIDNotFoundError", ""} @@ -62,7 +64,7 @@ var ( func toDetail(err error, info ErrInfo) ErrInfo { errInfo := info - errInfo.WrapErrMsg = err.Error() + errInfo.DetailErrMsg = err.Error() return errInfo } diff --git a/pkg/common/http/http_client.go b/pkg/common/http/http_client.go index 4faa154b3..3c430a9ab 100644 --- a/pkg/common/http/http_client.go +++ b/pkg/common/http/http_client.go @@ -8,6 +8,7 @@ package http import ( cbApi "Open_IM/pkg/call_back_struct" + "Open_IM/pkg/common/constant" "bytes" "encoding/json" "io/ioutil" @@ -57,22 +58,22 @@ func Post(url string, data interface{}, timeOutSecond int) (content []byte, err return result, nil } -func CallBackPostReturn(url, callbackCommand string, input interface{}, output cbApi.CallbackResp, timeOut int, failedContinue *bool) (bool, error) { +func CallBackPostReturn(url, callbackCommand string, input interface{}, output cbApi.CallbackResp, timeOut int, failedContinue *bool) error { v := urlLib.Values{} v.Set("callbackCommand", callbackCommand) url = url + "?" + v.Encode() b, err := Post(url, input, timeOut) if err != nil { - if failedContinue != nil { - return *failedContinue, err + if failedContinue != nil && *failedContinue { + return constant.ErrCallbackContinue } - return true, err + return constant.ErrNetwork } if err = json.Unmarshal(b, output); err != nil { - if failedContinue != nil { - return *failedContinue, err + if failedContinue != nil && *failedContinue { + return constant.ErrCallbackContinue } - return true, err + return constant.ErrData } return output.Parse() }