diff --git a/internal/rpc/group/convert.go b/internal/rpc/group/convert.go index 3f23346c2..849a8b72a 100644 --- a/internal/rpc/group/convert.go +++ b/internal/rpc/group/convert.go @@ -5,7 +5,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" ) -func (g *groupServer) groupDB2PB(group *relation.GroupModel, ownerUserID string, memberCount uint32) *sdkws.GroupInfo { +func (s *groupServer) groupDB2PB(group *relation.GroupModel, ownerUserID string, memberCount uint32) *sdkws.GroupInfo { return &sdkws.GroupInfo{ GroupID: group.GroupID, GroupName: group.GroupName, @@ -27,7 +27,7 @@ func (g *groupServer) groupDB2PB(group *relation.GroupModel, ownerUserID string, } } -func (g *groupServer) groupMemberDB2PB(member *relation.GroupMemberModel, appMangerLevel int32) *sdkws.GroupMemberFullInfo { +func (s *groupServer) groupMemberDB2PB(member *relation.GroupMemberModel, appMangerLevel int32) *sdkws.GroupMemberFullInfo { return &sdkws.GroupMemberFullInfo{ GroupID: member.GroupID, UserID: member.UserID, diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index aa581b508..1a61fb041 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -153,6 +153,9 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR if err != nil { return nil, err } + if len(userMap) != len(userIDs) { + return nil, errs.ErrUserIDNotFound.Wrap("user not found") + } if err := CallbackBeforeCreateGroup(ctx, req); err != nil && err != errs.ErrCallbackContinue { return nil, err } @@ -216,9 +219,8 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR GroupOwnerUser: s.groupMemberDB2PB(groupMembers[0], userMap[groupMembers[0].UserID].AppMangerLevel), } for _, member := range groupMembers { + member.Nickname = userMap[member.UserID].Nickname tips.MemberList = append(tips.MemberList, s.groupMemberDB2PB(member, userMap[member.UserID].AppMangerLevel)) - } - for _, member := range groupMembers { if member.UserID == opUserID { tips.OpUser = s.groupMemberDB2PB(member, userMap[member.UserID].AppMangerLevel) break @@ -229,10 +231,32 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } s.Notification.GroupCreatedNotification(ctx, tips) } - return resp, nil } +func (s *groupServer) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) { + members, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, userIDs, roleLevels) + if err != nil { + return nil, err + } + emptyUserIDs := make(map[string]int) + for i, member := range members { + if member.Nickname == "" { + emptyUserIDs[member.UserID] = i + } + } + if len(emptyUserIDs) > 0 { + users, err := s.User.GetPublicUserInfos(ctx, utils.Keys(emptyUserIDs), true) + if err != nil { + return nil, err + } + for _, user := range users { + members[emptyUserIDs[user.UserID]].Nickname = user.Nickname + } + } + return members, nil +} + func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJoinedGroupListReq) (*pbGroup.GetJoinedGroupListResp, error) { resp := &pbGroup.GetJoinedGroupListResp{} if err := tokenverify.CheckAccessV3(ctx, req.FromUserID); err != nil { @@ -263,7 +287,7 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo if err != nil { return nil, err } - owners, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) + owners, err := s.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -300,7 +324,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite if group.NeedVerification == constant.AllNeedVerification { if !tokenverify.IsAppManagerUid(ctx) { opUserID := mcontext.GetOpUserID(ctx) - groupMembers, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, []string{opUserID}, nil) + groupMembers, err := s.FindGroupMember(ctx, []string{req.GroupID}, []string{opUserID}, nil) if err != nil { return nil, err } @@ -383,7 +407,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro if group.GroupType == constant.SuperGroup { return nil, errs.ErrArgs.Wrap("unsupported super group") } - members, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, nil, nil) + members, err := s.FindGroupMember(ctx, []string{req.GroupID}, nil, nil) if err != nil { return nil, err } @@ -455,7 +479,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou } }() } else { - members, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, append(req.KickedUserIDs, opUserID), nil) + members, err := s.FindGroupMember(ctx, []string{req.GroupID}, append(req.KickedUserIDs, opUserID), nil) if err != nil { return nil, err } @@ -495,7 +519,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou if err != nil { return nil, err } - owner, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, nil, []int32{constant.GroupOwner}) + owner, err := s.FindGroupMember(ctx, []string{req.GroupID}, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -554,7 +578,7 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG if req.GroupID == "" { return nil, errs.ErrArgs.Wrap("groupID empty") } - members, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, req.UserIDs, nil) + members, err := s.FindGroupMember(ctx, []string{req.GroupID}, req.UserIDs, nil) if err != nil { return nil, err } @@ -614,7 +638,7 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup. if err != nil { return nil, err } - owners, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) + owners, err := s.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -640,7 +664,7 @@ func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbGroup.GetGroupsI if err != nil { return nil, err } - owners, err := s.GroupDatabase.FindGroupMember(ctx, req.GroupIDs, nil, []int32{constant.GroupOwner}) + owners, err := s.FindGroupMember(ctx, req.GroupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -913,7 +937,7 @@ func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbGroup.Trans if req.OldOwnerUserID == req.NewOwnerUserID { return nil, errs.ErrArgs.Wrap("OldOwnerUserID == NewOwnerUserID") } - members, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, []string{req.OldOwnerUserID, req.NewOwnerUserID}, nil) + members, err := s.FindGroupMember(ctx, []string{req.GroupID}, []string{req.OldOwnerUserID, req.NewOwnerUserID}, nil) if err != nil { return nil, err } @@ -959,7 +983,7 @@ func (s *groupServer) GetGroups(ctx context.Context, req *pbGroup.GetGroupsReq) groupIDs := utils.Slice(groups, func(e *relationTb.GroupModel) string { return e.GroupID }) - ownerMembers, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) + ownerMembers, err := s.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -1034,7 +1058,7 @@ func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbGrou if ids := utils.Single(groupIDs, utils.Keys(groupMap)); len(ids) > 0 { return nil, errs.ErrGroupIDNotFound.Wrap(strings.Join(ids, ",")) } - owners, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) + owners, err := s.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -1192,7 +1216,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr } groupIDs := utils.Keys(groupIDMap) userIDs := utils.Keys(userIDMap) - members, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, append(userIDs, mcontext.GetOpUserID(ctx)), nil) + members, err := s.FindGroupMember(ctx, groupIDs, append(userIDs, mcontext.GetOpUserID(ctx)), nil) if err != nil { return nil, err } @@ -1324,7 +1348,7 @@ func (s *groupServer) GetUserInGroupMembers(ctx context.Context, req *pbGroup.Ge if len(req.GroupIDs) == 0 { return nil, errs.ErrArgs.Wrap("groupIDs empty") } - members, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.UserID}, req.GroupIDs, nil) + members, err := s.FindGroupMember(ctx, []string{req.UserID}, req.GroupIDs, nil) if err != nil { return nil, err } @@ -1357,7 +1381,7 @@ func (s *groupServer) GetGroupMemberRoleLevel(ctx context.Context, req *pbGroup. if len(req.RoleLevels) == 0 { return nil, errs.ErrArgs.Wrap("RoleLevels empty") } - members, err := s.GroupDatabase.FindGroupMember(ctx, []string{req.GroupID}, nil, req.RoleLevels) + members, err := s.FindGroupMember(ctx, []string{req.GroupID}, nil, req.RoleLevels) if err != nil { return nil, err } diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index 000f97fe2..8d8937db4 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -24,7 +24,7 @@ func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup. if len(groupIDs) == 0 { return resp, nil } - owners, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) + owners, err := s.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } @@ -73,7 +73,7 @@ func (s *groupServer) GetSuperGroupsInfo(ctx context.Context, req *pbGroup.GetSu superGroupMemberMap := utils.SliceToMapAny(superGroupMembers, func(e *unrelation.SuperGroupModel) (string, []string) { return e.GroupID, e.MemberIDs }) - owners, err := s.GroupDatabase.FindGroupMember(ctx, req.GroupIDs, nil, []int32{constant.GroupOwner}) + owners, err := s.FindGroupMember(ctx, req.GroupIDs, nil, []int32{constant.GroupOwner}) if err != nil { return nil, err } diff --git a/internal/rpc/msg/revoke.go b/internal/rpc/msg/revoke.go index 111ac074a..b6b0daf9d 100644 --- a/internal/rpc/msg/revoke.go +++ b/internal/rpc/msg/revoke.go @@ -40,9 +40,6 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. if len(msgs) == 0 || msgs[0] == nil { return nil, errs.ErrRecordNotFound.Wrap("msg not found") } - if msgs[0].SendID == "" || msgs[0].RecvID == "" { - return nil, errs.ErrRecordNotFound.Wrap("sendID or recvID is empty") - } // todo: 判断是否已经撤回 data, _ := json.Marshal(msgs[0]) log.ZInfo(ctx, "GetMsgBySeqs", "conversationID", req.ConversationID, "seq", req.Seq, "msg", string(data)) diff --git a/pkg/errs/coderr.go b/pkg/errs/coderr.go index 445ee0ddd..b8371bd5b 100644 --- a/pkg/errs/coderr.go +++ b/pkg/errs/coderr.go @@ -82,7 +82,7 @@ func (e *codeError) Is(err error, loose ...bool) bool { } func (e *codeError) Error() string { - return fmt.Sprintf("[%d]%s", e.code, e.msg) + return fmt.Sprintf("%s", e.msg) } func Unwrap(err error) error {