mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-12-04 03:12:19 +08:00
group
This commit is contained in:
parent
d99e3d93e3
commit
b338d666ea
@ -26,7 +26,7 @@ func (s *groupServer) GetGroupInfoCache(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *pbgroup.GetGroupInfoCacheReq,
|
req *pbgroup.GetGroupInfoCacheReq,
|
||||||
) (resp *pbgroup.GetGroupInfoCacheResp, err error) {
|
) (resp *pbgroup.GetGroupInfoCacheResp, err error) {
|
||||||
group, err := s.GroupDatabase.TakeGroup(ctx, req.GroupID)
|
group, err := s.db.TakeGroup(ctx, req.GroupID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -38,7 +38,7 @@ func (s *groupServer) GetGroupMemberCache(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *pbgroup.GetGroupMemberCacheReq,
|
req *pbgroup.GetGroupMemberCacheReq,
|
||||||
) (resp *pbgroup.GetGroupMemberCacheResp, err error) {
|
) (resp *pbgroup.GetGroupMemberCacheResp, err error) {
|
||||||
members, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.GroupMemberID)
|
members, err := s.db.TakeGroupMember(ctx, req.GroupID, req.GroupMemberID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,10 +22,41 @@ import (
|
|||||||
relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *groupServer) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationtb.GroupMemberModel, error) {
|
//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)
|
// members, err := s.db.FindGroupMember(ctx, groupIDs, userIDs, roleLevels)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// emptyUserIDs := make(map[string]struct{})
|
||||||
|
// for _, member := range members {
|
||||||
|
// if member.Nickname == "" || member.FaceURL == "" {
|
||||||
|
// emptyUserIDs[member.UserID] = struct{}{}
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if len(emptyUserIDs) > 0 {
|
||||||
|
// users, err := s.User.GetPublicUserInfoMap(ctx, utils.Keys(emptyUserIDs), true)
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
// for i, member := range members {
|
||||||
|
// user, ok := users[member.UserID]
|
||||||
|
// if !ok {
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// if member.Nickname == "" {
|
||||||
|
// members[i].Nickname = user.Nickname
|
||||||
|
// }
|
||||||
|
// if member.FaceURL == "" {
|
||||||
|
// members[i].FaceURL = user.FaceURL
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return members, nil
|
||||||
|
//}
|
||||||
|
|
||||||
|
func (s *groupServer) PopulateGroupMember(ctx context.Context, members ...*relationtb.GroupMemberModel) error {
|
||||||
|
if len(members) == 0 {
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
emptyUserIDs := make(map[string]struct{})
|
emptyUserIDs := make(map[string]struct{})
|
||||||
for _, member := range members {
|
for _, member := range members {
|
||||||
@ -36,7 +67,7 @@ func (s *groupServer) FindGroupMember(ctx context.Context, groupIDs []string, us
|
|||||||
if len(emptyUserIDs) > 0 {
|
if len(emptyUserIDs) > 0 {
|
||||||
users, err := s.User.GetPublicUserInfoMap(ctx, utils.Keys(emptyUserIDs), true)
|
users, err := s.User.GetPublicUserInfoMap(ctx, utils.Keys(emptyUserIDs), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
for i, member := range members {
|
for i, member := range members {
|
||||||
user, ok := users[member.UserID]
|
user, ok := users[member.UserID]
|
||||||
@ -51,85 +82,81 @@ func (s *groupServer) FindGroupMember(ctx context.Context, groupIDs []string, us
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return members, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) TakeGroupMember(
|
//func (s *groupServer) TakeGroupMembers(ctx context.Context, groupID string, userID string) (*relationtb.GroupMemberModel, error) {
|
||||||
ctx context.Context,
|
// member, err := s.db.TakeGroupMember(ctx, groupID, userID)
|
||||||
groupID string,
|
// if err != nil {
|
||||||
userID string,
|
// return nil, err
|
||||||
) (*relationtb.GroupMemberModel, error) {
|
// }
|
||||||
member, err := s.GroupDatabase.TakeGroupMember(ctx, groupID, userID)
|
// if member.Nickname == "" || member.FaceURL == "" {
|
||||||
if err != nil {
|
// user, err := s.User.GetPublicUserInfo(ctx, userID)
|
||||||
return nil, err
|
// if err != nil {
|
||||||
}
|
// return nil, err
|
||||||
if member.Nickname == "" || member.FaceURL == "" {
|
// }
|
||||||
user, err := s.User.GetPublicUserInfo(ctx, userID)
|
// if member.Nickname == "" {
|
||||||
if err != nil {
|
// member.Nickname = user.Nickname
|
||||||
return nil, err
|
// }
|
||||||
}
|
// if member.FaceURL == "" {
|
||||||
if member.Nickname == "" {
|
// member.FaceURL = user.FaceURL
|
||||||
member.Nickname = user.Nickname
|
// }
|
||||||
}
|
// }
|
||||||
if member.FaceURL == "" {
|
// return member, nil
|
||||||
member.FaceURL = user.FaceURL
|
//}
|
||||||
}
|
|
||||||
}
|
|
||||||
return member, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *groupServer) TakeGroupOwner(ctx context.Context, groupID string) (*relationtb.GroupMemberModel, error) {
|
//func (s *groupServer) TakeGroupOwner(ctx context.Context, groupID string) (*relationtb.GroupMemberModel, error) {
|
||||||
owner, err := s.GroupDatabase.TakeGroupOwner(ctx, groupID)
|
// owner, err := s.db.TakeGroupOwner(ctx, groupID)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
if owner.Nickname == "" || owner.FaceURL == "" {
|
// if owner.Nickname == "" || owner.FaceURL == "" {
|
||||||
user, err := s.User.GetUserInfo(ctx, owner.UserID)
|
// user, err := s.User.GetUserInfo(ctx, owner.UserID)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
if owner.Nickname == "" {
|
// if owner.Nickname == "" {
|
||||||
owner.Nickname = user.Nickname
|
// owner.Nickname = user.Nickname
|
||||||
}
|
// }
|
||||||
if owner.FaceURL == "" {
|
// if owner.FaceURL == "" {
|
||||||
owner.FaceURL = user.FaceURL
|
// owner.FaceURL = user.FaceURL
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return owner, nil
|
// return owner, nil
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (s *groupServer) PageGetGroupMember(
|
//func (s *groupServer) PageGetGroupMember(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
groupID string,
|
// groupID string,
|
||||||
pageNumber, showNumber int32,
|
// pageNumber, showNumber int32,
|
||||||
) (uint32, []*relationtb.GroupMemberModel, error) {
|
//) (uint32, []*relationtb.GroupMemberModel, error) {
|
||||||
total, members, err := s.GroupDatabase.PageGetGroupMember(ctx, groupID, pageNumber, showNumber)
|
// total, members, err := s.db.PageGetGroupMember(ctx, groupID, pageNumber, showNumber)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return 0, nil, err
|
// return 0, nil, err
|
||||||
}
|
// }
|
||||||
emptyUserIDs := make(map[string]struct{})
|
// emptyUserIDs := make(map[string]struct{})
|
||||||
for _, member := range members {
|
// for _, member := range members {
|
||||||
if member.Nickname == "" || member.FaceURL == "" {
|
// if member.Nickname == "" || member.FaceURL == "" {
|
||||||
emptyUserIDs[member.UserID] = struct{}{}
|
// emptyUserIDs[member.UserID] = struct{}{}
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if len(emptyUserIDs) > 0 {
|
// if len(emptyUserIDs) > 0 {
|
||||||
users, err := s.User.GetPublicUserInfoMap(ctx, utils.Keys(emptyUserIDs), true)
|
// users, err := s.User.GetPublicUserInfoMap(ctx, utils.Keys(emptyUserIDs), true)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return 0, nil, err
|
// return 0, nil, err
|
||||||
}
|
// }
|
||||||
for i, member := range members {
|
// for i, member := range members {
|
||||||
user, ok := users[member.UserID]
|
// user, ok := users[member.UserID]
|
||||||
if !ok {
|
// if !ok {
|
||||||
continue
|
// continue
|
||||||
}
|
// }
|
||||||
if member.Nickname == "" {
|
// if member.Nickname == "" {
|
||||||
members[i].Nickname = user.Nickname
|
// members[i].Nickname = user.Nickname
|
||||||
}
|
// }
|
||||||
if member.FaceURL == "" {
|
// if member.FaceURL == "" {
|
||||||
members[i].FaceURL = user.FaceURL
|
// members[i].FaceURL = user.FaceURL
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return total, members, nil
|
// return total, members, nil
|
||||||
}
|
//}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -26,16 +26,16 @@ func (s *groupServer) GroupCreateCount(ctx context.Context, req *group.GroupCrea
|
|||||||
if req.Start > req.End {
|
if req.Start > req.End {
|
||||||
return nil, errs.ErrArgs.Wrap("start > end")
|
return nil, errs.ErrArgs.Wrap("start > end")
|
||||||
}
|
}
|
||||||
total, err := s.GroupDatabase.CountTotal(ctx, nil)
|
total, err := s.db.CountTotal(ctx, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
start := time.UnixMilli(req.Start)
|
start := time.UnixMilli(req.Start)
|
||||||
before, err := s.GroupDatabase.CountTotal(ctx, &start)
|
before, err := s.db.CountTotal(ctx, &start)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
count, err := s.GroupDatabase.CountRangeEverydayTotal(ctx, start, time.UnixMilli(req.End))
|
count, err := s.db.CountRangeEverydayTotal(ctx, start, time.UnixMilli(req.End))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,99 +16,14 @@ package group
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"errors"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/OpenIMSDK/protocol/constant"
|
|
||||||
pbgroup "github.com/OpenIMSDK/protocol/group"
|
pbgroup "github.com/OpenIMSDK/protocol/group"
|
||||||
sdkws "github.com/OpenIMSDK/protocol/sdkws"
|
|
||||||
"github.com/OpenIMSDK/tools/errs"
|
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/convert"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/unrelation"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *groupServer) GetJoinedSuperGroupList(
|
func (s *groupServer) GetJoinedSuperGroupList(context.Context, *pbgroup.GetJoinedSuperGroupListReq) (*pbgroup.GetJoinedSuperGroupListResp, error) {
|
||||||
ctx context.Context,
|
return nil, errors.New("deprecated")
|
||||||
req *pbgroup.GetJoinedSuperGroupListReq,
|
|
||||||
) (*pbgroup.GetJoinedSuperGroupListResp, error) {
|
|
||||||
resp := &pbgroup.GetJoinedSuperGroupListResp{}
|
|
||||||
groupIDs, err := s.GroupDatabase.FindJoinSuperGroup(ctx, req.UserID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if len(groupIDs) == 0 {
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
owners, err := s.FindGroupMember(ctx, groupIDs, nil, []int32{constant.GroupOwner})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
ownerMap := utils.SliceToMap(owners, func(e *relation.GroupMemberModel) string {
|
|
||||||
return e.GroupID
|
|
||||||
})
|
|
||||||
if ids := utils.Single(groupIDs, utils.Keys(ownerMap)); len(ids) > 0 {
|
|
||||||
return nil, errs.ErrData.Wrap(fmt.Sprintf("super group %s not owner", strings.Join(ids, ",")))
|
|
||||||
}
|
|
||||||
groups, err := s.GroupDatabase.FindGroup(ctx, groupIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
groupMap := utils.SliceToMap(groups, func(e *relation.GroupModel) string {
|
|
||||||
return e.GroupID
|
|
||||||
})
|
|
||||||
if ids := utils.Single(groupIDs, utils.Keys(groupMap)); len(ids) > 0 {
|
|
||||||
return nil, errs.ErrData.Wrap(fmt.Sprintf("super group info %s not found", strings.Join(ids, ",")))
|
|
||||||
}
|
|
||||||
superGroupMembers, err := s.GroupDatabase.FindSuperGroup(ctx, groupIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
superGroupMemberMap := utils.SliceToMapAny(
|
|
||||||
superGroupMembers,
|
|
||||||
func(e *unrelation.SuperGroupModel) (string, []string) {
|
|
||||||
return e.GroupID, e.MemberIDs
|
|
||||||
},
|
|
||||||
)
|
|
||||||
resp.Groups = utils.Slice(groupIDs, func(groupID string) *sdkws.GroupInfo {
|
|
||||||
return convert.Db2PbGroupInfo(groupMap[groupID], ownerMap[groupID].UserID, uint32(len(superGroupMemberMap)))
|
|
||||||
})
|
|
||||||
return resp, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) GetSuperGroupsInfo(
|
func (s *groupServer) GetSuperGroupsInfo(context.Context, *pbgroup.GetSuperGroupsInfoReq) (resp *pbgroup.GetSuperGroupsInfoResp, err error) {
|
||||||
ctx context.Context,
|
return nil, errors.New("deprecated")
|
||||||
req *pbgroup.GetSuperGroupsInfoReq,
|
|
||||||
) (resp *pbgroup.GetSuperGroupsInfoResp, err error) {
|
|
||||||
resp = &pbgroup.GetSuperGroupsInfoResp{}
|
|
||||||
if len(req.GroupIDs) == 0 {
|
|
||||||
return nil, errs.ErrArgs.Wrap("groupIDs empty")
|
|
||||||
}
|
|
||||||
groups, err := s.GroupDatabase.FindGroup(ctx, req.GroupIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
superGroupMembers, err := s.GroupDatabase.FindSuperGroup(ctx, req.GroupIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
superGroupMemberMap := utils.SliceToMapAny(
|
|
||||||
superGroupMembers,
|
|
||||||
func(e *unrelation.SuperGroupModel) (string, []string) {
|
|
||||||
return e.GroupID, e.MemberIDs
|
|
||||||
},
|
|
||||||
)
|
|
||||||
owners, err := s.FindGroupMember(ctx, req.GroupIDs, nil, []int32{constant.GroupOwner})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
ownerMap := utils.SliceToMap(owners, func(e *relation.GroupMemberModel) string {
|
|
||||||
return e.GroupID
|
|
||||||
})
|
|
||||||
resp.GroupInfos = utils.Slice(groups, func(e *relation.GroupModel) *sdkws.GroupInfo {
|
|
||||||
return convert.Db2PbGroupInfo(e, ownerMap[e.GroupID].UserID, uint32(len(superGroupMemberMap[e.GroupID])))
|
|
||||||
})
|
|
||||||
return resp, nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,6 +43,11 @@ type GroupDatabase interface {
|
|||||||
// GroupMember
|
// GroupMember
|
||||||
TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationtb.GroupMemberModel, err error)
|
TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationtb.GroupMemberModel, err error)
|
||||||
TakeGroupOwner(ctx context.Context, groupID string) (*relationtb.GroupMemberModel, error)
|
TakeGroupOwner(ctx context.Context, groupID string) (*relationtb.GroupMemberModel, error)
|
||||||
|
FindGroupMembers(ctx context.Context, groupID string, userIDs []string) (groupMembers []*relationtb.GroupMemberModel, err error) // *
|
||||||
|
FindGroupMemberUser(ctx context.Context, groupIDs []string, userID string) (groupMembers []*relationtb.GroupMemberModel, err error) // *
|
||||||
|
FindGroupMemberRoleLevels(ctx context.Context, groupID string, roleLevels []int32) (groupMembers []*relationtb.GroupMemberModel, err error) // *
|
||||||
|
FindGroupMemberAll(ctx context.Context, groupID string) (groupMembers []*relationtb.GroupMemberModel, err error) // *
|
||||||
|
FindGroupsOwner(ctx context.Context, groupIDs []string) ([]*relationtb.GroupMemberModel, error)
|
||||||
FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationtb.GroupMemberModel, error)
|
FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationtb.GroupMemberModel, error)
|
||||||
FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error)
|
FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error)
|
||||||
FindGroupMemberNum(ctx context.Context, groupID string) (uint32, error)
|
FindGroupMemberNum(ctx context.Context, groupID string) (uint32, error)
|
||||||
@ -51,7 +56,7 @@ type GroupDatabase interface {
|
|||||||
|
|
||||||
PageGetJoinGroup(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, totalGroupMembers []*relationtb.GroupMemberModel, err error)
|
PageGetJoinGroup(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, totalGroupMembers []*relationtb.GroupMemberModel, err error)
|
||||||
PageGetGroupMember(ctx context.Context, groupID string, pagination pagination.Pagination) (total int64, totalGroupMembers []*relationtb.GroupMemberModel, err error)
|
PageGetGroupMember(ctx context.Context, groupID string, pagination pagination.Pagination) (total int64, totalGroupMembers []*relationtb.GroupMemberModel, err error)
|
||||||
SearchGroupMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pagination pagination.Pagination) (int64, []*relationtb.GroupMemberModel, error)
|
SearchGroupMember(ctx context.Context, keyword string, groupID string, pagination pagination.Pagination) (int64, []*relationtb.GroupMemberModel, error)
|
||||||
HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relationtb.GroupMemberModel) error
|
HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relationtb.GroupMemberModel) error
|
||||||
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
||||||
MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string]*relationtb.GroupSimpleUserID, error)
|
MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string]*relationtb.GroupSimpleUserID, error)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user