realization group rpc

This commit is contained in:
withchao 2023-02-07 16:31:12 +08:00
parent 26794503c3
commit 1716de808f
4 changed files with 70 additions and 72 deletions

View File

@ -88,3 +88,32 @@ func DbToPbGroupAbstractInfo(groupID string, groupMemberNumber int32, groupMembe
GroupMemberListHash: groupMemberListHash, 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,
}
}

View File

@ -13,25 +13,6 @@ import (
"time" "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) { func GetPublicUserInfoOne(ctx context.Context, userID string) (*sdk_ws.PublicUserInfo, error) {
return nil, errors.New("todo") return nil, errors.New("todo")
} }

View File

@ -186,14 +186,16 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
if err := callbackBeforeCreateGroup(ctx, req); err != nil { if err := callbackBeforeCreateGroup(ctx, req); err != nil {
return nil, err return nil, err
} }
var group relation2.GroupModel
var groupMembers []*relation2.GroupMemberModel var groupMembers []*relation2.GroupMemberModel
utils.CopyStructFields(&group, req.GroupInfo) group := PbToDBGroupInfo(req.GroupInfo)
group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID) group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID)
joinGroup := func(userID string, roleLevel int32) error { joinGroup := func(userID string, roleLevel int32) error {
user := userMap[userID] groupMember := PbToDbGroupMember(userMap[userID])
groupMember := &relation2.GroupMemberModel{GroupID: group.GroupID, RoleLevel: roleLevel, OperatorUserID: tracelog.GetOpUserID(ctx), JoinSource: constant.JoinByInvitation, InviterUserID: tracelog.GetOpUserID(ctx)} groupMember.GroupID = group.GroupID
utils.CopyStructFields(&groupMember, user) 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 { if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), groupMember, group.Ex); err != nil {
return err 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 return nil, err
} }
utils.CopyStructFields(resp.GroupInfo, group) resp.GroupInfo = DbToPbGroupInfo(group, req.OwnerUserID, uint32(len(userIDs)))
resp.GroupInfo.MemberCount = uint32(len(userIDs)) resp.GroupInfo.MemberCount = uint32(len(userIDs))
if req.GroupInfo.GroupType == constant.SuperGroup { if req.GroupInfo.GroupType == constant.SuperGroup {
go func() { 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 { if group.Status == constant.GroupStatusDismissed || group.GroupType == constant.SuperGroup {
continue continue
} }
var groupNode open_im_sdk.GroupInfo resp.Groups = append(resp.Groups, DbToPbGroupInfo(group, groupOwnerUserID[group.GroupID], uint32(groupMemberNum[group.GroupID])))
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.Total = int32(len(resp.Groups)) resp.Total = int32(len(resp.Groups))
return resp, nil return resp, nil
@ -350,18 +346,16 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
opUserID := tracelog.GetOpUserID(ctx) opUserID := tracelog.GetOpUserID(ctx)
var groupMembers []*relation2.GroupMemberModel var groupMembers []*relation2.GroupMemberModel
for _, userID := range req.InvitedUserIDs { for _, userID := range req.InvitedUserIDs {
user := userMap[userID] member := PbToDbGroupMember(userMap[userID])
var member relation2.GroupMemberModel
utils.CopyStructFields(&member, user)
member.GroupID = req.GroupID member.GroupID = req.GroupID
member.RoleLevel = constant.GroupOrdinaryUsers member.RoleLevel = constant.GroupOrdinaryUsers
member.OperatorUserID = opUserID member.OperatorUserID = opUserID
member.InviterUserID = opUserID member.InviterUserID = opUserID
member.JoinSource = constant.JoinByInvitation 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 return nil, err
} }
groupMembers = append(groupMembers, &member) groupMembers = append(groupMembers, member)
} }
if err := s.GroupInterface.CreateGroupMember(ctx, groupMembers); err != nil { if err := s.GroupInterface.CreateGroupMember(ctx, groupMembers); err != nil {
return nil, err return nil, err
@ -377,17 +371,16 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro
if err != nil { if err != nil {
return nil, err return nil, err
} }
if group.GroupType != constant.SuperGroup { if group.GroupType == constant.SuperGroup {
return nil, constant.ErrArgs.Wrap("unsupported super group")
}
members, err := s.GroupInterface.GetGroupMemberList(ctx, req.GroupID) members, err := s.GroupInterface.GetGroupMemberList(ctx, req.GroupID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, member := range members { resp.Members = utils.Slice(members, func(e *relation2.GroupMemberModel) *open_im_sdk.GroupMemberFullInfo {
var node open_im_sdk.GroupMemberFullInfo return DbToPbGroupMembersCMSResp(e)
utils.CopyStructFields(&node, member) })
resp.Members = append(resp.Members, &node)
}
}
return resp, nil return resp, nil
} }
@ -397,11 +390,9 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, member := range members { resp.Members = utils.Slice(members, func(e *relation2.GroupMemberModel) *open_im_sdk.GroupMemberFullInfo {
var info open_im_sdk.GroupMemberFullInfo return DbToPbGroupMembersCMSResp(e)
utils.CopyStructFields(&info, &member) })
resp.Members = append(resp.Members, &info)
}
return resp, nil return resp, nil
} }
@ -478,12 +469,9 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, member := range members { resp.Members = utils.Slice(members, func(e *relation2.GroupMemberModel) *open_im_sdk.GroupMemberFullInfo {
var memberNode open_im_sdk.GroupMemberFullInfo return DbToPbGroupMembersCMSResp(e)
utils.CopyStructFields(&memberNode, member) })
memberNode.JoinTime = member.JoinTime.UnixMilli()
resp.Members = append(resp.Members, &memberNode)
}
return resp, nil return resp, nil
} }
@ -531,13 +519,9 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, gr := range groupRequests { resp.GroupRequests = utils.Slice(groupRequests, func(e *relation2.GroupRequestModel) *open_im_sdk.GroupRequest {
groupRequest := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}} return DbToPbGroupRequest(e, userMap[e.UserID], DbToPbGroupInfo(groupMap[e.GroupID], groupOwnerUserIDMap[e.GroupID], uint32(groupMemberNumMap[e.GroupID])))
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)
}
return resp, nil return resp, nil
} }
@ -646,16 +630,20 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
if group.GroupType == constant.SuperGroup { if group.GroupType == constant.SuperGroup {
return nil, constant.ErrGroupTypeNotSupport.Wrap() return nil, constant.ErrGroupTypeNotSupport.Wrap()
} }
us, err := relation.GetUserByUserID(tracelog.GetOpUserID(ctx)) user, err := relation.GetUserByUserID(tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
groupMember := relation2.GroupMemberModel{GroupID: req.GroupID, RoleLevel: constant.GroupOrdinaryUsers, OperatorUserID: tracelog.GetOpUserID(ctx)} groupMember := PbToDbGroupMember(user)
utils.CopyStructFields(&groupMember, us) groupMember.GroupID = group.GroupID
if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), &groupMember, group.Ex); err != nil { 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 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 return nil, err
} }
chat.MemberEnterDirectlyNotification(req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx)) chat.MemberEnterDirectlyNotification(req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx))

View File

@ -24,7 +24,7 @@ type GroupInterface interface {
GetJoinedGroupList(ctx context.Context, userID string) ([]*relation2.GroupModel, error) GetJoinedGroupList(ctx context.Context, userID string) ([]*relation2.GroupModel, error)
GetGroupMemberList(ctx context.Context, groupID string) ([]*relation2.GroupMemberModel, error) GetGroupMemberList(ctx context.Context, groupID string) ([]*relation2.GroupMemberModel, error)
GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []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) FindGroupMembersByID(ctx context.Context, groupID string, userIDs []string) (groups []*relation2.GroupMemberModel, err error)
FindUserInGroup(ctx context.Context, groupID string, userIDs []string) ([]*relation2.GroupMemberModel, error) FindUserInGroup(ctx context.Context, groupID string, userIDs []string) ([]*relation2.GroupMemberModel, error)
DelGroupMember(ctx context.Context, groupID string, userIDs []string) error DelGroupMember(ctx context.Context, groupID string, userIDs []string) error