This commit is contained in:
withchao 2023-02-01 17:22:42 +08:00
parent d67515f53f
commit 3651274d68
4 changed files with 72 additions and 67 deletions

View File

@ -0,0 +1 @@
package group

View File

@ -171,8 +171,8 @@ 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 relation.GroupGorm var group table.GroupModel
var groupMembers []*relation.GroupMember var groupMembers []*table.GroupMemberModel
utils.CopyStructFields(&group, req.GroupInfo) utils.CopyStructFields(&group, req.GroupInfo)
group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID) group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID)
if req.GroupInfo.GroupType == constant.SuperGroup { if req.GroupInfo.GroupType == constant.SuperGroup {
@ -182,7 +182,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
} else { } else {
joinGroup := func(userID string, roleLevel int32) error { joinGroup := func(userID string, roleLevel int32) error {
user := userMap[userID] user := userMap[userID]
groupMember := &relation.GroupMember{GroupID: group.GroupID, RoleLevel: roleLevel, OperatorUserID: tracelog.GetOpUserID(ctx), JoinSource: constant.JoinByInvitation, InviterUserID: tracelog.GetOpUserID(ctx)} groupMember := &table.GroupMemberModel{GroupID: group.GroupID, RoleLevel: roleLevel, OperatorUserID: tracelog.GetOpUserID(ctx), JoinSource: constant.JoinByInvitation, InviterUserID: tracelog.GetOpUserID(ctx)}
utils.CopyStructFields(&groupMember, user) utils.CopyStructFields(&groupMember, user)
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
@ -204,7 +204,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
} }
} }
} }
if err := s.GroupInterface.CreateGroup(ctx, []*relation.GroupGorm{&group}, groupMembers); err != nil { if err := s.GroupInterface.CreateGroup(ctx, []*table.GroupModel{&group}, groupMembers); err != nil {
return nil, err return nil, err
} }
utils.CopyStructFields(resp.GroupInfo, group) utils.CopyStructFields(resp.GroupInfo, group)
@ -280,7 +280,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
if err != nil { if err != nil {
return nil, err return nil, err
} }
memberMap := make(map[string]*relation.GroupMember) memberMap := make(map[string]*table.GroupMemberModel)
for i, member := range members { for i, member := range members {
memberMap[member.GroupID] = members[i] memberMap[member.GroupID] = members[i]
} }
@ -306,9 +306,9 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
return nil, constant.ErrNoPermission.Wrap("not in group") return nil, constant.ErrNoPermission.Wrap("not in group")
} }
if !(member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin) { if !(member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin) {
var requests []*relation.GroupRequest var requests []*table.GroupRequestModel
for _, userID := range req.InvitedUserIDs { for _, userID := range req.InvitedUserIDs {
requests = append(requests, &relation.GroupRequest{ requests = append(requests, &table.GroupRequestModel{
UserID: userID, UserID: userID,
GroupID: req.GroupID, GroupID: req.GroupID,
JoinSource: constant.JoinByInvitation, JoinSource: constant.JoinByInvitation,
@ -339,10 +339,10 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
} }
} else { } else {
opUserID := tracelog.GetOpUserID(ctx) opUserID := tracelog.GetOpUserID(ctx)
var groupMembers []*relation.GroupMember var groupMembers []*table.GroupMemberModel
for _, userID := range req.InvitedUserIDs { for _, userID := range req.InvitedUserIDs {
user := userMap[userID] user := userMap[userID]
var member relation.GroupMember var member table.GroupMemberModel
utils.CopyStructFields(&member, user) utils.CopyStructFields(&member, user)
member.GroupID = req.GroupID member.GroupID = req.GroupID
member.RoleLevel = constant.GroupOrdinaryUsers member.RoleLevel = constant.GroupOrdinaryUsers
@ -400,25 +400,25 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr
return resp, nil return resp, nil
} }
func (s *groupServer) getGroupUserLevel(groupID, userID string) (int, error) { //func (s *groupServer) getGroupUserLevel(groupID, userID string) (int, error) {
opFlag := 0 // opFlag := 0
if !token_verify.IsManagerUserID(userID) { // if !token_verify.IsManagerUserID(userID) {
opInfo, err := relation.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID) // opInfo, err := relation.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID)
if err != nil { // if err != nil {
return opFlag, utils.Wrap(err, "") // return opFlag, utils.Wrap(err, "")
} // }
if opInfo.RoleLevel == constant.GroupOrdinaryUsers { // if opInfo.RoleLevel == constant.GroupOrdinaryUsers {
opFlag = 0 // opFlag = 0
} else if opInfo.RoleLevel == constant.GroupOwner { // } else if opInfo.RoleLevel == constant.GroupOwner {
opFlag = 2 // owner // opFlag = 2 // owner
} else { // } else {
opFlag = 3 // admin // opFlag = 3 // admin
} // }
} else { // } else {
opFlag = 1 // app manager // opFlag = 1 // app manager
} // }
return opFlag, nil // return opFlag, nil
} //}
func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) { func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) {
resp := &pbGroup.KickGroupMemberResp{} resp := &pbGroup.KickGroupMemberResp{}
@ -450,7 +450,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou
if err != nil { if err != nil {
return nil, err return nil, err
} }
memberMap := make(map[string]*relation.GroupMember) memberMap := make(map[string]*table.GroupMemberModel)
for i, member := range members { for i, member := range members {
memberMap[member.UserID] = members[i] memberMap[member.UserID] = members[i]
} }
@ -502,28 +502,28 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG
return resp, nil return resp, nil
} }
func FillGroupInfoByGroupID(operationID, groupID string, groupInfo *open_im_sdk.GroupInfo) error { //func FillGroupInfoByGroupID(operationID, groupID string, groupInfo *open_im_sdk.GroupInfo) error {
group, err := relation.TakeGroupInfoByGroupID(groupID) // group, err := relation.TakeGroupInfoByGroupID(groupID)
if err != nil { // if err != nil {
log.Error(operationID, "TakeGroupInfoByGroupID failed ", err.Error(), groupID) // log.Error(operationID, "TakeGroupInfoByGroupID failed ", err.Error(), groupID)
return utils.Wrap(err, "") // return utils.Wrap(err, "")
} // }
if group.Status == constant.GroupStatusDismissed { // if group.Status == constant.GroupStatusDismissed {
log.Debug(operationID, " group constant.GroupStatusDismissed ", group.GroupID) // log.Debug(operationID, " group constant.GroupStatusDismissed ", group.GroupID)
return utils.Wrap(constant.ErrDismissedAlready, "") // return utils.Wrap(constant.ErrDismissedAlready, "")
} // }
return utils.Wrap(cp.GroupDBCopyOpenIM(groupInfo, group), "") // return utils.Wrap(cp.GroupDBCopyOpenIM(groupInfo, group), "")
} //}
func FillPublicUserInfoByUserID(operationID, userID string, userInfo *open_im_sdk.PublicUserInfo) error { //func FillPublicUserInfoByUserID(operationID, userID string, userInfo *open_im_sdk.PublicUserInfo) error {
user, err := relation.TakeUserByUserID(userID) // user, err := relation.TakeUserByUserID(userID)
if err != nil { // if err != nil {
log.Error(operationID, "TakeUserByUserID failed ", err.Error(), userID) // log.Error(operationID, "TakeUserByUserID failed ", err.Error(), userID)
return utils.Wrap(err, "") // return utils.Wrap(err, "")
} // }
cp.UserDBCopyOpenIMPublicUser(userInfo, user) // cp.UserDBCopyOpenIMPublicUser(userInfo, user)
return nil // return nil
} //}
func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.GetGroupApplicationListReq) (*pbGroup.GetGroupApplicationListResp, error) { func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.GetGroupApplicationListReq) (*pbGroup.GetGroupApplicationListResp, error) {
resp := &pbGroup.GetGroupApplicationListResp{} resp := &pbGroup.GetGroupApplicationListResp{}
@ -555,7 +555,7 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.
if err != nil { if err != nil {
return nil, err return nil, err
} }
groupMap := make(map[string]*relation.GroupGorm) groupMap := make(map[string]*table.GroupModel)
for i, group := range groups { for i, group := range groups {
groupMap[group.GroupID] = groups[i] groupMap[group.GroupID] = groups[i]
} }
@ -628,7 +628,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
return nil, err return nil, err
} }
groupRequest := getDBGroupRequest(ctx, req) groupRequest := getDBGroupRequest(ctx, req)
if err := (&relation.GroupRequest{}).Update(ctx, []*relation.GroupRequest{groupRequest}); err != nil { if err := (&table.GroupRequestModel{}).Update(ctx, []*table.GroupRequestModel{groupRequest}); err != nil {
return nil, err return nil, err
} }
groupInfo, err := rocksCache.GetGroupInfoFromCache(ctx, req.GroupID) groupInfo, err := rocksCache.GetGroupInfoFromCache(ctx, req.GroupID)
@ -644,7 +644,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = (&relation.GroupMember{}).Create(ctx, []*relation.GroupMember{member}) err = (&table.GroupMemberModel{}).Create(ctx, []*table.GroupMemberModel{member})
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -698,7 +698,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
return nil, err return nil, err
} }
//to group member //to group member
groupMember := relation.GroupMember{GroupID: req.GroupID, RoleLevel: constant.GroupOrdinaryUsers, OperatorUserID: tracelog.GetOpUserID(ctx)} groupMember := table.GroupMemberModel{GroupID: req.GroupID, RoleLevel: constant.GroupOrdinaryUsers, OperatorUserID: tracelog.GetOpUserID(ctx)}
utils.CopyStructFields(&groupMember, us) utils.CopyStructFields(&groupMember, us)
if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), &groupMember, groupInfo.Ex); err != nil { if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), &groupMember, groupInfo.Ex); err != nil {
return nil, err return nil, err
@ -741,7 +741,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
return resp, nil return resp, nil
} }
} }
var groupRequest relation.GroupRequest var groupRequest table.GroupRequestModel
groupRequest.UserID = tracelog.GetOpUserID(ctx) groupRequest.UserID = tracelog.GetOpUserID(ctx)
groupRequest.ReqMsg = req.ReqMessage groupRequest.ReqMsg = req.ReqMessage
groupRequest.GroupID = req.GroupID groupRequest.GroupID = req.GroupID
@ -852,7 +852,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
} }
} }
//only administrators can set group information //only administrators can set group information
var groupInfo relation.GroupGorm var groupInfo table.GroupModel
utils.CopyStructFields(&groupInfo, req.GroupInfoForSet) utils.CopyStructFields(&groupInfo, req.GroupInfoForSet)
if req.GroupInfoForSet.Notification != "" { if req.GroupInfoForSet.Notification != "" {
groupInfo.NotificationUserID = tracelog.GetOpUserID(ctx) groupInfo.NotificationUserID = tracelog.GetOpUserID(ctx)
@ -929,12 +929,12 @@ func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbGroup.Trans
return nil, err return nil, err
} }
groupMemberInfo := relation.GroupMember{GroupID: req.GroupID, UserID: req.OldOwnerUserID, RoleLevel: constant.GroupOrdinaryUsers} groupMemberInfo := table.GroupMemberModel{GroupID: req.GroupID, UserID: req.OldOwnerUserID, RoleLevel: constant.GroupOrdinaryUsers}
err = relation.UpdateGroupMemberInfo(groupMemberInfo) err = relation.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil { if err != nil {
return nil, err return nil, err
} }
groupMemberInfo = relation.GroupMember{GroupID: req.GroupID, UserID: req.NewOwnerUserID, RoleLevel: constant.GroupOwner} groupMemberInfo = table.GroupMemberModel{GroupID: req.GroupID, UserID: req.NewOwnerUserID, RoleLevel: constant.GroupOwner}
err = relation.UpdateGroupMemberInfo(groupMemberInfo) err = relation.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil { if err != nil {
return nil, err return nil, err
@ -1128,7 +1128,7 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou
if err := rocksCache.DelGroupMemberInfoFromCache(ctx, req.GroupID, req.UserID); err != nil { if err := rocksCache.DelGroupMemberInfoFromCache(ctx, req.GroupID, req.UserID); err != nil {
return nil, err return nil, err
} }
groupMemberInfo := relation.GroupMember{GroupID: req.GroupID, UserID: req.UserID} groupMemberInfo := table.GroupMemberModel{GroupID: req.GroupID, UserID: req.UserID}
groupMemberInfo.MuteEndTime = time.Unix(int64(time.Now().Second())+int64(req.MutedSeconds), time.Now().UnixNano()) groupMemberInfo.MuteEndTime = time.Unix(int64(time.Now().Second())+int64(req.MutedSeconds), time.Now().UnixNano())
err = relation.UpdateGroupMemberInfo(groupMemberInfo) err = relation.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil { if err != nil {
@ -1163,7 +1163,7 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca
return nil, err return nil, err
} }
groupMemberInfo := relation.GroupMember{GroupID: req.GroupID, UserID: req.UserID} groupMemberInfo := table.GroupMemberModel{GroupID: req.GroupID, UserID: req.UserID}
groupMemberInfo.MuteEndTime = time.Unix(0, 0) groupMemberInfo.MuteEndTime = time.Unix(0, 0)
err = relation.UpdateGroupMemberInfo(groupMemberInfo) err = relation.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil { if err != nil {
@ -1262,7 +1262,7 @@ func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.S
return nil, err return nil, err
} }
nickName := cbReq.Nickname.Value nickName := cbReq.Nickname.Value
groupMemberInfo := relation.GroupMember{} groupMemberInfo := table.GroupMemberModel{}
groupMemberInfo.UserID = req.UserID groupMemberInfo.UserID = req.UserID
groupMemberInfo.GroupID = req.GroupID groupMemberInfo.GroupID = req.GroupID
if nickName == "" { if nickName == "" {
@ -1295,7 +1295,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr
if err := CallbackBeforeSetGroupMemberInfo(ctx, req); err != nil { if err := CallbackBeforeSetGroupMemberInfo(ctx, req); err != nil {
return nil, err return nil, err
} }
groupMember := relation.GroupMember{ groupMember := table.GroupMemberModel{
GroupID: req.GroupID, GroupID: req.GroupID,
UserID: req.UserID, UserID: req.UserID,
} }

View File

@ -15,21 +15,21 @@ import (
type GroupInterface interface { type GroupInterface interface {
FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*table.GroupModel, err error) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*table.GroupModel, err error)
CreateGroup(ctx context.Context, groups []*table.GroupModel, groupMember []*table.GroupModel) error CreateGroup(ctx context.Context, groups []*table.GroupModel, groupMember []*table.GroupMemberModel) error
DeleteGroupByIDs(ctx context.Context, groupIDs []string) error DeleteGroupByIDs(ctx context.Context, groupIDs []string) error
TakeGroupByID(ctx context.Context, groupID string) (group *table.GroupModel, err error) TakeGroupByID(ctx context.Context, groupID string) (group *table.GroupModel, err error)
TakeGroupMemberByID(ctx context.Context, groupID string, userID string) (groupMember *table.GroupModel, err error) TakeGroupMemberByID(ctx context.Context, groupID string, userID string) (groupMember *table.GroupModel, err error)
GetJoinedGroupList(ctx context.Context, userID string) ([]*table.GroupModel, error) GetJoinedGroupList(ctx context.Context, userID string) ([]*table.GroupModel, error)
GetGroupMemberList(ctx context.Context, groupID string) ([]*table.GroupModel, error) GetGroupMemberList(ctx context.Context, groupID string) ([]*table.GroupMemberModel, error)
GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*table.GroupModel, error) GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*table.GroupMemberModel, error)
GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*table.GroupModel, error) // relation.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30) GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*table.GroupModel, error) // relation.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30)
FindGroupMembersByID(ctx context.Context, groupID string, userIDs []string) (groups []*table.GroupModel, err error) FindGroupMembersByID(ctx context.Context, groupID string, userIDs []string) (groups []*table.GroupMemberModel, err error)
DelGroupMember(ctx context.Context, groupID string, userIDs []string) error DelGroupMember(ctx context.Context, groupID string, userIDs []string) error
GetGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]int, error) GetGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]int, error)
GetGroupOwnerUserID(ctx context.Context, groupIDs []string) (map[string]string, error) GetGroupOwnerUserID(ctx context.Context, groupIDs []string) (map[string]string, error)
GetGroupRecvApplicationList(ctx context.Context, userID string) ([]*table.GroupRequestModel, error) GetGroupRecvApplicationList(ctx context.Context, userID string) ([]*table.GroupRequestModel, error)
CreateGroupMember(ctx context.Context, groupMember []*table.GroupModel) error CreateGroupMember(ctx context.Context, groupMember []*table.GroupMemberModel) error
CreateGroupRequest(ctx context.Context, requests []*table.GroupRequestModel) error CreateGroupRequest(ctx context.Context, requests []*table.GroupRequestModel) error
//mongo //mongo

View File

@ -73,6 +73,10 @@ func CheckAccessV3(ctx context.Context, ownerUserID string) (err error) {
return constant.ErrIdentity.Wrap(utils.GetSelfFuncName()) return constant.ErrIdentity.Wrap(utils.GetSelfFuncName())
} }
func IsAppManagerUid(ctx context.Context) bool {
return utils.IsContain(tracelog.GetOpUserID(ctx), config.Config.Manager.AppManagerUid)
}
func CheckAdmin(ctx context.Context) error { func CheckAdmin(ctx context.Context) error {
if utils.IsContain(tracelog.GetOpUserID(ctx), config.Config.Manager.AppManagerUid) { if utils.IsContain(tracelog.GetOpUserID(ctx), config.Config.Manager.AppManagerUid) {
return nil return nil