diff --git a/internal/rpc/group/cache.go b/internal/rpc/group/cache.go index 54b60c554..35c631eff 100644 --- a/internal/rpc/group/cache.go +++ b/internal/rpc/group/cache.go @@ -33,10 +33,7 @@ func (s *groupServer) GetGroupInfoCache( return resp, nil } -func (s *groupServer) GetGroupMemberCache( - ctx context.Context, - req *pbgroup.GetGroupMemberCacheReq, -) (resp *pbgroup.GetGroupMemberCacheResp, err error) { +func (s *groupServer) GetGroupMemberCache(ctx context.Context, req *pbgroup.GetGroupMemberCacheReq) (resp *pbgroup.GetGroupMemberCacheResp, err error) { members, err := s.db.TakeGroupMember(ctx, req.GroupID, req.GroupMemberID) if err != nil { return nil, err diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 7ebd237b5..e1e0dfed7 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -952,6 +952,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbgroup.SetGroupInf return nil, errs.Wrap(errs.ErrDismissedAlready) } resp := &pbgroup.SetGroupInfoResp{} + count, err := s.db.FindGroupMemberNum(ctx, group.GroupID) if err != nil { return nil, err @@ -1078,6 +1079,7 @@ func (s *groupServer) GetGroups(ctx context.Context, req *pbgroup.GetGroupsReq) total, group, err = s.db.SearchGroup(ctx, req.GroupName, req.Pagination) resp.Total = uint32(total) } + if err != nil { return nil, err } @@ -1085,10 +1087,12 @@ func (s *groupServer) GetGroups(ctx context.Context, req *pbgroup.GetGroupsReq) groupIDs := utils.Slice(group, func(e *relationtb.GroupModel) string { return e.GroupID }) + ownerMembers, err := s.db.FindGroupsOwner(ctx, groupIDs) if err != nil { return nil, err } + ownerMemberMap := utils.SliceToMap(ownerMembers, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) diff --git a/internal/rpc/msg/sync_msg.go b/internal/rpc/msg/sync_msg.go index 379302e98..0a8b3f89e 100644 --- a/internal/rpc/msg/sync_msg.go +++ b/internal/rpc/msg/sync_msg.go @@ -137,6 +137,7 @@ func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq groupIDs = append(groupIDs, chatLog.GroupID) } } + // Retrieve sender and receiver information if len(sendIDs) != 0 { sendInfos, err := m.UserLocalCache.GetUsersInfo(ctx, sendIDs) if err != nil { @@ -155,6 +156,8 @@ func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq recvMap[recvInfo.UserID] = recvInfo.Nickname } } + + // Retrieve group information including member counts if len(groupIDs) != 0 { groupInfos, err := m.GroupLocalCache.GetGroupInfos(ctx, groupIDs) if err != nil { @@ -162,8 +165,14 @@ func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq } for _, groupInfo := range groupInfos { groupMap[groupInfo.GroupID] = groupInfo + // Get actual member count + memberIDs, err := m.GroupLocalCache.GetGroupMemberIDs(ctx, groupInfo.GroupID) + if err == nil { + groupInfo.MemberCount = uint32(len(memberIDs)) // Update the member count with actual number + } } } + // Construct response with updated information for _, chatLog := range chatLogs { pbchatLog := &msg.ChatLog{} utils.CopyStructFields(pbchatLog, chatLog) @@ -175,14 +184,14 @@ func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq switch chatLog.SessionType { case constant.SingleChatType, constant.NotificationChatType: pbchatLog.RecvNickname = recvMap[chatLog.RecvID] - case constant.GroupChatType, constant.SuperGroupChatType: - pbchatLog.SenderFaceURL = groupMap[chatLog.GroupID].FaceURL - pbchatLog.GroupMemberCount = groupMap[chatLog.GroupID].MemberCount - pbchatLog.RecvID = groupMap[chatLog.GroupID].GroupID - pbchatLog.GroupName = groupMap[chatLog.GroupID].GroupName - pbchatLog.GroupOwner = groupMap[chatLog.GroupID].OwnerUserID - pbchatLog.GroupType = groupMap[chatLog.GroupID].GroupType + groupInfo := groupMap[chatLog.GroupID] + pbchatLog.SenderFaceURL = groupInfo.FaceURL + pbchatLog.GroupMemberCount = groupInfo.MemberCount // Reflects actual member count + pbchatLog.RecvID = groupInfo.GroupID + pbchatLog.GroupName = groupInfo.GroupName + pbchatLog.GroupOwner = groupInfo.OwnerUserID + pbchatLog.GroupType = groupInfo.GroupType } resp.ChatLogs = append(resp.ChatLogs, pbchatLog) } diff --git a/pkg/authverify/token.go b/pkg/authverify/token.go index 26c43532d..8127e08df 100644 --- a/pkg/authverify/token.go +++ b/pkg/authverify/token.go @@ -60,6 +60,7 @@ func CheckAdmin(ctx context.Context, config *config.GlobalConfig) error { } return errs.ErrNoPermission.Wrap(fmt.Sprintf("user %s is not admin userID", mcontext.GetOpUserID(ctx))) } + func CheckIMAdmin(ctx context.Context, config *config.GlobalConfig) error { if utils.IsContain(mcontext.GetOpUserID(ctx), config.IMAdmin.UserID) { return nil diff --git a/pkg/rpcclient/group.go b/pkg/rpcclient/group.go index ec7aab695..3e9c93e7a 100644 --- a/pkg/rpcclient/group.go +++ b/pkg/rpcclient/group.go @@ -49,11 +49,7 @@ func NewGroupRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, config *co return GroupRpcClient(*NewGroup(discov, config)) } -func (g *GroupRpcClient) GetGroupInfos( - ctx context.Context, - groupIDs []string, - complete bool, -) ([]*sdkws.GroupInfo, error) { +func (g *GroupRpcClient) GetGroupInfos(ctx context.Context, groupIDs []string, complete bool) ([]*sdkws.GroupInfo, error) { resp, err := g.Client.GetGroupsInfo(ctx, &group.GetGroupsInfoReq{ GroupIDs: groupIDs, }) @@ -184,11 +180,7 @@ func (g *GroupRpcClient) GetGroupInfoCache(ctx context.Context, groupID string) return resp.GroupInfo, nil } -func (g *GroupRpcClient) GetGroupMemberCache( - ctx context.Context, - groupID string, - groupMemberID string, -) (*sdkws.GroupMemberFullInfo, error) { +func (g *GroupRpcClient) GetGroupMemberCache(ctx context.Context, groupID string, groupMemberID string) (*sdkws.GroupMemberFullInfo, error) { resp, err := g.Client.GetGroupMemberCache(ctx, &group.GetGroupMemberCacheReq{ GroupID: groupID, GroupMemberID: groupMemberID,