From 1716de808fa80de130b5b4bc8655012cc8467250 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 7 Feb 2023 16:31:12 +0800 Subject: [PATCH] realization group rpc --- internal/rpc/group/copy.go | 29 ++++++++++ internal/rpc/group/g.go | 19 ------- internal/rpc/group/group.go | 92 ++++++++++++++----------------- pkg/common/db/controller/group.go | 2 +- 4 files changed, 70 insertions(+), 72 deletions(-) diff --git a/internal/rpc/group/copy.go b/internal/rpc/group/copy.go index 130511c26..ba24f9109 100644 --- a/internal/rpc/group/copy.go +++ b/internal/rpc/group/copy.go @@ -88,3 +88,32 @@ func DbToPbGroupAbstractInfo(groupID string, groupMemberNumber int32, groupMembe GroupMemberListHash: groupMemberListHash, } } + +func PbToDBGroupInfo(m *open_im_sdk.GroupInfo) *relation.GroupModel { + return &relation.GroupModel{ + GroupID: m.GroupID, + GroupName: m.GroupName, + Notification: m.Notification, + Introduction: m.Introduction, + FaceURL: m.FaceURL, + CreateTime: time.Now(), + Ex: m.Ex, + Status: m.Status, + CreatorUserID: m.CreatorUserID, + GroupType: m.GroupType, + NeedVerification: m.NeedVerification, + LookMemberInfo: m.LookMemberInfo, + ApplyMemberFriend: m.ApplyMemberFriend, + NotificationUpdateTime: time.UnixMilli(m.NotificationUpdateTime), + NotificationUserID: m.NotificationUserID, + } +} + +func PbToDbGroupMember(m *open_im_sdk.UserInfo) *relation.GroupMemberModel { + return &relation.GroupMemberModel{ + UserID: m.UserID, + Nickname: m.Nickname, + FaceURL: m.FaceURL, + Ex: m.Ex, + } +} diff --git a/internal/rpc/group/g.go b/internal/rpc/group/g.go index 079facbf8..48e5b03ab 100644 --- a/internal/rpc/group/g.go +++ b/internal/rpc/group/g.go @@ -13,25 +13,6 @@ import ( "time" ) -// -//func getDBGroupMember(ctx context.Context, groupID, userID string) (dbGroupMember *relation.GroupMember, err error) { -// dbGroupMember = &relation.GroupMember{} -// -// member := relation.GroupMember{} -// member.GroupID = groupID -// member.UserID = userID -// member.RoleLevel = constant.GroupOrdinaryUsers -// member.OperatorUserID = utils.OpUserID(ctx) -// -// member.FaceURL = user.FaceURL -// member.Nickname = user.Nickname -// member.JoinSource = request.JoinSource -// member.InviterUserID = request.InviterUserID -// member.MuteEndTime = time.Unix(int64(time.Now().Second()), 0) -// -// return dbGroupMember, nil -//} - func GetPublicUserInfoOne(ctx context.Context, userID string) (*sdk_ws.PublicUserInfo, error) { return nil, errors.New("todo") } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index c21598706..84fc4f514 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -186,14 +186,16 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR if err := callbackBeforeCreateGroup(ctx, req); err != nil { return nil, err } - var group relation2.GroupModel var groupMembers []*relation2.GroupMemberModel - utils.CopyStructFields(&group, req.GroupInfo) + group := PbToDBGroupInfo(req.GroupInfo) group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID) joinGroup := func(userID string, roleLevel int32) error { - user := userMap[userID] - groupMember := &relation2.GroupMemberModel{GroupID: group.GroupID, RoleLevel: roleLevel, OperatorUserID: tracelog.GetOpUserID(ctx), JoinSource: constant.JoinByInvitation, InviterUserID: tracelog.GetOpUserID(ctx)} - utils.CopyStructFields(&groupMember, user) + groupMember := PbToDbGroupMember(userMap[userID]) + groupMember.GroupID = group.GroupID + groupMember.RoleLevel = roleLevel + groupMember.OperatorUserID = tracelog.GetOpUserID(ctx) + groupMember.JoinSource = constant.JoinByInvitation + groupMember.InviterUserID = tracelog.GetOpUserID(ctx) if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), groupMember, group.Ex); err != nil { return err } @@ -219,10 +221,10 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } } } - if err := s.GroupInterface.CreateGroup(ctx, []*relation2.GroupModel{&group}, groupMembers); err != nil { + if err := s.GroupInterface.CreateGroup(ctx, []*relation2.GroupModel{group}, groupMembers); err != nil { return nil, err } - utils.CopyStructFields(resp.GroupInfo, group) + resp.GroupInfo = DbToPbGroupInfo(group, req.OwnerUserID, uint32(len(userIDs))) resp.GroupInfo.MemberCount = uint32(len(userIDs)) if req.GroupInfo.GroupType == constant.SuperGroup { go func() { @@ -263,13 +265,7 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo if group.Status == constant.GroupStatusDismissed || group.GroupType == constant.SuperGroup { continue } - var groupNode open_im_sdk.GroupInfo - utils.CopyStructFields(&groupNode, group) - groupNode.MemberCount = uint32(groupMemberNum[group.GroupID]) - groupNode.OwnerUserID = groupOwnerUserID[group.GroupID] - groupNode.CreateTime = group.CreateTime.UnixMilli() - groupNode.NotificationUpdateTime = group.NotificationUpdateTime.UnixMilli() - resp.Groups = append(resp.Groups, &groupNode) + resp.Groups = append(resp.Groups, DbToPbGroupInfo(group, groupOwnerUserID[group.GroupID], uint32(groupMemberNum[group.GroupID]))) } resp.Total = int32(len(resp.Groups)) return resp, nil @@ -350,18 +346,16 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite opUserID := tracelog.GetOpUserID(ctx) var groupMembers []*relation2.GroupMemberModel for _, userID := range req.InvitedUserIDs { - user := userMap[userID] - var member relation2.GroupMemberModel - utils.CopyStructFields(&member, user) + member := PbToDbGroupMember(userMap[userID]) member.GroupID = req.GroupID member.RoleLevel = constant.GroupOrdinaryUsers member.OperatorUserID = opUserID member.InviterUserID = opUserID member.JoinSource = constant.JoinByInvitation - if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), &member, group.Ex); err != nil { + if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), member, group.Ex); err != nil { return nil, err } - groupMembers = append(groupMembers, &member) + groupMembers = append(groupMembers, member) } if err := s.GroupInterface.CreateGroupMember(ctx, groupMembers); err != nil { return nil, err @@ -377,17 +371,16 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro if err != nil { return nil, err } - if group.GroupType != constant.SuperGroup { - members, err := s.GroupInterface.GetGroupMemberList(ctx, req.GroupID) - if err != nil { - return nil, err - } - for _, member := range members { - var node open_im_sdk.GroupMemberFullInfo - utils.CopyStructFields(&node, member) - resp.Members = append(resp.Members, &node) - } + if group.GroupType == constant.SuperGroup { + return nil, constant.ErrArgs.Wrap("unsupported super group") } + members, err := s.GroupInterface.GetGroupMemberList(ctx, req.GroupID) + if err != nil { + return nil, err + } + resp.Members = utils.Slice(members, func(e *relation2.GroupMemberModel) *open_im_sdk.GroupMemberFullInfo { + return DbToPbGroupMembersCMSResp(e) + }) return resp, nil } @@ -397,11 +390,9 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr if err != nil { return nil, err } - for _, member := range members { - var info open_im_sdk.GroupMemberFullInfo - utils.CopyStructFields(&info, &member) - resp.Members = append(resp.Members, &info) - } + resp.Members = utils.Slice(members, func(e *relation2.GroupMemberModel) *open_im_sdk.GroupMemberFullInfo { + return DbToPbGroupMembersCMSResp(e) + }) return resp, nil } @@ -478,12 +469,9 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG if err != nil { return nil, err } - for _, member := range members { - var memberNode open_im_sdk.GroupMemberFullInfo - utils.CopyStructFields(&memberNode, member) - memberNode.JoinTime = member.JoinTime.UnixMilli() - resp.Members = append(resp.Members, &memberNode) - } + resp.Members = utils.Slice(members, func(e *relation2.GroupMemberModel) *open_im_sdk.GroupMemberFullInfo { + return DbToPbGroupMembersCMSResp(e) + }) return resp, nil } @@ -531,13 +519,9 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup. if err != nil { return nil, err } - for _, gr := range groupRequests { - groupRequest := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}} - utils.CopyStructFields(&groupRequest, gr) - groupRequest.UserInfo = userMap[gr.UserID] - groupRequest.GroupInfo = DbToPbGroupInfo(groupMap[gr.GroupID], groupOwnerUserIDMap[gr.GroupID], uint32(groupMemberNumMap[gr.GroupID])) - resp.GroupRequests = append(resp.GroupRequests, &groupRequest) - } + resp.GroupRequests = utils.Slice(groupRequests, func(e *relation2.GroupRequestModel) *open_im_sdk.GroupRequest { + return DbToPbGroupRequest(e, userMap[e.UserID], DbToPbGroupInfo(groupMap[e.GroupID], groupOwnerUserIDMap[e.GroupID], uint32(groupMemberNumMap[e.GroupID]))) + }) return resp, nil } @@ -646,16 +630,20 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) if group.GroupType == constant.SuperGroup { return nil, constant.ErrGroupTypeNotSupport.Wrap() } - us, err := relation.GetUserByUserID(tracelog.GetOpUserID(ctx)) + user, err := relation.GetUserByUserID(tracelog.GetOpUserID(ctx)) if err != nil { return nil, err } - groupMember := relation2.GroupMemberModel{GroupID: req.GroupID, RoleLevel: constant.GroupOrdinaryUsers, OperatorUserID: tracelog.GetOpUserID(ctx)} - utils.CopyStructFields(&groupMember, us) - if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), &groupMember, group.Ex); err != nil { + groupMember := PbToDbGroupMember(user) + groupMember.GroupID = group.GroupID + groupMember.RoleLevel = constant.GroupOrdinaryUsers + groupMember.OperatorUserID = tracelog.GetOpUserID(ctx) + groupMember.JoinSource = constant.JoinByInvitation + groupMember.InviterUserID = tracelog.GetOpUserID(ctx) + if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), groupMember, group.Ex); err != nil { return nil, err } - if err := s.GroupInterface.CreateGroupMember(ctx, []*relation2.GroupMemberModel{&groupMember}); err != nil { + if err := s.GroupInterface.CreateGroupMember(ctx, []*relation2.GroupMemberModel{groupMember}); err != nil { return nil, err } chat.MemberEnterDirectlyNotification(req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx)) diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 79eeb4943..9aef573f8 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -24,7 +24,7 @@ type GroupInterface interface { GetJoinedGroupList(ctx context.Context, userID string) ([]*relation2.GroupModel, error) GetGroupMemberList(ctx context.Context, groupID string) ([]*relation2.GroupMemberModel, error) GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*relation2.GroupMemberModel, error) - GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*relation2.GroupModel, error) // relation.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30) + GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*relation2.GroupMemberModel, error) // relation.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30) FindGroupMembersByID(ctx context.Context, groupID string, userIDs []string) (groups []*relation2.GroupMemberModel, err error) FindUserInGroup(ctx context.Context, groupID string, userIDs []string) ([]*relation2.GroupMemberModel, error) DelGroupMember(ctx context.Context, groupID string, userIDs []string) error