pull/1427/head
withchao 2 years ago
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…
Cancel
Save