add callback before join group

pull/1499/head
AndrewZuo01 2 years ago
parent 75375adf62
commit 638fc4d345

@ -368,6 +368,13 @@ callback:
enable: false enable: false
timeout: 5 timeout: 5
failedContinue: true failedContinue: true
##TODO CALLBACK/
beforeInviteUserToGroup:
enable: true
timeout: 5
failedContinue: true
beforeSetGroupMemberInfo: beforeSetGroupMemberInfo:
enable: false enable: false
timeout: 5 timeout: 5

@ -312,7 +312,7 @@ iosPush:
# Timeout in seconds # Timeout in seconds
# Whether to continue execution if callback fails # Whether to continue execution if callback fails
callback: callback:
url: url: "http://125.124.195.201:8080/sdkName/callbackBeforeInviteJoinGroupCommand"
beforeSendSingleMsg: beforeSendSingleMsg:
enable: false enable: false
timeout: 5 timeout: 5
@ -376,7 +376,11 @@ callback:
enable: false enable: false
timeout: 5 timeout: 5
failedContinue: true failedContinue: true
##TODO CALLBACK/
beforeInviteUserToGroup:
enable: true
timeout: 5
failedContinue: true
###################### Prometheus ###################### ###################### Prometheus ######################
# Prometheus configuration for various services # Prometheus configuration for various services
# The number of Prometheus ports per service needs to correspond to rpcPort # The number of Prometheus ports per service needs to correspond to rpcPort

@ -111,9 +111,6 @@ func CallbackBeforeMemberJoinGroup(
config.Config.Callback.CallbackBeforeMemberJoinGroup, config.Config.Callback.CallbackBeforeMemberJoinGroup,
) )
if err != nil { if err != nil {
if err == errs.ErrCallbackContinue {
return nil
}
return err return err
} }
if resp.MuteEndTime != nil { if resp.MuteEndTime != nil {
@ -157,9 +154,6 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMe
config.Config.Callback.CallbackBeforeSetGroupMemberInfo, config.Config.Callback.CallbackBeforeSetGroupMemberInfo,
) )
if err != nil { if err != nil {
if err == errs.ErrCallbackContinue {
return nil
}
return err return err
} }
if resp.FaceURL != nil { if resp.FaceURL != nil {
@ -176,3 +170,39 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMe
} }
return nil return nil
} }
// TODO CALLBACK
func CallbackBeforeInviteUserToGroup(ctx context.Context, req *group.InviteUserToGroupReq) (err error) {
if !config.Config.Callback.CallbackBeforeInviteUserToGroup.Enable {
return nil
}
callbackReq := &callbackstruct.CallbackBeforeInviteUserToGroupReq{
CallbackCommand: callbackstruct.CallbackBeforeInviteJoinGroupCommand,
OperationID: mcontext.GetOperationID(ctx),
GroupID: req.GroupID,
Reason: req.Reason,
InvitedUserIDs: req.InvitedUserIDs,
EventTime: time.Now().UnixNano() / int64(time.Millisecond), // Event trigger timestamp in milliseconds
}
resp := &callbackstruct.CallbackBeforeInviteUserToGroupResp{}
err = http.CallBackPostReturn(
ctx,
config.Config.Callback.CallbackUrl,
callbackReq,
resp,
config.Config.Callback.CallbackBeforeInviteUserToGroup,
)
if err != nil {
return err
}
if len(resp.RefusedMembersAccount) > 0 {
// Handle the scenario where certain members are refused
// You might want to update the req.Members list or handle it as per your business logic
}
return nil
}

