mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-06-05 07:43:52 +08:00
group
This commit is contained in:
parent
fdaeb8a8bf
commit
2e8396e408
@ -242,7 +242,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
|
|||||||
func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJoinedGroupListReq) (resp *pbGroup.GetJoinedGroupListResp, _ error) {
|
func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJoinedGroupListReq) (resp *pbGroup.GetJoinedGroupListResp, _ error) {
|
||||||
resp = &pbGroup.GetJoinedGroupListResp{CommonResp: &open_im_sdk.CommonResp{}}
|
resp = &pbGroup.GetJoinedGroupListResp{CommonResp: &open_im_sdk.CommonResp{}}
|
||||||
ctx = trace_log.NewRpcCtx(ctx, utils.GetSelfFuncName(), req.OperationID)
|
ctx = trace_log.NewRpcCtx(ctx, utils.GetSelfFuncName(), req.OperationID)
|
||||||
GetJoinedGroupList defer func() {
|
defer func() {
|
||||||
trace_log.SetContextInfo(ctx, utils.GetFuncName(1), nil, "req", req.String(), "resp", resp.String())
|
trace_log.SetContextInfo(ctx, utils.GetFuncName(1), nil, "req", req.String(), "resp", resp.String())
|
||||||
trace_log.ShowLog(ctx)
|
trace_log.ShowLog(ctx)
|
||||||
}()
|
}()
|
||||||
@ -296,26 +296,32 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) {
|
func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (resp *pbGroup.InviteUserToGroupResp, _ error) {
|
||||||
log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String())
|
resp = &pbGroup.InviteUserToGroupResp{CommonResp: &open_im_sdk.CommonResp{}}
|
||||||
|
ctx = trace_log.NewRpcCtx(ctx, utils.GetSelfFuncName(), req.OperationID)
|
||||||
|
defer func() {
|
||||||
|
trace_log.SetContextInfo(ctx, utils.GetFuncName(1), nil, "req", req.String(), "resp", resp.String())
|
||||||
|
trace_log.ShowLog(ctx)
|
||||||
|
}()
|
||||||
if !imdb.IsExistGroupMember(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) {
|
if !imdb.IsExistGroupMember(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) {
|
||||||
log.NewError(req.OperationID, "no permission InviteUserToGroup ", req.GroupID, req.OpUserID)
|
SetErrorForResp(constant.ErrIdentity, resp.CommonResp)
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
|
return
|
||||||
}
|
}
|
||||||
|
groupInfo, err := (*imdb.Group)(nil).Take(ctx, req.GroupID)
|
||||||
groupInfo, err := imdb.GetGroupInfoByGroupID(req.GroupID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", req.GroupID, err)
|
SetErrorForResp(err, resp.CommonResp)
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}, nil
|
return
|
||||||
}
|
}
|
||||||
if groupInfo.Status == constant.GroupStatusDismissed {
|
if groupInfo.Status == constant.GroupStatusDismissed {
|
||||||
errMsg := " group status is dismissed "
|
// TODO
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrStatus.ErrCode, ErrMsg: errMsg}, nil
|
//errMsg := " group status is dismissed "
|
||||||
|
//return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrStatus.ErrCode, ErrMsg: errMsg}, nil
|
||||||
|
resp.CommonResp.ErrCode = 1
|
||||||
|
resp.CommonResp.ErrMsg = " group status is dismissed "
|
||||||
|
return
|
||||||
}
|
}
|
||||||
var resp pbGroup.InviteUserToGroupResp
|
|
||||||
if groupInfo.NeedVerification == constant.AllNeedVerification &&
|
if groupInfo.NeedVerification == constant.AllNeedVerification &&
|
||||||
!imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) {
|
!imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsManagerUserID(req.OpUserID) {
|
||||||
var resp pbGroup.InviteUserToGroupResp
|
|
||||||
joinReq := pbGroup.JoinGroupReq{}
|
joinReq := pbGroup.JoinGroupReq{}
|
||||||
for _, v := range req.InvitedUserIDList {
|
for _, v := range req.InvitedUserIDList {
|
||||||
var groupRequest imdb.GroupRequest
|
var groupRequest imdb.GroupRequest
|
||||||
@ -329,7 +335,6 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
resultNode.Result = -1
|
resultNode.Result = -1
|
||||||
resultNode.UserID = v
|
resultNode.UserID = v
|
||||||
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
||||||
|
|
||||||
continue
|
continue
|
||||||
// log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest)
|
// log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest)
|
||||||
// return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
|
// return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
|
||||||
@ -345,12 +350,13 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
chat.JoinGroupApplicationNotification(&joinReq)
|
chat.JoinGroupApplicationNotification(&joinReq)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp)
|
return
|
||||||
return &resp, nil
|
|
||||||
}
|
}
|
||||||
if err := s.DelGroupAndUserCache(req.OperationID, req.GroupID, req.InvitedUserIDList); err != nil {
|
if err := s.DelGroupAndUserCache(req.OperationID, req.GroupID, req.InvitedUserIDList); err != nil {
|
||||||
log.NewError(req.OperationID, "DelGroupAndUserCache failed", err.Error())
|
//log.NewError(req.OperationID, "DelGroupAndUserCache failed", err.Error())
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}, nil
|
//return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}, nil
|
||||||
|
SetErrorForResp(err, resp.CommonResp)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
//from User: invite: applicant
|
//from User: invite: applicant
|
||||||
//to user: invite: invited
|
//to user: invite: invited
|
||||||
@ -362,14 +368,14 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
resultNode.Result = 0
|
resultNode.Result = 0
|
||||||
toUserInfo, err := imdb.GetUserByUserID(v)
|
toUserInfo, err := imdb.GetUserByUserID(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v)
|
trace_log.SetContextInfo(ctx, "GetUserByUserID", err, "userID", v)
|
||||||
resultNode.Result = -1
|
resultNode.Result = -1
|
||||||
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if imdb.IsExistGroupMember(req.GroupID, v) {
|
if imdb.IsExistGroupMember(req.GroupID, v) {
|
||||||
log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v)
|
trace_log.SetContextInfo(ctx, "IsExistGroupMember", err, "groupID", req.GroupID, "userID", v)
|
||||||
resultNode.Result = -1
|
resultNode.Result = -1
|
||||||
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
||||||
continue
|
continue
|
||||||
@ -381,18 +387,13 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
toInsertInfo.OperatorUserID = req.OpUserID
|
toInsertInfo.OperatorUserID = req.OpUserID
|
||||||
toInsertInfo.InviterUserID = req.OpUserID
|
toInsertInfo.InviterUserID = req.OpUserID
|
||||||
toInsertInfo.JoinSource = constant.JoinByInvitation
|
toInsertInfo.JoinSource = constant.JoinByInvitation
|
||||||
callbackResp := CallbackBeforeMemberJoinGroup(req.OperationID, &toInsertInfo, groupInfo.Ex)
|
if err := CallbackBeforeMemberJoinGroup(ctx, req.OperationID, &toInsertInfo, groupInfo.Ex); err != nil {
|
||||||
if callbackResp.ErrCode != 0 {
|
SetErrorForResp(err, resp.CommonResp)
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg resp: ", callbackResp)
|
return
|
||||||
}
|
}
|
||||||
if callbackResp.ActionCode != constant.ActionAllow {
|
|
||||||
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "callbackBeforeSendSingleMsg result", "end rpc and return", callbackResp)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
err = imdb.InsertIntoGroupMember(toInsertInfo)
|
err = imdb.InsertIntoGroupMember(toInsertInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL)
|
trace_log.SetContextInfo(ctx, "InsertIntoGroupMember", err, "args", toInsertInfo)
|
||||||
resultNode.Result = -1
|
resultNode.Result = -1
|
||||||
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
||||||
continue
|
continue
|
||||||
@ -400,15 +401,15 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
okUserIDList = append(okUserIDList, v)
|
okUserIDList = append(okUserIDList, v)
|
||||||
err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID)
|
err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID)
|
trace_log.SetContextInfo(ctx, "AddGroupMember", err, "groupID", req.GroupID, "userID", toUserInfo.UserID)
|
||||||
}
|
}
|
||||||
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
okUserIDList = req.InvitedUserIDList
|
okUserIDList = req.InvitedUserIDList
|
||||||
if err := db.DB.AddUserToSuperGroup(req.GroupID, req.InvitedUserIDList); err != nil {
|
if err := db.DB.AddUserToSuperGroup(req.GroupID, req.InvitedUserIDList); err != nil {
|
||||||
log.NewError(req.OperationID, "AddUserToSuperGroup failed ", req.GroupID, err)
|
SetErrorForResp(err, resp.CommonResp)
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}, nil
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,7 +423,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
}
|
}
|
||||||
conversations, err := imdb.GetConversationsByConversationIDMultipleOwner(okUserIDList, utils.GetConversationIDBySessionType(req.GroupID, sessionType))
|
conversations, err := imdb.GetConversationsByConversationIDMultipleOwner(okUserIDList, utils.GetConversationIDBySessionType(req.GroupID, sessionType))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(req.OperationID, "GetConversationsByConversationIDMultipleOwner failed ", err.Error(), req.GroupID, sessionType)
|
trace_log.SetContextInfo(ctx, "GetConversationsByConversationIDMultipleOwner", err, "OwnerUserIDList", okUserIDList, "groupID", req.GroupID, "sessionType", sessionType)
|
||||||
}
|
}
|
||||||
for _, v := range conversations {
|
for _, v := range conversations {
|
||||||
haveConUserID = append(haveConUserID, v.OwnerUserID)
|
haveConUserID = append(haveConUserID, v.OwnerUserID)
|
||||||
@ -443,19 +444,14 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
c.IsNotInGroup = false
|
c.IsNotInGroup = false
|
||||||
c.Ex = v.Ex
|
c.Ex = v.Ex
|
||||||
reqPb.Conversation = &c
|
reqPb.Conversation = &c
|
||||||
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
|
etcdConn, err := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
|
||||||
if etcdConn == nil {
|
if err != nil {
|
||||||
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
|
SetErrorForResp(err, resp.CommonResp)
|
||||||
log.NewError(req.OperationID, errMsg)
|
return
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
}
|
||||||
client := pbUser.NewUserClient(etcdConn)
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
respPb, err := client.SetConversation(context.Background(), &reqPb)
|
respPb, err := client.SetConversation(ctx, &reqPb)
|
||||||
if err != nil {
|
trace_log.SetContextInfo(ctx, "SetConversation", err, "req", &reqPb, "resp", respPb)
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v.OwnerUserID)
|
|
||||||
} else {
|
|
||||||
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v.OwnerUserID)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for _, v := range utils.DifferenceString(haveConUserID, okUserIDList) {
|
for _, v := range utils.DifferenceString(haveConUserID, okUserIDList) {
|
||||||
reqPb.OperationID = req.OperationID
|
reqPb.OperationID = req.OperationID
|
||||||
@ -466,19 +462,14 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
c.IsNotInGroup = false
|
c.IsNotInGroup = false
|
||||||
c.UpdateUnreadCountTime = utils.GetCurrentTimestampByMill()
|
c.UpdateUnreadCountTime = utils.GetCurrentTimestampByMill()
|
||||||
reqPb.Conversation = &c
|
reqPb.Conversation = &c
|
||||||
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
|
etcdConn, err := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
|
||||||
if etcdConn == nil {
|
if err != nil {
|
||||||
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
|
SetErrorForResp(err, resp.CommonResp)
|
||||||
log.NewError(req.OperationID, errMsg)
|
return
|
||||||
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
}
|
||||||
client := pbUser.NewUserClient(etcdConn)
|
client := pbUser.NewUserClient(etcdConn)
|
||||||
respPb, err := client.SetConversation(context.Background(), &reqPb)
|
respPb, err := client.SetConversation(context.Background(), &reqPb)
|
||||||
if err != nil {
|
trace_log.SetContextInfo(ctx, "SetConversation", err, "req", &reqPb, "resp", respPb)
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error(), v)
|
|
||||||
} else {
|
|
||||||
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "SetConversation success", respPb.String(), v)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if groupInfo.GroupType != constant.SuperGroup {
|
if groupInfo.GroupType != constant.SuperGroup {
|
||||||
@ -493,15 +484,13 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
chat.SuperGroupNotification(req.OperationID, v, v)
|
chat.SuperGroupNotification(req.OperationID, v, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return
|
||||||
log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp)
|
|
||||||
return &resp, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) {
|
func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) {
|
||||||
log.NewInfo(req.OperationID, "GetGroupAllMember, args ", req.String())
|
log.NewInfo(req.OperationID, "GetGroupAllMember, args ", req.String())
|
||||||
var resp pbGroup.GetGroupAllMemberResp
|
var resp pbGroup.GetGroupAllMemberResp
|
||||||
groupInfo, err := rocksCache.GetGroupInfoFromCache(req.GroupID)
|
groupInfo, err := rocksCache.GetGroupInfoFromCache(ctx, req.GroupID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID)
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.GroupID)
|
||||||
resp.ErrCode = constant.ErrDB.ErrCode
|
resp.ErrCode = constant.ErrDB.ErrCode
|
||||||
|
Loading…
x
Reference in New Issue
Block a user