diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index f588ba28c..ff3787d9e 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -504,7 +504,14 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.GetGroupApplicationListReq) (*pbGroup.GetGroupApplicationListResp, error) { resp := &pbGroup.GetGroupApplicationListResp{} - total, groupRequests, err := s.GroupDatabase.PageGroupRequestUser(ctx, req.FromUserID, req.Pagination.PageNumber, req.Pagination.ShowNumber) + groupIDs, err := s.GroupDatabase.FindUserManagedGroupID(ctx, req.FromUserID) + if err != nil { + return nil, err + } + if len(groupIDs) == 0 { + return resp, nil + } + total, groupRequests, err := s.GroupDatabase.PageGroupRequest(ctx, groupIDs, req.Pagination.PageNumber, req.Pagination.ShowNumber) if err != nil { return nil, err } @@ -512,16 +519,12 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup. if len(groupRequests) == 0 { return resp, nil } - var ( - userIDs []string - groupIDs []string - ) + var userIDs []string + for _, gr := range groupRequests { userIDs = append(userIDs, gr.UserID) - groupIDs = append(groupIDs, gr.GroupID) } userIDs = utils.Distinct(userIDs) - groupIDs = utils.Distinct(groupIDs) userMap, err := s.User.GetPublicUserInfoMap(ctx, userIDs, true) if err != nil { return nil, err @@ -548,7 +551,7 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup. return e.GroupID }) resp.GroupRequests = utils.Slice(groupRequests, func(e *relationTb.GroupRequestModel) *sdkws.GroupRequest { - return convert.Db2PbGroupRequest(e, userMap[e.UserID], convert.Db2PbGroupInfo(groupMap[e.GroupID], ownerMap[e.GroupID].UserID, uint32(groupMemberNumMap[e.GroupID]))) + return convert.Db2PbGroupRequest(e, userMap[e.UserID], convert.Db2PbGroupInfo(groupMap[e.GroupID], ownerMap[e.GroupID].UserID, groupMemberNumMap[e.GroupID])) }) return resp, nil } diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 5f4c65c96..57c5f1fb2 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -32,6 +32,8 @@ type GroupDatabase interface { TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error) + FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) + PageGroupRequest(ctx context.Context, groupIDs []string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupRequestModel, error) //PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) PageGetJoinGroup(ctx context.Context, userID string, pageNumber, showNumber int32) (total uint32, totalGroupMembers []*relationTb.GroupMemberModel, err error) PageGetGroupMember(ctx context.Context, groupID string, pageNumber, showNumber int32) (total uint32, totalGroupMembers []*relationTb.GroupMemberModel, err error) @@ -184,6 +186,14 @@ func (g *groupDatabase) TakeGroupOwner(ctx context.Context, groupID string) (*re return g.groupMemberDB.TakeOwner(ctx, groupID) // todo cache group owner } +func (g *groupDatabase) FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) { + return g.groupMemberDB.FindUserManagedGroupID(ctx, userID) +} + +func (g *groupDatabase) PageGroupRequest(ctx context.Context, groupIDs []string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupRequestModel, error) { + return g.groupRequestDB.PageGroup(ctx, groupIDs, pageNumber, showNumber) +} + func (g *groupDatabase) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) (totalGroupMembers []*relationTb.GroupMemberModel, err error) { if roleLevels == nil { for _, groupID := range groupIDs { diff --git a/pkg/common/db/relation/group_member_model.go b/pkg/common/db/relation/group_member_model.go index 7adaa62e6..5cbbdf2b3 100644 --- a/pkg/common/db/relation/group_member_model.go +++ b/pkg/common/db/relation/group_member_model.go @@ -129,3 +129,7 @@ func (g *GroupMemberGorm) FindUsersJoinedGroupID(ctx context.Context, userIDs [] } return result, nil } + +func (g *GroupMemberGorm) FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) { + return groupIDs, utils.Wrap(g.db(ctx).Model(&relation.GroupMemberModel{}).Where("user_id = ? and (role_level = ? or role_level = ?)", userID, constant.GroupOwner, constant.GroupAdmin).Pluck("group_id", &groupIDs).Error, "") +} diff --git a/pkg/common/db/relation/group_request_model.go b/pkg/common/db/relation/group_request_model.go index ea419fabf..679671e5d 100644 --- a/pkg/common/db/relation/group_request_model.go +++ b/pkg/common/db/relation/group_request_model.go @@ -46,3 +46,7 @@ func (g *GroupRequestGorm) Take(ctx context.Context, groupID string, userID stri func (g *GroupRequestGorm) Page(ctx context.Context, userID string, pageNumber, showNumber int32) (total uint32, groups []*relation.GroupRequestModel, err error) { return ormutil.GormSearch[relation.GroupRequestModel](g.DB.WithContext(ctx).Where("user_id = ?", userID), nil, "", pageNumber, showNumber) } + +func (g *GroupRequestGorm) PageGroup(ctx context.Context, groupIDs []string, pageNumber, showNumber int32) (total uint32, groups []*relation.GroupRequestModel, err error) { + return ormutil.GormPage[relation.GroupRequestModel](g.DB.WithContext(ctx).Where("group_id in ?", groupIDs), pageNumber, showNumber) +} diff --git a/pkg/common/db/table/relation/group_member.go b/pkg/common/db/table/relation/group_member.go index c49fbcc48..b430575fe 100644 --- a/pkg/common/db/table/relation/group_member.go +++ b/pkg/common/db/table/relation/group_member.go @@ -44,4 +44,5 @@ type GroupMemberModelInterface interface { FindUserJoinedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) TakeGroupMemberNum(ctx context.Context, groupID string) (count int64, err error) FindUsersJoinedGroupID(ctx context.Context, userIDs []string) (map[string][]string, error) + FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) } diff --git a/pkg/common/db/table/relation/group_request.go b/pkg/common/db/table/relation/group_request.go index a40da1ed0..62b2a1081 100644 --- a/pkg/common/db/table/relation/group_request.go +++ b/pkg/common/db/table/relation/group_request.go @@ -34,4 +34,5 @@ type GroupRequestModelInterface interface { UpdateHandler(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32) (err error) Take(ctx context.Context, groupID string, userID string) (groupRequest *GroupRequestModel, err error) Page(ctx context.Context, userID string, pageNumber, showNumber int32) (total uint32, groups []*GroupRequestModel, err error) + PageGroup(ctx context.Context, groupIDs []string, pageNumber, showNumber int32) (total uint32, groups []*GroupRequestModel, err error) }