groupCallback

This commit is contained in:
wangchuxiao 2023-01-05 20:04:11 +08:00
parent 4aa7abf94b
commit 2d67f95413
4 changed files with 49 additions and 47 deletions

View File

@ -14,12 +14,12 @@ import (
"google.golang.org/protobuf/types/known/wrapperspb" "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() { 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 { if !config.Config.Callback.CallbackBeforeCreateGroup.Enable {
return true, nil return nil
} }
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.String()) log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.String())
commonCallbackReq := &cbApi.CallbackBeforeCreateGroupReq{ commonCallbackReq := &cbApi.CallbackBeforeCreateGroupReq{
@ -34,9 +34,9 @@ func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq)
} }
//utils.CopyStructFields(req, msg.MsgData) //utils.CopyStructFields(req, msg.MsgData)
defer log.NewDebug(req.OperationID, utils.GetSelfFuncName(), commonCallbackReq, *resp) 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) resp, config.Config.Callback.CallbackBeforeCreateGroup.CallbackTimeOut, &config.Config.Callback.CallbackBeforeCreateGroup.CallbackFailedContinue)
if isPass && err == nil { if err == nil {
if resp.GroupID != nil { if resp.GroupID != nil {
req.GroupInfo.GroupID = *resp.GroupID req.GroupInfo.GroupID = *resp.GroupID
} }
@ -74,16 +74,16 @@ func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq)
req.GroupInfo.LookMemberInfo = *resp.LookMemberInfo 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() { 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} callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
if !config.Config.Callback.CallbackBeforeMemberJoinGroup.Enable { if !config.Config.Callback.CallbackBeforeMemberJoinGroup.Enable {
return true, nil return nil
} }
log.NewDebug(operationID, "args: ", *groupMember) log.NewDebug(operationID, "args: ", *groupMember)
callbackReq := cbApi.CallbackBeforeMemberJoinGroupReq{ callbackReq := cbApi.CallbackBeforeMemberJoinGroupReq{
@ -97,9 +97,9 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, grou
resp := &cbApi.CallbackBeforeMemberJoinGroupResp{ resp := &cbApi.CallbackBeforeMemberJoinGroupResp{
CommonCallbackResp: &callbackResp, 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) resp, config.Config.Callback.CallbackBeforeMemberJoinGroup.CallbackTimeOut, &config.Config.Callback.CallbackBeforeMemberJoinGroup.CallbackFailedContinue)
if isPass && err == nil { if err == nil {
if resp.MuteEndTime != nil { if resp.MuteEndTime != nil {
groupMember.MuteEndTime = utils.UnixSecondToTime(*resp.MuteEndTime) groupMember.MuteEndTime = utils.UnixSecondToTime(*resp.MuteEndTime)
} }
@ -116,16 +116,16 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, grou
groupMember.RoleLevel = *resp.RoleLevel 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() { defer func() {
trace_log.SetContextInfo(ctx, "CallbackBeforeSetGroupMemberInfo", err, "req", *req) trace_log.SetContextInfo(ctx, "CallbackBeforeSetGroupMemberInfo", err, "req", *req)
}() }()
callbackResp := cbApi.CommonCallbackResp{OperationID: req.OperationID} callbackResp := cbApi.CommonCallbackResp{OperationID: req.OperationID}
if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable { if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable {
return true, nil return nil
} }
callbackReq := cbApi.CallbackBeforeSetGroupMemberInfoReq{ callbackReq := cbApi.CallbackBeforeSetGroupMemberInfoReq{
CallbackCommand: constant.CallbackBeforeSetGroupMemberInfoCommand, CallbackCommand: constant.CallbackBeforeSetGroupMemberInfoCommand,
@ -148,9 +148,9 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroup
resp := &cbApi.CallbackBeforeSetGroupMemberInfoResp{ resp := &cbApi.CallbackBeforeSetGroupMemberInfoResp{
CommonCallbackResp: &callbackResp, 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) resp, config.Config.Callback.CallbackBeforeSetGroupMemberInfo.CallbackTimeOut, &config.Config.Callback.CallbackBeforeSetGroupMemberInfo.CallbackFailedContinue)
if isPass && err == nil { if err == nil {
if resp.FaceURL != nil { if resp.FaceURL != nil {
req.FaceURL = &wrapperspb.StringValue{Value: *resp.FaceURL} 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} req.Ex = &wrapperspb.StringValue{Value: *resp.Ex}
} }
} }
return isPass, err return err
} }

View File

@ -1,7 +1,7 @@
package call_back_struct package call_back_struct
import ( import (
"errors" "Open_IM/pkg/common/constant"
"fmt" "fmt"
) )
@ -26,26 +26,25 @@ type CommonCallbackReq struct {
} }
type CallbackResp interface { type CallbackResp interface {
Parse() (IsPass bool, err error) Parse() (err error)
} }
type CommonCallbackResp struct { type CommonCallbackResp struct {
ActionCode int `json:"actionCode"` ActionCode int `json:"actionCode"`
ErrCode int `json:"errCode"` ErrCode int32 `json:"errCode"`
ErrMsg string `json:"errMsg"` ErrMsg string `json:"errMsg"`
OperationID string `json:"operationID"` OperationID string `json:"operationID"`
} }
func (c *CommonCallbackResp) Parse() (isPass bool, err error) { func (c *CommonCallbackResp) Parse() (err error) {
if c.ActionCode != 0 { if c.ActionCode != constant.NoError || c.ErrCode != constant.NoError {
err = errors.New(fmt.Sprintf("callback response error actionCode is %d, errCode is %d, errMsg is %s", c.ActionCode, c.ErrCode, c.ErrMsg)) newErr := constant.ErrCallback
return false, err 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 { return
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
} }
type UserStatusBaseCallback struct { type UserStatusBaseCallback struct {

View File

@ -12,7 +12,7 @@ import (
type ErrInfo struct { type ErrInfo struct {
ErrCode int32 ErrCode int32
ErrMsg string ErrMsg string
WrapErrMsg string DetailErrMsg string
} }
func (e ErrInfo) Error() string { func (e ErrInfo) Error() string {
@ -31,6 +31,8 @@ var (
ErrInternalServer = ErrInfo{ServerInternalError, "ServerInternalError", ""} ErrInternalServer = ErrInfo{ServerInternalError, "ServerInternalError", ""}
ErrNetwork = ErrInfo{NetworkError, "NetworkError", ""} ErrNetwork = ErrInfo{NetworkError, "NetworkError", ""}
ErrNoPermission = ErrInfo{NoPermissionError, "NoPermissionError", ""} ErrNoPermission = ErrInfo{NoPermissionError, "NoPermissionError", ""}
ErrCallback = ErrInfo{ErrMsg: "CallbackError"}
ErrCallbackContinue = ErrInfo{ErrMsg: "CallbackContinueError"}
ErrUserIDNotFound = ErrInfo{UserIDNotFoundError, "UserIDNotFoundError", ""} ErrUserIDNotFound = ErrInfo{UserIDNotFoundError, "UserIDNotFoundError", ""}
ErrGroupIDNotFound = ErrInfo{GroupIDNotFoundError, "GroupIDNotFoundError", ""} ErrGroupIDNotFound = ErrInfo{GroupIDNotFoundError, "GroupIDNotFoundError", ""}
@ -62,7 +64,7 @@ var (
func toDetail(err error, info ErrInfo) ErrInfo { func toDetail(err error, info ErrInfo) ErrInfo {
errInfo := info errInfo := info
errInfo.WrapErrMsg = err.Error() errInfo.DetailErrMsg = err.Error()
return errInfo return errInfo
} }

View File

@ -8,6 +8,7 @@ package http
import ( import (
cbApi "Open_IM/pkg/call_back_struct" cbApi "Open_IM/pkg/call_back_struct"
"Open_IM/pkg/common/constant"
"bytes" "bytes"
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
@ -57,22 +58,22 @@ func Post(url string, data interface{}, timeOutSecond int) (content []byte, err
return result, nil 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 := urlLib.Values{}
v.Set("callbackCommand", callbackCommand) v.Set("callbackCommand", callbackCommand)
url = url + "?" + v.Encode() url = url + "?" + v.Encode()
b, err := Post(url, input, timeOut) b, err := Post(url, input, timeOut)
if err != nil { if err != nil {
if failedContinue != nil { if failedContinue != nil && *failedContinue {
return *failedContinue, err return constant.ErrCallbackContinue
} }
return true, err return constant.ErrNetwork
} }
if err = json.Unmarshal(b, output); err != nil { if err = json.Unmarshal(b, output); err != nil {
if failedContinue != nil { if failedContinue != nil && *failedContinue {
return *failedContinue, err return constant.ErrCallbackContinue
} }
return true, err return constant.ErrData
} }
return output.Parse() return output.Parse()
} }