@ -65,6 +65,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
if err := db.AutoMigrate(&relationtb.GroupModel{}, &relationtb.GroupMemberModel{}, &relationtb.GroupRequestModel{}); err != nil { if err := db.AutoMigrate(&relationtb.GroupModel{}, &relationtb.GroupMemberModel{}, &relationtb.GroupRequestModel{}); err != nil {
return err return err
} }
}
mongo, err := unrelation.NewMongo() mongo, err := unrelation.NewMongo()
if err != nil { if err != nil {
return err return err
@ -352,6 +353,7 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbgroup.GetJo
func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.InviteUserToGroupReq) (*pbgroup.InviteUserToGroupResp, error) { func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.InviteUserToGroupReq) (*pbgroup.InviteUserToGroupResp, error) {
resp := &pbgroup.InviteUserToGroupResp{} resp := &pbgroup.InviteUserToGroupResp{}
if len(req.InvitedUserIDs) == 0 { if len(req.InvitedUserIDs) == 0 {
return nil, errs.ErrArgs.Wrap("user empty") return nil, errs.ErrArgs.Wrap("user empty")
} }
@ -362,6 +364,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite
if err != nil { if err != nil {
return nil, err return nil, err
} }
if group.Status == constant.GroupStatusDismissed { if group.Status == constant.GroupStatusDismissed {
return nil, errs.ErrDismissedAlready.Wrap() return nil, errs.ErrDismissedAlready.Wrap()
} }
@ -385,6 +388,10 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite
} }
groupMember = groupMembers[0] groupMember = groupMembers[0]
} }
//TODO CALLBACK
if err := CallbackBeforeInviteUserToGroup(ctx, req); err != nil {
return nil, err
}
if group.NeedVerification == constant.AllNeedVerification { if group.NeedVerification == constant.AllNeedVerification {
if !authverify.IsAppManagerUid(ctx) { if !authverify.IsAppManagerUid(ctx) {
if !(groupMember.RoleLevel == constant.GroupOwner || groupMember.RoleLevel == constant.GroupAdmin) { if !(groupMember.RoleLevel == constant.GroupOwner || groupMember.RoleLevel == constant.GroupAdmin) {
@ -399,6 +406,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite
HandledTime: time.Unix(0, 0), HandledTime: time.Unix(0, 0),
}) })
} }
if err := s.GroupDatabase.CreateGroupRequest(ctx, requests); err != nil { if err := s.GroupDatabase.CreateGroupRequest(ctx, requests); err != nil {
return nil, err return nil, err
} }
@ -843,6 +851,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbgroup.JoinGroupReq)
if err := s.GroupDatabase.CreateGroup(ctx, nil, []*relationtb.GroupMemberModel{groupMember}); err != nil { if err := s.GroupDatabase.CreateGroup(ctx, nil, []*relationtb.GroupMemberModel{groupMember}); err != nil {
return nil, err return nil, err
} }
if err := s.conversationRpcClient.GroupChatFirstCreateConversation(ctx, req.GroupID, []string{req.InviterUserID}); err != nil { if err := s.conversationRpcClient.GroupChatFirstCreateConversation(ctx, req.GroupID, []string{req.InviterUserID}); err != nil {
return nil, err return nil, err
} }

@ -0,0 +1,3 @@
package callbackstruct
const CallbackBeforeInviteJoinGroupCommand = "CallbackBeforeInviteJoinGroupCommand"

@ -86,3 +86,17 @@ type CallbackBeforeSetGroupMemberInfoResp struct {
FaceURL *string `json:"faceURL"` FaceURL *string `json:"faceURL"`
RoleLevel *int32 `json:"roleLevel"` RoleLevel *int32 `json:"roleLevel"`
} }
// TODO CALLBACK 2
type CallbackBeforeInviteUserToGroupReq struct {
CallbackCommand `json:"callbackCommand"`
OperationID string `json:"operationID"`
GroupID string `json:"groupID"`
Reason string `json:"reason"`
InvitedUserIDs []string `json:"invitedUserIDs"`
EventTime int64 `json:"eventTime"`
}
type CallbackBeforeInviteUserToGroupResp struct {
CommonCallbackResp
RefusedMembersAccount []string `json:"refusedMembersAccount,omitempty"` // Optional field to list members whose invitation is refused.
}

@ -16,7 +16,6 @@ package config
import ( import (
"bytes" "bytes"
"github.com/OpenIMSDK/tools/discoveryregistry" "github.com/OpenIMSDK/tools/discoveryregistry"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@ -264,6 +263,8 @@ type configStruct struct {
CallbackBeforeCreateGroup CallBackConfig `yaml:"beforeCreateGroup"` CallbackBeforeCreateGroup CallBackConfig `yaml:"beforeCreateGroup"`
CallbackBeforeMemberJoinGroup CallBackConfig `yaml:"beforeMemberJoinGroup"` CallbackBeforeMemberJoinGroup CallBackConfig `yaml:"beforeMemberJoinGroup"`
CallbackBeforeSetGroupMemberInfo CallBackConfig `yaml:"beforeSetGroupMemberInfo"` CallbackBeforeSetGroupMemberInfo CallBackConfig `yaml:"beforeSetGroupMemberInfo"`
//TODO CALLBACK/
CallbackBeforeInviteUserToGroup CallBackConfig `yaml:"beforeInviteUserToGroup"`
} `yaml:"callback"` } `yaml:"callback"`
Prometheus struct { Prometheus struct {

Loading…
Cancel
Save