mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-24 02:16:16 +08:00
group
This commit is contained in:
parent
93fe0d3cd7
commit
728aa97c86
10
pkg/common/db/cache/group.go
vendored
10
pkg/common/db/cache/group.go
vendored
@ -50,6 +50,8 @@ type GroupCache interface {
|
|||||||
GetGroupMemberInfo(ctx context.Context, groupID, userID string) (groupMember *relationTb.GroupMemberModel, err error)
|
GetGroupMemberInfo(ctx context.Context, groupID, userID string) (groupMember *relationTb.GroupMemberModel, err error)
|
||||||
GetGroupMembersInfo(ctx context.Context, groupID string, userID []string, roleLevel []int32) (groupMembers []*relationTb.GroupMemberModel, err error)
|
GetGroupMembersInfo(ctx context.Context, groupID string, userID []string, roleLevel []int32) (groupMembers []*relationTb.GroupMemberModel, err error)
|
||||||
GetAllGroupMembersInfo(ctx context.Context, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error)
|
GetAllGroupMembersInfo(ctx context.Context, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error)
|
||||||
|
GetGroupMembersPage(ctx context.Context, groupID string, showNumber, pageNumber int32) (groupMembers []*relationTb.GroupMemberModel, err error)
|
||||||
|
|
||||||
DelGroupMembersInfo(groupID string, userID ...string) GroupCache
|
DelGroupMembersInfo(groupID string, userID ...string) GroupCache
|
||||||
|
|
||||||
GetGroupMemberNum(ctx context.Context, groupID string) (memberNum int64, err error)
|
GetGroupMemberNum(ctx context.Context, groupID string) (memberNum int64, err error)
|
||||||
@ -302,6 +304,14 @@ func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, groupID strin
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GroupCacheRedis) GetGroupMembersPage(ctx context.Context, groupID string, showNumber, pageNumber int32) (groupMembers []*relationTb.GroupMemberModel, err error) {
|
||||||
|
groupMemberIDs, err := g.GetGroupMemberIDs(ctx, groupID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return g.GetGroupMembersInfo(ctx, groupID, utils.Paginate(groupMemberIDs, int(showNumber), int(showNumber)), nil)
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GroupCacheRedis) GetAllGroupMembersInfo(ctx context.Context, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error) {
|
func (g *GroupCacheRedis) GetAllGroupMembersInfo(ctx context.Context, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error) {
|
||||||
groupMemberIDs, err := g.GetGroupMemberIDs(ctx, groupID)
|
groupMemberIDs, err := g.GetGroupMemberIDs(ctx, groupID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -185,7 +185,8 @@ func (g *groupDatabase) FindGroupMember(ctx context.Context, groupIDs []string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *groupDatabase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (total uint32, totalGroupMembers []*relationTb.GroupMemberModel, err error) {
|
func (g *groupDatabase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (total uint32, totalGroupMembers []*relationTb.GroupMemberModel, err error) {
|
||||||
if roleLevels == nil && pageNumber == 0 && showNumber == 0 {
|
if roleLevels == nil {
|
||||||
|
if pageNumber == 0 || showNumber == 0 {
|
||||||
for _, groupID := range groupIDs {
|
for _, groupID := range groupIDs {
|
||||||
groupMembers, err := g.cache.GetAllGroupMembersInfo(ctx, groupID)
|
groupMembers, err := g.cache.GetAllGroupMembersInfo(ctx, groupID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -193,6 +194,15 @@ func (g *groupDatabase) PageGroupMember(ctx context.Context, groupIDs []string,
|
|||||||
}
|
}
|
||||||
totalGroupMembers = append(totalGroupMembers, groupMembers...)
|
totalGroupMembers = append(totalGroupMembers, groupMembers...)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for _, groupID := range groupIDs {
|
||||||
|
groupMembers, err := g.cache.GetGroupMembersPage(ctx, groupID, pageNumber, showNumber)
|
||||||
|
if err != nil {
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
totalGroupMembers = append(totalGroupMembers, groupMembers...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return g.groupMemberDB.SearchMember(ctx, "", groupIDs, userIDs, roleLevels, pageNumber, showNumber)
|
return g.groupMemberDB.SearchMember(ctx, "", groupIDs, userIDs, roleLevels, pageNumber, showNumber)
|
||||||
@ -230,8 +240,16 @@ func (g *groupDatabase) MapGroupMemberUserID(ctx context.Context, groupIDs []str
|
|||||||
return g.cache.GetGroupMemberHashMap(ctx, groupIDs)
|
return g.cache.GetGroupMemberHashMap(ctx, groupIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *groupDatabase) MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error) {
|
func (g *groupDatabase) MapGroupMemberNum(ctx context.Context, groupIDs []string) (m map[string]uint32, err error) {
|
||||||
return g.groupMemberDB.MapGroupMemberNum(ctx, groupIDs)
|
m = make(map[string]uint32)
|
||||||
|
for _, groupID := range groupIDs {
|
||||||
|
num, err := g.cache.GetGroupMemberNum(ctx, groupID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
m[groupID] = uint32(num)
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *groupDatabase) TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error {
|
func (g *groupDatabase) TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error {
|
||||||
|
@ -246,6 +246,24 @@ func Max[E Ordered](e ...E) E {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Paginate[E any](es []E, pageNumber int, showNumber int) []E {
|
||||||
|
if pageNumber <= 0 {
|
||||||
|
return []E{}
|
||||||
|
}
|
||||||
|
if showNumber <= 0 {
|
||||||
|
return []E{}
|
||||||
|
}
|
||||||
|
start := (pageNumber - 1) * showNumber
|
||||||
|
end := start + showNumber
|
||||||
|
if start >= len(es) {
|
||||||
|
return []E{}
|
||||||
|
}
|
||||||
|
if end > len(es) {
|
||||||
|
end = len(es)
|
||||||
|
}
|
||||||
|
return es[start:end]
|
||||||
|
}
|
||||||
|
|
||||||
// BothExistAny 获取切片中共同存在的元素(交集)
|
// BothExistAny 获取切片中共同存在的元素(交集)
|
||||||
func BothExistAny[E any, K comparable](es [][]E, fn func(e E) K) []E {
|
func BothExistAny[E any, K comparable](es [][]E, fn func(e E) K) []E {
|
||||||
if len(es) == 0 {
|
if len(es) == 0 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user