Merge branch 'errcode' of github.com:OpenIMSDK/Open-IM-Server into errcode

 Conflicts:
	pkg/common/db/relation/friend_model_k.go
This commit is contained in:
wangchuxiao 2023-02-01 17:13:06 +08:00
commit c2fbcd1f22
32 changed files with 962 additions and 1203 deletions

View File

@ -2,6 +2,7 @@ package convert
import ( import (
"Open_IM/pkg/common/db/relation" "Open_IM/pkg/common/db/relation"
"Open_IM/pkg/common/db/table"
sdk "Open_IM/pkg/proto/sdk_ws" sdk "Open_IM/pkg/proto/sdk_ws"
utils "github.com/OpenIMSDK/open_utils" utils "github.com/OpenIMSDK/open_utils"
"time" "time"
@ -19,10 +20,10 @@ func getNumberOfGroupMember(groupID string) (int32, error) {
} }
type DBFriend struct { type DBFriend struct {
*relation.Friend *table.FriendModel
} }
func NewDBFriend(friend *relation.Friend) *DBFriend { func NewDBFriend(friend *controller.Friend) *DBFriend {
return &DBFriend{Friend: friend} return &DBFriend{Friend: friend}
} }

View File

@ -45,8 +45,8 @@ func NewFriendServer(port int) *friendServer {
} }
//mysql init //mysql init
var mysql relation.Mysql var mysql relation.Mysql
var model relation.Friend var model relation.FriendGorm
err := mysql.InitConn().AutoMigrateModel(&model) err := mysql.InitConn().AutoMigrateModel(&relation.FriendModel{})
if err != nil { if err != nil {
panic("db init err:" + err.Error()) panic("db init err:" + err.Error())
} }
@ -171,7 +171,7 @@ func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbFriend.Res
if err := check.Access(ctx, req.ToUserID); err != nil { if err := check.Access(ctx, req.ToUserID); err != nil {
return nil, err return nil, err
} }
friendRequest := relation.FriendRequest{FromUserID: req.FromUserID, ToUserID: req.ToUserID, HandleMsg: req.HandleMsg, HandleResult: req.HandleResult} friendRequest := controller.FriendRequest{FromUserID: req.FromUserID, ToUserID: req.ToUserID, HandleMsg: req.HandleMsg, HandleResult: req.HandleResult}
if req.HandleResult == constant.FriendResponseAgree { if req.HandleResult == constant.FriendResponseAgree {
err := s.AgreeFriendRequest(ctx, &friendRequest) err := s.AgreeFriendRequest(ctx, &friendRequest)
if err != nil { if err != nil {

View File

@ -1,9 +1,7 @@
package group package group
import ( import (
"Open_IM/pkg/common/constant" "Open_IM/pkg/common/tracelog"
relation "Open_IM/pkg/common/db/mysql"
pbGroup "Open_IM/pkg/proto/group"
sdk_ws "Open_IM/pkg/proto/sdk_ws" sdk_ws "Open_IM/pkg/proto/sdk_ws"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
@ -12,32 +10,32 @@ import (
"time" "time"
) )
func getDBGroupRequest(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (dbGroupRequest *relation.GroupRequest) { //func getDBGroupRequest(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (dbGroupRequest *relation.GroupRequest) {
dbGroupRequest = &relation.GroupRequest{} // dbGroupRequest = &relation.GroupRequest{}
utils.CopyStructFields(&dbGroupRequest, req) // utils.CopyStructFields(&dbGroupRequest, req)
dbGroupRequest.UserID = req.FromUserID // dbGroupRequest.UserID = req.FromUserID
dbGroupRequest.HandleUserID = utils.OpUserID(ctx) // dbGroupRequest.HandleUserID = utils.OpUserID(ctx)
dbGroupRequest.HandledTime = time.Now() // dbGroupRequest.HandledTime = time.Now()
return dbGroupRequest // return dbGroupRequest
} //}
//
func getDBGroupMember(ctx context.Context, groupID, userID string) (dbGroupMember *relation.GroupMember, err error) { //func getDBGroupMember(ctx context.Context, groupID, userID string) (dbGroupMember *relation.GroupMember, err error) {
dbGroupMember = &relation.GroupMember{} // dbGroupMember = &relation.GroupMember{}
//
member := relation.GroupMember{} // member := relation.GroupMember{}
member.GroupID = groupID // member.GroupID = groupID
member.UserID = userID // member.UserID = userID
member.RoleLevel = constant.GroupOrdinaryUsers // member.RoleLevel = constant.GroupOrdinaryUsers
member.OperatorUserID = utils.OpUserID(ctx) // member.OperatorUserID = utils.OpUserID(ctx)
//
member.FaceURL = user.FaceURL // member.FaceURL = user.FaceURL
member.Nickname = user.Nickname // member.Nickname = user.Nickname
member.JoinSource = request.JoinSource // member.JoinSource = request.JoinSource
member.InviterUserID = request.InviterUserID // member.InviterUserID = request.InviterUserID
member.MuteEndTime = time.Unix(int64(time.Now().Second()), 0) // member.MuteEndTime = time.Unix(int64(time.Now().Second()), 0)
//
return dbGroupMember, nil // return dbGroupMember, nil
} //}
func getUsersInfo(ctx context.Context, userIDs []string) ([]*sdk_ws.UserInfo, error) { func getUsersInfo(ctx context.Context, userIDs []string) ([]*sdk_ws.UserInfo, error) {
return nil, nil return nil, nil
@ -59,7 +57,7 @@ func genGroupID(ctx context.Context, groupID string) string {
if groupID != "" { if groupID != "" {
return groupID return groupID
} }
groupID = utils.Md5(utils.OperationID(ctx) + strconv.FormatInt(time.Now().UnixNano(), 10)) groupID = utils.Md5(tracelog.GetOperationID(ctx) + strconv.FormatInt(time.Now().UnixNano(), 10))
bi := big.NewInt(0) bi := big.NewInt(0)
bi.SetString(groupID[0:8], 16) bi.SetString(groupID[0:8], 16)
groupID = bi.String() groupID = bi.String()

View File

@ -8,14 +8,15 @@ import (
"Open_IM/pkg/common/db/cache" "Open_IM/pkg/common/db/cache"
"Open_IM/pkg/common/db/controller" "Open_IM/pkg/common/db/controller"
"Open_IM/pkg/common/db/relation" "Open_IM/pkg/common/db/relation"
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/db/unrelation" "Open_IM/pkg/common/db/unrelation"
"Open_IM/pkg/common/log" "Open_IM/pkg/common/log"
"Open_IM/pkg/common/middleware" "Open_IM/pkg/common/middleware"
promePkg "Open_IM/pkg/common/prometheus" promePkg "Open_IM/pkg/common/prometheus"
"Open_IM/pkg/common/token_verify" "Open_IM/pkg/common/token_verify"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"fmt"
cp "Open_IM/internal/utils"
"Open_IM/pkg/getcdv3" "Open_IM/pkg/getcdv3"
pbConversation "Open_IM/pkg/proto/conversation" pbConversation "Open_IM/pkg/proto/conversation"
pbGroup "Open_IM/pkg/proto/group" pbGroup "Open_IM/pkg/proto/group"
@ -54,7 +55,7 @@ func NewGroupServer(port int) *groupServer {
//mysql init //mysql init
var mysql relation.Mysql var mysql relation.Mysql
var mongo unrelation.Mongo var mongo unrelation.Mongo
var groupModel relation.Group var groupModel table.GroupModel
var redis cache.RedisClient var redis cache.RedisClient
err := mysql.InitConn().AutoMigrateModel(&groupModel) err := mysql.InitConn().AutoMigrateModel(&groupModel)
if err != nil { if err != nil {
@ -144,7 +145,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
return nil, constant.ErrArgs.Wrap("no group owner") return nil, constant.ErrArgs.Wrap("no group owner")
} }
var userIDs []string var userIDs []string
for _, userID := range req.InitMemberList { for _, userID := range req.InitMembers {
userIDs = append(userIDs, userID) userIDs = append(userIDs, userID)
} }
for _, userID := range req.AdminUserIDs { for _, userID := range req.AdminUserIDs {
@ -170,7 +171,7 @@ 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.Group var group relation.GroupGorm
var groupMembers []*relation.GroupMember var groupMembers []*relation.GroupMember
utils.CopyStructFields(&group, req.GroupInfo) utils.CopyStructFields(&group, req.GroupInfo)
group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID) group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID)
@ -179,12 +180,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
return nil, err return nil, err
} }
} else { } else {
opUserID := utils.OpUserID(ctx)
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: opUserID, JoinSource: constant.JoinByInvitation, InviterUserID: opUserID} groupMember := &relation.GroupMember{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, utils.OperationID(ctx), groupMember, group.Ex); err != nil { if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), groupMember, group.Ex); err != nil {
return err return err
} }
groupMembers = append(groupMembers, groupMember) groupMembers = append(groupMembers, groupMember)
@ -198,13 +198,13 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
return nil, err return nil, err
} }
} }
for _, userID := range req.InitMemberList { for _, userID := range req.InitMembers {
if err := joinGroup(userID, constant.GroupOrdinaryUsers); err != nil { if err := joinGroup(userID, constant.GroupOrdinaryUsers); err != nil {
return nil, err return nil, err
} }
} }
} }
if err := s.GroupInterface.CreateGroup(ctx, []*relation.Group{&group}, groupMembers); err != nil { if err := s.GroupInterface.CreateGroup(ctx, []*relation.GroupGorm{&group}, groupMembers); err != nil {
return nil, err return nil, err
} }
utils.CopyStructFields(resp.GroupInfo, group) utils.CopyStructFields(resp.GroupInfo, group)
@ -212,11 +212,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
if req.GroupInfo.GroupType == constant.SuperGroup { if req.GroupInfo.GroupType == constant.SuperGroup {
go func() { go func() {
for _, userID := range userIDs { for _, userID := range userIDs {
chat.SuperGroupNotification(utils.OperationID(ctx), userID, userID) chat.SuperGroupNotification(tracelog.GetOperationID(ctx), userID, userID)
} }
}() }()
} else { } else {
chat.GroupCreatedNotification(utils.OperationID(ctx), utils.OpUserID(ctx), group.GroupID, userIDs) chat.GroupCreatedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), group.GroupID, userIDs)
} }
return resp, nil return resp, nil
} }
@ -255,18 +255,18 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo
groupNode.OwnerUserID = groupOwnerUserID[group.GroupID] groupNode.OwnerUserID = groupOwnerUserID[group.GroupID]
groupNode.CreateTime = group.CreateTime.UnixMilli() groupNode.CreateTime = group.CreateTime.UnixMilli()
groupNode.NotificationUpdateTime = group.NotificationUpdateTime.UnixMilli() groupNode.NotificationUpdateTime = group.NotificationUpdateTime.UnixMilli()
resp.GroupList = append(resp.GroupList, &groupNode) resp.Groups = append(resp.Groups, &groupNode)
} }
resp.Total = int32(len(resp.GroupList)) resp.Total = int32(len(resp.Groups))
return resp, nil return resp, nil
} }
func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) { func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) {
resp := &pbGroup.InviteUserToGroupResp{} resp := &pbGroup.InviteUserToGroupResp{}
if len(req.InvitedUserIDList) == 0 { if len(req.InvitedUserIDs) == 0 {
return nil, constant.ErrArgs.Wrap("user empty") return nil, constant.ErrArgs.Wrap("user empty")
} }
if utils.IsDuplicateID(req.InvitedUserIDList) { if utils.IsDuplicateID(req.InvitedUserIDs) {
return nil, constant.ErrArgs.Wrap("userID duplicate") return nil, constant.ErrArgs.Wrap("userID duplicate")
} }
group, err := s.GroupInterface.TakeGroupByID(ctx, req.GroupID) group, err := s.GroupInterface.TakeGroupByID(ctx, req.GroupID)
@ -284,30 +284,30 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
for i, member := range members { for i, member := range members {
memberMap[member.GroupID] = members[i] memberMap[member.GroupID] = members[i]
} }
for _, userID := range req.InvitedUserIDList { for _, userID := range req.InvitedUserIDs {
if _, ok := memberMap[userID]; ok { if _, ok := memberMap[userID]; ok {
return nil, constant.ErrArgs.Wrap("user in group " + userID) return nil, constant.ErrArgs.Wrap("user in group " + userID)
} }
} }
userMap, err := getUserMap(ctx, req.InvitedUserIDList) userMap, err := getUserMap(ctx, req.InvitedUserIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, userID := range req.InvitedUserIDList { for _, userID := range req.InvitedUserIDs {
if _, ok := userMap[userID]; !ok { if _, ok := userMap[userID]; !ok {
return nil, constant.ErrUserIDNotFound.Wrap(userID) return nil, constant.ErrUserIDNotFound.Wrap(userID)
} }
} }
if group.NeedVerification == constant.AllNeedVerification { if group.NeedVerification == constant.AllNeedVerification {
if !token_verify.IsAppManagerUid(ctx) { if !token_verify.IsAppManagerUid(ctx) {
opUserID := utils.OpUserID(ctx) opUserID := tracelog.GetOpUserID(ctx)
member, ok := memberMap[opUserID] member, ok := memberMap[opUserID]
if ok { if !ok {
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 []*relation.GroupRequest
for _, userID := range req.InvitedUserIDList { for _, userID := range req.InvitedUserIDs {
requests = append(requests, &relation.GroupRequest{ requests = append(requests, &relation.GroupRequest{
UserID: userID, UserID: userID,
GroupID: req.GroupID, GroupID: req.GroupID,
@ -331,24 +331,25 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
} }
} }
if group.GroupType == constant.SuperGroup { if group.GroupType == constant.SuperGroup {
if err := s.GroupInterface.AddUserToSuperGroup(ctx, req.GroupID, req.InvitedUserIDList); err != nil { if err := s.GroupInterface.AddUserToSuperGroup(ctx, req.GroupID, req.InvitedUserIDs); err != nil {
return nil, err return nil, err
} }
for _, userID := range req.InvitedUserIDList { for _, userID := range req.InvitedUserIDs {
chat.SuperGroupNotification(utils.OperationID(ctx), userID, userID) chat.SuperGroupNotification(tracelog.GetOperationID(ctx), userID, userID)
} }
} else { } else {
opUserID := tracelog.GetOpUserID(ctx)
var groupMembers []*relation.GroupMember var groupMembers []*relation.GroupMember
for _, userID := range req.InvitedUserIDList { for _, userID := range req.InvitedUserIDs {
user := userMap[userID] user := userMap[userID]
var member relation.GroupMember var member relation.GroupMember
utils.CopyStructFields(&member, user) utils.CopyStructFields(&member, user)
member.GroupID = req.GroupID member.GroupID = req.GroupID
member.RoleLevel = constant.GroupOrdinaryUsers member.RoleLevel = constant.GroupOrdinaryUsers
member.OperatorUserID = utils.OpUserID(ctx) member.OperatorUserID = opUserID
member.InviterUserID = utils.OpUserID(ctx) member.InviterUserID = opUserID
member.JoinSource = constant.JoinByInvitation member.JoinSource = constant.JoinByInvitation
if err := CallbackBeforeMemberJoinGroup(ctx, utils.OperationID(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)
@ -356,7 +357,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
if err := s.GroupInterface.CreateGroupMember(ctx, groupMembers); err != nil { if err := s.GroupInterface.CreateGroupMember(ctx, groupMembers); err != nil {
return nil, err return nil, err
} }
chat.MemberInvitedNotification(utils.OperationID(ctx), req.GroupID, utils.OpUserID(ctx), req.Reason, req.InvitedUserIDList) chat.MemberInvitedNotification(tracelog.GetOperationID(ctx), req.GroupID, tracelog.GetOpUserID(ctx), req.Reason, req.InvitedUserIDs)
} }
return resp, nil return resp, nil
} }
@ -379,7 +380,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro
for _, member := range members { for _, member := range members {
var node open_im_sdk.GroupMemberFullInfo var node open_im_sdk.GroupMemberFullInfo
utils.CopyStructFields(&node, member) utils.CopyStructFields(&node, member)
resp.MemberList = append(resp.MemberList, &node) resp.Members = append(resp.Members, &node)
} }
} }
return resp, nil return resp, nil
@ -387,20 +388,14 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro
func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGroupMemberListReq) (*pbGroup.GetGroupMemberListResp, error) { func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGroupMemberListReq) (*pbGroup.GetGroupMemberListResp, error) {
resp := &pbGroup.GetGroupMemberListResp{} resp := &pbGroup.GetGroupMemberListResp{}
memberList, err := s.GroupInterface.GetGroupMemberFilterList(ctx, req.GroupID, req.Filter, req.NextSeq, 30) members, err := s.GroupInterface.GetGroupMemberFilterList(ctx, req.GroupID, req.Filter, req.Pagination.PageNumber, req.Pagination.ShowNumber)
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, v := range memberList { for _, member := range members {
var node open_im_sdk.GroupMemberFullInfo var info open_im_sdk.GroupMemberFullInfo
utils.CopyStructFields(&node, &v) utils.CopyStructFields(&info, &member)
resp.MemberList = append(resp.MemberList, &node) resp.Members = append(resp.Members, &info)
}
//db operate get db sorted by join time
if int32(len(memberList)) < 30 {
resp.NextSeq = 0
} else {
resp.NextSeq = req.NextSeq + int32(len(memberList))
} }
return resp, nil return resp, nil
} }
@ -415,132 +410,86 @@ func (s *groupServer) getGroupUserLevel(groupID, userID string) (int, error) {
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{}
group, err := s.GroupInterface.TakeGroupByID(ctx, req.GroupID)
groupInfo, err := rocksCache.GetGroupInfoFromCache(ctx, req.GroupID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var okUserIDList []string if len(req.KickedUserIDs) == 0 {
if groupInfo.GroupType != constant.SuperGroup { return nil, constant.ErrArgs.Wrap("KickedUserIDs empty")
opFlag := 0
if !token_verify.IsManagerUserID(utils.OpUserID(ctx)) {
opInfo, err := rocksCache.GetGroupMemberInfoFromCache(ctx, req.GroupID, utils.OpUserID(ctx))
if err != nil {
return nil, err
}
if opInfo.RoleLevel == constant.GroupOrdinaryUsers {
return nil, utils.Wrap(constant.ErrNoPermission, "")
} else if opInfo.RoleLevel == constant.GroupOwner {
opFlag = 2 //owner
} else {
opFlag = 3 //admin
}
} else {
opFlag = 1 //app manager
}
//op is group owner?
if len(req.KickedUserIDList) == 0 {
//log.NewError(req.OperationID, "failed, kick list 0")
//return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil
return nil, utils.Wrap(constant.ErrArgs, "")
}
if err := s.DelGroupAndUserCache(ctx, req.GroupID, req.KickedUserIDList); err != nil {
return nil, err
}
//remove
for _, v := range req.KickedUserIDList {
kickedInfo, err := rocksCache.GetGroupMemberInfoFromCache(ctx, req.GroupID, v)
if err != nil {
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
tracelog.SetCtxInfo(ctx, "GetGroupMemberInfoFromCache", err, "groupID", req.GroupID, "userID", v)
continue
}
if kickedInfo.RoleLevel == constant.GroupAdmin && opFlag == 3 {
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
tracelog.SetCtxInfo(ctx, "", nil, "msg", "is constant.GroupAdmin, can't kicked", "groupID", req.GroupID, "userID", v)
continue
}
if kickedInfo.RoleLevel == constant.GroupOwner && opFlag != 1 {
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
tracelog.SetCtxInfo(ctx, "", nil, "msg", "is constant.GroupOwner, can't kicked", "groupID", req.GroupID, "userID", v)
continue
}
err = relation.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, v)
tracelog.SetCtxInfo(ctx, "RemoveGroupMember", err, "groupID", req.GroupID, "userID", v)
if err != nil {
log.NewError(utils.OperationID(ctx), "RemoveGroupMember failed ", err.Error(), req.GroupID, v)
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
} else {
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0})
okUserIDList = append(okUserIDList, v)
}
}
var reqPb pbUser.SetConversationReq
var c pbConversation.Conversation
for _, v := range okUserIDList {
reqPb.OperationID = utils.OperationID(ctx)
c.OwnerUserID = v
c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)
c.ConversationType = constant.GroupChatType
c.GroupID = req.GroupID
c.IsNotInGroup = true
reqPb.Conversation = &c
etcdConn, err := getcdv3.GetConn(ctx, config.Config.RpcRegisterName.OpenImUserName)
if err != nil {
return nil, err
}
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.SetConversation(context.Background(), &reqPb)
tracelog.SetCtxInfo(ctx, "SetConversation", err, "req", &reqPb, "resp", respPb)
}
} else {
okUserIDList = req.KickedUserIDList
if err := db.DB.RemoverUserFromSuperGroup(req.GroupID, okUserIDList); err != nil {
return nil, err
}
} }
if utils.IsDuplicateStringSlice(req.KickedUserIDs) {
if groupInfo.GroupType != constant.SuperGroup { return nil, constant.ErrArgs.Wrap("KickedUserIDs duplicate")
for _, userID := range okUserIDList { }
if err := rocksCache.DelGroupMemberInfoFromCache(ctx, req.GroupID, userID); err != nil { opUserID := tracelog.GetOpUserID(ctx)
tracelog.SetCtxInfo(ctx, "DelGroupMemberInfoFromCache", err, "groupID", req.GroupID, "userID", userID) if utils.IsContain(opUserID, req.KickedUserIDs) {
} return nil, constant.ErrArgs.Wrap("opUserID in KickedUserIDs")
} }
chat.MemberKickedNotification(req, okUserIDList) if group.GroupType == constant.SuperGroup {
} else { if err := s.GroupInterface.DelSuperGroupMember(ctx, req.GroupID, req.KickedUserIDs); err != nil {
for _, userID := range okUserIDList { return nil, err
if err = rocksCache.DelJoinedSuperGroupIDListFromCache(ctx, userID); err != nil {
tracelog.SetCtxInfo(ctx, "DelGroupMemberInfoFromCache", err, "userID", userID)
}
} }
go func() { go func() {
for _, v := range req.KickedUserIDList { for _, userID := range req.KickedUserIDs {
chat.SuperGroupNotification(utils.OperationID(ctx), v, v) chat.SuperGroupNotification(tracelog.GetOperationID(ctx), userID, userID)
} }
}() }()
} else {
members, err := s.GroupInterface.FindGroupMembersByID(ctx, req.GroupID, append(req.KickedUserIDs, opUserID))
if err != nil {
return nil, err
}
memberMap := make(map[string]*relation.GroupMember)
for i, member := range members {
memberMap[member.UserID] = members[i]
}
for _, userID := range req.KickedUserIDs {
if _, ok := memberMap[userID]; !ok {
return nil, constant.ErrUserIDNotFound.Wrap(userID)
}
}
if !token_verify.IsAppManagerUid(ctx) {
member := memberMap[opUserID]
if member == nil {
return nil, constant.ErrNoPermission.Wrap(fmt.Sprintf("opUserID %s no in group", opUserID))
}
switch member.RoleLevel {
case constant.GroupOwner:
case constant.GroupAdmin:
for _, member := range members {
if member.UserID == opUserID {
continue
}
if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin {
return nil, constant.ErrNoPermission.Wrap("userID:" + member.UserID)
}
}
default:
return nil, constant.ErrNoPermission.Wrap("opUserID is OrdinaryUser")
}
}
if err := s.GroupInterface.DelGroupMember(ctx, group.GroupID, req.KickedUserIDs); err != nil {
return nil, err
}
chat.MemberKickedNotification(req, req.KickedUserIDs)
} }
return resp, nil return resp, nil
} }
func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetGroupMembersInfoReq) (*pbGroup.GetGroupMembersInfoResp, error) { func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetGroupMembersInfoReq) (*pbGroup.GetGroupMembersInfoResp, error) {
resp := &pbGroup.GetGroupMembersInfoResp{} resp := &pbGroup.GetGroupMembersInfoResp{}
members, err := s.GroupInterface.GetGroupMemberListByUserID(ctx, req.GroupID, req.MemberList) members, err := s.GroupInterface.GetGroupMemberListByUserID(ctx, req.GroupID, req.Members)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -548,7 +497,7 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG
var memberNode open_im_sdk.GroupMemberFullInfo var memberNode open_im_sdk.GroupMemberFullInfo
utils.CopyStructFields(&memberNode, member) utils.CopyStructFields(&memberNode, member)
memberNode.JoinTime = member.JoinTime.UnixMilli() memberNode.JoinTime = member.JoinTime.UnixMilli()
resp.MemberList = append(resp.MemberList, &memberNode) resp.Members = append(resp.Members, &memberNode)
} }
return resp, nil return resp, nil
} }
@ -578,15 +527,51 @@ func FillPublicUserInfoByUserID(operationID, userID string, userInfo *open_im_sd
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{}
reply, err := relation.GetRecvGroupApplicationList(req.FromUserID) groupRequests, err := s.GroupInterface.GetGroupRecvApplicationList(ctx, req.FromUserID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(groupRequests) == 0 {
return resp, nil
}
var (
userIDs []string
groupIDs []string
)
for _, gr := range groupRequests {
userIDs = append(userIDs, gr.UserID)
groupIDs = append(groupIDs, gr.GroupID)
}
userMap, err := getUserMap(ctx, userIDs)
if err != nil {
return nil, err
}
for _, userID := range userIDs {
if _, ok := userMap[userID]; !ok {
return nil, constant.ErrUserIDNotFound.Wrap(userID)
}
}
groups, err := s.GroupInterface.FindGroupsByID(ctx, groupIDs)
if err != nil {
return nil, err
}
groupMap := make(map[string]*relation.GroupGorm)
for i, group := range groups {
groupMap[group.GroupID] = groups[i]
}
for _, gr := range groupRequests {
groupRequest := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}, GroupInfo: &open_im_sdk.GroupInfo{}}
utils.CopyStructFields(&groupRequest, gr)
getUserMap()
}
var errResult error var errResult error
tracelog.SetCtxInfo(ctx, "GetRecvGroupApplicationList", nil, " FromUserID: ", req.FromUserID, "GroupApplicationList: ", reply) tracelog.SetCtxInfo(ctx, "GetRecvGroupApplicationList", nil, " FromUserID: ", req.FromUserID, "GroupApplicationList: ", groupRequests)
for _, v := range reply { for _, v := range groupRequests {
node := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}, GroupInfo: &open_im_sdk.GroupInfo{}} node := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}, GroupInfo: &open_im_sdk.GroupInfo{}}
err := FillGroupInfoByGroupID(utils.OperationID(ctx), v.GroupID, node.GroupInfo) err := FillGroupInfoByGroupID(tracelog.GetOperationID(ctx), v.GroupID, node.GroupInfo)
if err != nil { if err != nil {
if !errors.Is(errors.Unwrap(err), constant.ErrDismissedAlready) { if !errors.Is(errors.Unwrap(err), constant.ErrDismissedAlready) {
errResult = err errResult = err
@ -594,7 +579,7 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.
continue continue
} }
tracelog.SetCtxInfo(ctx, "FillGroupInfoByGroupID ", nil, " groupID: ", v.GroupID, " groupInfo: ", node.GroupInfo) tracelog.SetCtxInfo(ctx, "FillGroupInfoByGroupID ", nil, " groupID: ", v.GroupID, " groupInfo: ", node.GroupInfo)
err = FillPublicUserInfoByUserID(utils.OperationID(ctx), v.UserID, node.UserInfo) err = FillPublicUserInfoByUserID(tracelog.GetOperationID(ctx), v.UserID, node.UserInfo)
if err != nil { if err != nil {
errResult = err errResult = err
continue continue
@ -639,7 +624,7 @@ func CheckPermission(ctx context.Context, groupID string, userID string) (err er
func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (*pbGroup.GroupApplicationResponseResp, error) { func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (*pbGroup.GroupApplicationResponseResp, error) {
resp := &pbGroup.GroupApplicationResponseResp{} resp := &pbGroup.GroupApplicationResponseResp{}
if err := CheckPermission(ctx, req.GroupID, utils.OpUserID(ctx)); err != nil { if err := CheckPermission(ctx, req.GroupID, tracelog.GetOpUserID(ctx)); err != nil {
return nil, err return nil, err
} }
groupRequest := getDBGroupRequest(ctx, req) groupRequest := getDBGroupRequest(ctx, req)
@ -655,7 +640,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = CallbackBeforeMemberJoinGroup(ctx, utils.OperationID(ctx), member, groupInfo.Ex) err = CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), member, groupInfo.Ex)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -663,12 +648,12 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
if err != nil { if err != nil {
return nil, err return nil, err
} }
etcdCacheConn, err := fault_tolerant.GetDefaultConn(config.Config.RpcRegisterName.OpenImCacheName, utils.OperationID(ctx)) etcdCacheConn, err := fault_tolerant.GetDefaultConn(config.Config.RpcRegisterName.OpenImCacheName, tracelog.GetOperationID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
cacheClient := pbCache.NewCacheClient(etcdCacheConn) cacheClient := pbCache.NewCacheClient(etcdCacheConn)
cacheResp, err := cacheClient.DelGroupMemberIDListFromCache(context.Background(), &pbCache.DelGroupMemberIDListFromCacheReq{OperationID: utils.OperationID(ctx), GroupID: req.GroupID}) cacheResp, err := cacheClient.DelGroupMemberIDListFromCache(context.Background(), &pbCache.DelGroupMemberIDListFromCacheReq{OperationID: tracelog.GetOperationID(ctx), GroupID: req.GroupID})
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -695,7 +680,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) { func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) {
resp := &pbGroup.JoinGroupResp{} resp := &pbGroup.JoinGroupResp{}
if _, err := relation.GetUserByUserID(utils.OpUserID(ctx)); err != nil { if _, err := relation.GetUserByUserID(tracelog.GetOpUserID(ctx)); err != nil {
return nil, err return nil, err
} }
groupInfo, err := rocksCache.GetGroupInfoFromCache(ctx, req.GroupID) groupInfo, err := rocksCache.GetGroupInfoFromCache(ctx, req.GroupID)
@ -708,17 +693,17 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
if groupInfo.NeedVerification == constant.Directly { if groupInfo.NeedVerification == constant.Directly {
if groupInfo.GroupType != constant.SuperGroup { if groupInfo.GroupType != constant.SuperGroup {
us, err := relation.GetUserByUserID(utils.OpUserID(ctx)) us, err := relation.GetUserByUserID(tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
//to group member //to group member
groupMember := relation.GroupMember{GroupID: req.GroupID, RoleLevel: constant.GroupOrdinaryUsers, OperatorUserID: utils.OpUserID(ctx)} groupMember := relation.GroupMember{GroupID: req.GroupID, RoleLevel: constant.GroupOrdinaryUsers, OperatorUserID: tracelog.GetOpUserID(ctx)}
utils.CopyStructFields(&groupMember, us) utils.CopyStructFields(&groupMember, us)
if err := CallbackBeforeMemberJoinGroup(ctx, utils.OperationID(ctx), &groupMember, groupInfo.Ex); err != nil { if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), &groupMember, groupInfo.Ex); err != nil {
return nil, err return nil, err
} }
if err := s.DelGroupAndUserCache(ctx, req.GroupID, []string{utils.OpUserID(ctx)}); err != nil { if err := s.DelGroupAndUserCache(ctx, req.GroupID, []string{tracelog.GetOpUserID(ctx)}); err != nil {
return nil, err return nil, err
} }
err = relation.InsertIntoGroupMember(groupMember) err = relation.InsertIntoGroupMember(groupMember)
@ -734,8 +719,8 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
} }
var reqPb pbUser.SetConversationReq var reqPb pbUser.SetConversationReq
var c pbConversation.Conversation var c pbConversation.Conversation
reqPb.OperationID = utils.OperationID(ctx) reqPb.OperationID = tracelog.GetOperationID(ctx)
c.OwnerUserID = utils.OpUserID(ctx) c.OwnerUserID = tracelog.GetOpUserID(ctx)
c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, sessionType) c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, sessionType)
c.ConversationType = int32(sessionType) c.ConversationType = int32(sessionType)
c.GroupID = req.GroupID c.GroupID = req.GroupID
@ -749,7 +734,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
client := pbUser.NewUserClient(etcdConn) client := pbUser.NewUserClient(etcdConn)
respPb, err := client.SetConversation(context.Background(), &reqPb) respPb, err := client.SetConversation(context.Background(), &reqPb)
tracelog.SetCtxInfo(ctx, "SetConversation", err, "req", reqPb, "resp", respPb) tracelog.SetCtxInfo(ctx, "SetConversation", err, "req", reqPb, "resp", respPb)
chat.MemberEnterDirectlyNotification(req.GroupID, utils.OpUserID(ctx), utils.OperationID(ctx)) chat.MemberEnterDirectlyNotification(req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx))
return resp, nil return resp, nil
} else { } else {
constant.SetErrorForResp(constant.ErrGroupTypeNotSupport, resp.CommonResp) constant.SetErrorForResp(constant.ErrGroupTypeNotSupport, resp.CommonResp)
@ -757,7 +742,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
} }
} }
var groupRequest relation.GroupRequest var groupRequest relation.GroupRequest
groupRequest.UserID = utils.OpUserID(ctx) groupRequest.UserID = tracelog.GetOpUserID(ctx)
groupRequest.ReqMsg = req.ReqMessage groupRequest.ReqMsg = req.ReqMessage
groupRequest.GroupID = req.GroupID groupRequest.GroupID = req.GroupID
groupRequest.JoinSource = req.JoinSource groupRequest.JoinSource = req.JoinSource
@ -777,31 +762,31 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq)
return nil, err return nil, err
} }
if groupInfo.GroupType != constant.SuperGroup { if groupInfo.GroupType != constant.SuperGroup {
_, err = rocksCache.GetGroupMemberInfoFromCache(ctx, req.GroupID, utils.OpUserID(ctx)) _, err = rocksCache.GetGroupMemberInfoFromCache(ctx, req.GroupID, tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
if err := s.DelGroupAndUserCache(ctx, req.GroupID, []string{utils.OpUserID(ctx)}); err != nil { if err := s.DelGroupAndUserCache(ctx, req.GroupID, []string{tracelog.GetOpUserID(ctx)}); err != nil {
return nil, err return nil, err
} }
err = relation.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, utils.OpUserID(ctx)) err = relation.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
} else { } else {
okUserIDList := []string{utils.OpUserID(ctx)} okUserIDList := []string{tracelog.GetOpUserID(ctx)}
if err := db.DB.RemoverUserFromSuperGroup(req.GroupID, okUserIDList); err != nil { if err := db.DB.RemoverUserFromSuperGroup(req.GroupID, okUserIDList); err != nil {
return nil, err return nil, err
} }
} }
if groupInfo.GroupType != constant.SuperGroup { if groupInfo.GroupType != constant.SuperGroup {
_ = rocksCache.DelGroupMemberInfoFromCache(ctx, req.GroupID, utils.OpUserID(ctx)) _ = rocksCache.DelGroupMemberInfoFromCache(ctx, req.GroupID, tracelog.GetOpUserID(ctx))
chat.MemberQuitNotification(req) chat.MemberQuitNotification(req)
} else { } else {
_ = rocksCache.DelJoinedSuperGroupIDListFromCache(ctx, utils.OpUserID(ctx)) _ = rocksCache.DelJoinedSuperGroupIDListFromCache(ctx, tracelog.GetOpUserID(ctx))
_ = rocksCache.DelGroupMemberListHashFromCache(ctx, req.GroupID) _ = rocksCache.DelGroupMemberListHashFromCache(ctx, req.GroupID)
chat.SuperGroupNotification(utils.OperationID(ctx), utils.OpUserID(ctx), utils.OpUserID(ctx)) chat.SuperGroupNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), tracelog.GetOpUserID(ctx))
} }
return resp, nil return resp, nil
} }
@ -867,10 +852,10 @@ 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.Group var groupInfo relation.GroupGorm
utils.CopyStructFields(&groupInfo, req.GroupInfoForSet) utils.CopyStructFields(&groupInfo, req.GroupInfoForSet)
if req.GroupInfoForSet.Notification != "" { if req.GroupInfoForSet.Notification != "" {
groupInfo.NotificationUserID = utils.OpUserID(ctx) groupInfo.NotificationUserID = tracelog.GetOpUserID(ctx)
groupInfo.NotificationUpdateTime = time.Now() groupInfo.NotificationUpdateTime = time.Now()
} }
if err := rocksCache.DelGroupInfoFromCache(ctx, req.GroupInfoForSet.GroupID); err != nil { if err := rocksCache.DelGroupInfoFromCache(ctx, req.GroupInfoForSet.GroupID); err != nil {
@ -881,11 +866,11 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
return nil, err return nil, err
} }
if changedType != 0 { if changedType != 0 {
chat.GroupInfoSetNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupInfoForSet.GroupID, groupName, notification, introduction, faceURL, req.GroupInfoForSet.NeedVerification) chat.GroupInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupInfoForSet.GroupID, groupName, notification, introduction, faceURL, req.GroupInfoForSet.NeedVerification)
} }
if req.GroupInfoForSet.Notification != "" { if req.GroupInfoForSet.Notification != "" {
//get group member user id //get group member user id
getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: utils.OperationID(ctx), GroupID: req.GroupInfoForSet.GroupID} getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: tracelog.GetOperationID(ctx), GroupID: req.GroupInfoForSet.GroupID}
etcdConn, err := getcdv3.GetConn(ctx, config.Config.RpcRegisterName.OpenImCacheName) etcdConn, err := getcdv3.GetConn(ctx, config.Config.RpcRegisterName.OpenImCacheName)
if err != nil { if err != nil {
return nil, err return nil, err
@ -900,13 +885,13 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
} }
var conversationReq pbConversation.ModifyConversationFieldReq var conversationReq pbConversation.ModifyConversationFieldReq
conversation := pbConversation.Conversation{ conversation := pbConversation.Conversation{
OwnerUserID: utils.OpUserID(ctx), OwnerUserID: tracelog.GetOpUserID(ctx),
ConversationID: utils.GetConversationIDBySessionType(req.GroupInfoForSet.GroupID, constant.GroupChatType), ConversationID: utils.GetConversationIDBySessionType(req.GroupInfoForSet.GroupID, constant.GroupChatType),
ConversationType: constant.GroupChatType, ConversationType: constant.GroupChatType,
GroupID: req.GroupInfoForSet.GroupID, GroupID: req.GroupInfoForSet.GroupID,
} }
conversationReq.Conversation = &conversation conversationReq.Conversation = &conversation
conversationReq.OperationID = utils.OperationID(ctx) conversationReq.OperationID = tracelog.GetOperationID(ctx)
conversationReq.FieldType = constant.FieldGroupAtType conversationReq.FieldType = constant.FieldGroupAtType
conversation.GroupAtType = constant.GroupNotification conversation.GroupAtType = constant.GroupNotification
conversationReq.UserIDList = cacheResp.UserIDList conversationReq.UserIDList = cacheResp.UserIDList
@ -1019,7 +1004,7 @@ func (s *groupServer) GetGroupMembersCMS(ctx context.Context, req *pbGroup.GetGr
if err != nil { if err != nil {
return nil, err return nil, err
} }
log.NewInfo(utils.OperationID(ctx), groupMembersCount) log.NewInfo(tracelog.GetOperationID(ctx), groupMembersCount)
resp.MemberNums = int32(groupMembersCount) resp.MemberNums = int32(groupMembersCount)
for _, groupMember := range groupMembers { for _, groupMember := range groupMembers {
member := open_im_sdk.GroupMemberFullInfo{} member := open_im_sdk.GroupMemberFullInfo{}
@ -1064,7 +1049,7 @@ func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbGrou
func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGroupReq) (*pbGroup.DismissGroupResp, error) { func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGroupReq) (*pbGroup.DismissGroupResp, error) {
resp := &pbGroup.DismissGroupResp{} resp := &pbGroup.DismissGroupResp{}
if !token_verify.IsManagerUserID(utils.OpUserID(ctx)) && !relation.IsGroupOwnerAdmin(req.GroupID, utils.OpUserID(ctx)) { if !token_verify.IsManagerUserID(tracelog.GetOpUserID(ctx)) && !relation.IsGroupOwnerAdmin(req.GroupID, tracelog.GetOpUserID(ctx)) {
return nil, utils.Wrap(constant.ErrIdentity, "") return nil, utils.Wrap(constant.ErrIdentity, "")
} }
@ -1092,7 +1077,7 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou
var reqPb pbUser.SetConversationReq var reqPb pbUser.SetConversationReq
var c pbConversation.Conversation var c pbConversation.Conversation
for _, v := range memberList { for _, v := range memberList {
reqPb.OperationID = utils.OperationID(ctx) reqPb.OperationID = tracelog.GetOperationID(ctx)
c.OwnerUserID = v.UserID c.OwnerUserID = v.UserID
c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType) c.ConversationID = utils.GetConversationIDBySessionType(req.GroupID, constant.GroupChatType)
c.ConversationType = constant.GroupChatType c.ConversationType = constant.GroupChatType
@ -1121,7 +1106,7 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou
func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) { func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) {
resp := &pbGroup.MuteGroupMemberResp{} resp := &pbGroup.MuteGroupMemberResp{}
opFlag, err := s.getGroupUserLevel(req.GroupID, utils.OpUserID(ctx)) opFlag, err := s.getGroupUserLevel(req.GroupID, tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -1149,14 +1134,14 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou
if err != nil { if err != nil {
return nil, err return nil, err
} }
chat.GroupMemberMutedNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID, req.UserID, req.MutedSeconds) chat.GroupMemberMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID, req.MutedSeconds)
return resp, nil return resp, nil
} }
func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) { func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) {
resp := &pbGroup.CancelMuteGroupMemberResp{} resp := &pbGroup.CancelMuteGroupMemberResp{}
opFlag, err := s.getGroupUserLevel(req.GroupID, utils.OpUserID(ctx)) opFlag, err := s.getGroupUserLevel(req.GroupID, tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -1184,14 +1169,14 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca
if err != nil { if err != nil {
return nil, err return nil, err
} }
chat.GroupMemberCancelMutedNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID, req.UserID) chat.GroupMemberCancelMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID)
return resp, nil return resp, nil
} }
func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) (*pbGroup.MuteGroupResp, error) { func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) (*pbGroup.MuteGroupResp, error) {
resp := &pbGroup.MuteGroupResp{} resp := &pbGroup.MuteGroupResp{}
opFlag, err := s.getGroupUserLevel(req.GroupID, utils.OpUserID(ctx)) opFlag, err := s.getGroupUserLevel(req.GroupID, tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -1224,14 +1209,14 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq)
return nil, err return nil, err
} }
chat.GroupMutedNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID) chat.GroupMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID)
return resp, nil return resp, nil
} }
func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMuteGroupReq) (*pbGroup.CancelMuteGroupResp, error) { func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMuteGroupReq) (*pbGroup.CancelMuteGroupResp, error) {
resp := &pbGroup.CancelMuteGroupResp{} resp := &pbGroup.CancelMuteGroupResp{}
opFlag, err := s.getGroupUserLevel(req.GroupID, utils.OpUserID(ctx)) opFlag, err := s.getGroupUserLevel(req.GroupID, tracelog.GetOpUserID(ctx))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -1251,7 +1236,7 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu
// errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error() // errMsg := req.OperationID + " mutedInfo.RoleLevel == constant.GroupAdmin " + req.GroupID + req.OpUserID + err.Error()
// return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil // return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: errMsg}}, nil
//} //}
log.Debug(utils.OperationID(ctx), "UpdateGroupInfoDefaultZero ", req.GroupID, map[string]interface{}{"status": constant.GroupOk}) log.Debug(tracelog.GetOperationID(ctx), "UpdateGroupInfoDefaultZero ", req.GroupID, map[string]interface{}{"status": constant.GroupOk})
if err := rocksCache.DelGroupInfoFromCache(ctx, req.GroupID); err != nil { if err := rocksCache.DelGroupInfoFromCache(ctx, req.GroupID); err != nil {
return nil, err return nil, err
} }
@ -1259,13 +1244,13 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu
if err != nil { if err != nil {
return nil, err return nil, err
} }
chat.GroupCancelMutedNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID) chat.GroupCancelMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID)
return resp, nil return resp, nil
} }
func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.SetGroupMemberNicknameReq) (*pbGroup.SetGroupMemberNicknameResp, error) { func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.SetGroupMemberNicknameReq) (*pbGroup.SetGroupMemberNicknameResp, error) {
resp := &pbGroup.SetGroupMemberNicknameResp{} resp := &pbGroup.SetGroupMemberNicknameResp{}
if utils.OpUserID(ctx) != req.UserID && !token_verify.IsManagerUserID(utils.OpUserID(ctx)) { if tracelog.GetOpUserID(ctx) != req.UserID && !token_verify.IsManagerUserID(tracelog.GetOpUserID(ctx)) {
return nil, utils.Wrap(constant.ErrIdentity, "") return nil, utils.Wrap(constant.ErrIdentity, "")
} }
cbReq := &pbGroup.SetGroupMemberInfoReq{ cbReq := &pbGroup.SetGroupMemberInfoReq{
@ -1297,7 +1282,7 @@ func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.S
if err := relation.UpdateGroupMemberInfo(groupMemberInfo); err != nil { if err := relation.UpdateGroupMemberInfo(groupMemberInfo); err != nil {
return nil, err return nil, err
} }
chat.GroupMemberInfoSetNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID, req.UserID) chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID)
return resp, nil return resp, nil
} }
@ -1336,13 +1321,13 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr
switch req.RoleLevel.Value { switch req.RoleLevel.Value {
case constant.GroupOrdinaryUsers: case constant.GroupOrdinaryUsers:
//msg.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification) //msg.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToOrdinaryUserNotification)
chat.GroupMemberInfoSetNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID, req.UserID) chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID)
case constant.GroupAdmin, constant.GroupOwner: case constant.GroupAdmin, constant.GroupOwner:
//msg.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification) //msg.GroupMemberRoleLevelChangeNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, constant.GroupMemberSetToAdminNotification)
chat.GroupMemberInfoSetNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID, req.UserID) chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID)
} }
} else { } else {
chat.GroupMemberInfoSetNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.GroupID, req.UserID) chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID)
} }
return resp, nil return resp, nil
} }

View File

@ -1,14 +1,5 @@
package api_struct package api_struct
//UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"`
// Nickname string `protobuf:"bytes,2,opt,name=Nickname" json:"Nickname,omitempty"`
// FaceUrl string `protobuf:"bytes,3,opt,name=FaceUrl" json:"FaceUrl,omitempty"`
// Gender int32 `protobuf:"varint,4,opt,name=Gender" json:"Gender,omitempty"`
// PhoneNumber string `protobuf:"bytes,5,opt,name=PhoneNumber" json:"PhoneNumber,omitempty"`
// Birth string `protobuf:"bytes,6,opt,name=Birth" json:"Birth,omitempty"`
// Email string `protobuf:"bytes,7,opt,name=Email" json:"Email,omitempty"`
// Ex string `protobuf:"bytes,8,opt,name=Ex" json:"Ex,omitempty"`
type UserRegisterReq struct { type UserRegisterReq struct {
Secret string `json:"secret" binding:"required,max=32"` Secret string `json:"secret" binding:"required,max=32"`
Platform int32 `json:"platform" binding:"required,min=1,max=12"` Platform int32 `json:"platform" binding:"required,min=1,max=12"`

30
pkg/api_struct/public.go Normal file
View File

@ -0,0 +1,30 @@
package api_struct
import (
"net/http"
"github.com/gin-gonic/gin"
)
type ApiUserInfo struct {
UserID string `json:"userID" binding:"required,min=1,max=64" swaggo:"true,用户ID,"`
Nickname string `json:"nickname" binding:"omitempty,min=1,max=64" swaggo:"true,my id,19"`
FaceURL string `json:"faceURL" binding:"omitempty,max=1024"`
Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"`
PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"`
Birth int64 `json:"birth" binding:"omitempty"`
Email string `json:"email" binding:"omitempty,max=64"`
CreateTime int64 `json:"createTime"`
Ex string `json:"ex" binding:"omitempty,max=1024"`
}
type GroupAddMemberInfo struct {
UserID string `json:"userID" binding:"required"`
RoleLevel int32 `json:"roleLevel" binding:"required,oneof= 1 3"`
}
func SetErrCodeMsg(c *gin.Context, status int) *CommResp {
resp := CommResp{ErrCode: int32(status), ErrMsg: http.StatusText(status)}
c.JSON(status, resp)
return &resp
}

View File

@ -1,143 +0,0 @@
package api_struct
import (
"net/http"
"github.com/gin-gonic/gin"
)
type ApiUserInfo struct {
UserID string `json:"userID" binding:"required,min=1,max=64" swaggo:"true,用户ID,"`
Nickname string `json:"nickname" binding:"omitempty,min=1,max=64" swaggo:"true,my id,19"`
FaceURL string `json:"faceURL" binding:"omitempty,max=1024"`
Gender int32 `json:"gender" binding:"omitempty,oneof=0 1 2"`
PhoneNumber string `json:"phoneNumber" binding:"omitempty,max=32"`
Birth uint32 `json:"birth" binding:"omitempty"`
Email string `json:"email" binding:"omitempty,max=64"`
CreateTime int64 `json:"createTime"`
LoginLimit int32 `json:"loginLimit" binding:"omitempty"`
Ex string `json:"ex" binding:"omitempty,max=1024"`
BirthStr string `json:"birthStr" binding:"omitempty"`
}
//type Conversation struct {
// OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"`
// ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"`
// ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"`
// UserID string `gorm:"column:user_id;type:char(64)" json:"userID"`
// GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"`
// RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"`
// UnreadCount int32 `gorm:"column:unread_count" json:"unreadCount"`
// DraftTextTime int64 `gorm:"column:draft_text_time" json:"draftTextTime"`
// IsPinned bool `gorm:"column:is_pinned" json:"isPinned"`
// AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"`
// Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"`
//}
type GroupAddMemberInfo struct {
UserID string `json:"userID" binding:"required"`
RoleLevel int32 `json:"roleLevel" binding:"required,oneof= 1 3"`
}
func SetErrCodeMsg(c *gin.Context, status int) *CommResp {
resp := CommResp{ErrCode: int32(status), ErrMsg: http.StatusText(status)}
c.JSON(status, resp)
return &resp
}
//GroupName string `json:"groupName"`
// Introduction string `json:"introduction"`
// Notification string `json:"notification"`
// FaceUrl string `json:"faceUrl"`
// OperationID string `json:"operationID" binding:"required"`
// GroupType int32 `json:"groupType"`
// Ex string `json:"ex"`
//type GroupInfo struct {
// GroupID string `json:"groupID"`
// GroupName string `json:"groupName"`
// Notification string `json:"notification"`
// Introduction string `json:"introduction"`
// FaceUrl string `json:"faceUrl"`
// OwnerUserID string `json:"ownerUserID"`
// Ex string `json:"ex"`
// GroupType int32 `json:"groupType"`
//}
//type GroupMemberFullInfo struct {
// GroupID string `json:"groupID"`
// UserID string `json:"userID"`
// RoleLevel int32 `json:"roleLevel"`
// JoinTime uint64 `json:"joinTime"`
// Nickname string `json:"nickname"`
// FaceUrl string `json:"faceUrl"`
// FriendRemark string `json:"friendRemark"`
// AppMangerLevel int32 `json:"appMangerLevel"`
// JoinSource int32 `json:"joinSource"`
// OperatorUserID string `json:"operatorUserID"`
// Ex string `json:"ex"`
//}
//
//type PublicUserInfo struct {
// UserID string `json:"userID"`
// Nickname string `json:"nickname"`
// FaceUrl string `json:"faceUrl"`
// Gender int32 `json:"gender"`
//}
//
//type UserInfo struct {
// UserID string `json:"userID"`
// Nickname string `json:"nickname"`
// FaceUrl string `json:"faceUrl"`
// Gender int32 `json:"gender"`
// Mobile string `json:"mobile"`
// Birth string `json:"birth"`
// Email string `json:"email"`
// Ex string `json:"ex"`
//}
//
//type FriendInfo struct {
// OwnerUserID string `json:"ownerUserID"`
// Remark string `json:"remark"`
// CreateTime int64 `json:"createTime"`
// FriendUser UserInfo `json:"friendUser"`
// AddSource int32 `json:"addSource"`
// OperatorUserID string `json:"operatorUserID"`
// Ex string `json:"ex"`
//}
//
//type BlackInfo struct {
// OwnerUserID string `json:"ownerUserID"`
// CreateTime int64 `json:"createTime"`
// BlackUser PublicUserInfo `json:"friendUser"`
// AddSource int32 `json:"addSource"`
// OperatorUserID string `json:"operatorUserID"`
// Ex string `json:"ex"`
//}
//
//type GroupRequest struct {
// UserID string `json:"userID"`
// GroupID string `json:"groupID"`
// HandleResult string `json:"handleResult"`
// ReqMsg string `json:"reqMsg"`
// HandleMsg string `json:"handleMsg"`
// ReqTime int64 `json:"reqTime"`
// HandleUserID string `json:"handleUserID"`
// HandleTime int64 `json:"handleTime"`
// Ex string `json:"ex"`
//}
//
//type FriendRequest struct {
// FromUserID string `json:"fromUserID"`
// ToUserID string `json:"toUserID"`
// HandleResult int32 `json:"handleResult"`
// ReqMessage string `json:"reqMessage"`
// CreateTime int64 `json:"createTime"`
// HandlerUserID string `json:"handlerUserID"`
// HandleMsg string `json:"handleMsg"`
// HandleTime int64 `json:"handleTime"`
// Ex string `json:"ex"`
//}
//
//
//

View File

@ -30,9 +30,9 @@ const (
) )
type GroupCache struct { type GroupCache struct {
group *relation.Group group *relation.GroupGorm
groupMember *relation.GroupMember groupMember *relation.GroupMemberGorm
groupRequest *relation.GroupRequest groupRequest *relation.GroupRequestGorm
mongoDB *unrelation.SuperGroupMgoDB mongoDB *unrelation.SuperGroupMgoDB
expireTime time.Duration expireTime time.Duration
redisClient *RedisClient redisClient *RedisClient
@ -43,7 +43,7 @@ type GroupCache struct {
cacheGroupMemberUserIDs map[string]*localcache.GroupMemberIDsHash cacheGroupMemberUserIDs map[string]*localcache.GroupMemberIDsHash
} }
func NewGroupCache(rdb redis.UniversalClient, groupDB *relation.Group, groupMemberDB *relation.GroupMember, groupRequestDB *relation.GroupRequest, mongoClient *unrelation.SuperGroupMgoDB, opts rockscache.Options) *GroupCache { func NewGroupCache(rdb redis.UniversalClient, groupDB *relation.GroupGorm, groupMemberDB *relation.GroupMemberGorm, groupRequestDB *relation.GroupRequestGorm, mongoClient *unrelation.SuperGroupMgoDB, opts rockscache.Options) *GroupCache {
return &GroupCache{rcClient: rockscache.NewClient(rdb, opts), expireTime: groupExpireTime, return &GroupCache{rcClient: rockscache.NewClient(rdb, opts), expireTime: groupExpireTime,
group: groupDB, groupMember: groupMemberDB, groupRequest: groupRequestDB, redisClient: NewRedisClient(rdb), group: groupDB, groupMember: groupMemberDB, groupRequest: groupRequestDB, redisClient: NewRedisClient(rdb),
mongoDB: mongoClient, cacheGroupMemberUserIDs: make(map[string]*localcache.GroupMemberIDsHash, 0), mongoDB: mongoClient, cacheGroupMemberUserIDs: make(map[string]*localcache.GroupMemberIDsHash, 0),
@ -82,7 +82,7 @@ func (g *GroupCache) getGroupMemberNumKey(groupID string) string {
return groupMemberNumKey + groupID return groupMemberNumKey + groupID
} }
/// groupInfo // / groupInfo
func (g *GroupCache) GetGroupsInfo(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) { func (g *GroupCache) GetGroupsInfo(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) {
for _, groupID := range groupIDs { for _, groupID := range groupIDs {
group, err := g.GetGroupInfo(ctx, groupID) group, err := g.GetGroupInfo(ctx, groupID)
@ -94,7 +94,7 @@ func (g *GroupCache) GetGroupsInfo(ctx context.Context, groupIDs []string) (grou
return groups, nil return groups, nil
} }
func (g *GroupCache) GetGroupInfo(ctx context.Context, groupID string) (group *relation.Group, err error) { func (g *GroupCache) GetGroupInfo(ctx context.Context, groupID string) (group *relation.GroupGorm, err error) {
getGroup := func() (string, error) { getGroup := func() (string, error) {
groupInfo, err := g.group.Take(ctx, groupID) groupInfo, err := g.group.Take(ctx, groupID)
if err != nil { if err != nil {
@ -106,7 +106,7 @@ func (g *GroupCache) GetGroupInfo(ctx context.Context, groupID string) (group *r
} }
return string(bytes), nil return string(bytes), nil
} }
group = &relation.Group{} group = &relation.GroupGorm{}
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group)
}() }()

View File

@ -2,17 +2,12 @@ package cache
import ( import (
"Open_IM/pkg/common/constant" "Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db/mongo"
"Open_IM/pkg/common/db/mysql"
"Open_IM/pkg/common/db/relation" "Open_IM/pkg/common/db/relation"
"Open_IM/pkg/common/log" "Open_IM/pkg/common/log"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"encoding/json" "encoding/json"
"github.com/dtm-labs/rockscache"
"github.com/go-redis/redis/v8"
"gorm.io/gorm"
"math/big" "math/big"
"sort" "sort"
"strconv" "strconv"
@ -358,7 +353,7 @@ func DelAllGroupMembersInfoFromCache(ctx context.Context, groupID string) (err e
return db.DB.Rc.TagAsDeleted(groupAllMemberInfoCache + groupID) return db.DB.Rc.TagAsDeleted(groupAllMemberInfoCache + groupID)
} }
//func GetGroupInfoFromCache(ctx context.Context, groupID string) (groupInfo *mysql.Group, err error) { //func GetGroupInfoFromCache(ctx context.Context, groupID string) (groupInfo *mysql.GroupGorm, err error) {
// getGroupInfo := func() (string, error) { // getGroupInfo := func() (string, error) {
// groupInfo, err := mysql.GetGroupInfoByGroupID(groupID) // groupInfo, err := mysql.GetGroupInfoByGroupID(groupID)
// if err != nil { // if err != nil {
@ -370,7 +365,7 @@ func DelAllGroupMembersInfoFromCache(ctx context.Context, groupID string) (err e
// } // }
// return string(bytes), nil // return string(bytes), nil
// } // }
// groupInfo = &mysql.Group{} // groupInfo = &mysql.GroupGorm{}
// defer func() { // defer func() {
// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "groupInfo", groupInfo) // tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "groupInfo", groupInfo)
// }() // }()

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"Open_IM/pkg/common/db/relation" "Open_IM/pkg/common/db/relation"
"Open_IM/pkg/common/db/table"
"context" "context"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -12,25 +13,25 @@ type FriendInterface interface {
// AddFriendRequest 增加或者更新好友申请 // AddFriendRequest 增加或者更新好友申请
AddFriendRequest(ctx context.Context, fromUserID, toUserID string, reqMsg string, ex string) (err error) AddFriendRequest(ctx context.Context, fromUserID, toUserID string, reqMsg string, ex string) (err error)
// BecomeFriend 先判断是否在好友表,如果在则不插入 // BecomeFriend 先判断是否在好友表,如果在则不插入
BecomeFriend(ctx context.Context, friends []*relation.Friend) (err error) BecomeFriend(ctx context.Context, friends []*table.FriendModel) (err error)
// RefuseFriendRequest 拒绝好友申请 // RefuseFriendRequest 拒绝好友申请
RefuseFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) RefuseFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error)
// AgreeFriendRequest 同意好友申请 // AgreeFriendRequest 同意好友申请
AgreeFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) AgreeFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error)
// Delete 删除好友 // Delete 删除好友
Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error) Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error)
// UpdateRemark 更新好友备注 // UpdateRemark 更新好友备注
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
// FindOwnerFriends 获取ownerUserID的好友列表 // FindOwnerFriends 获取ownerUserID的好友列表
FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error)
// FindInWhoseFriends friendUserID在哪些人的好友列表中 // FindInWhoseFriends friendUserID在哪些人的好友列表中
FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error)
// FindFriendRequestFromMe 获取我发出去的好友申请 // FindFriendRequestFromMe 获取我发出去的好友申请
FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error)
// FindFriendRequestToMe 获取我收到的的好友申请 // FindFriendRequestToMe 获取我收到的的好友申请
FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error)
// FindFriends 获取某人指定好友的信息 // FindFriends 获取某人指定好友的信息
FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.Friend, err error) FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*table.FriendModel, err error)
} }
type FriendController struct { type FriendController struct {
@ -50,15 +51,15 @@ func (f *FriendController) AddFriendRequest(ctx context.Context, fromUserID, toU
} }
// BecomeFriend 先判断是否在好友表,如果在则不插入 // BecomeFriend 先判断是否在好友表,如果在则不插入
func (f *FriendController) BecomeFriend(ctx context.Context, friends []*relation.Friend) (err error) { func (f *FriendController) BecomeFriend(ctx context.Context, friends []*table.FriendModel) (err error) {
} }
// RefuseFriendRequest 拒绝好友申请 // RefuseFriendRequest 拒绝好友申请
func (f *FriendController) RefuseFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) { func (f *FriendController) RefuseFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error) {
} }
// AgreeFriendRequest 同意好友申请 // AgreeFriendRequest 同意好友申请
func (f *FriendController) AgreeFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) { func (f *FriendController) AgreeFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error) {
} }
// Delete 删除好友 // Delete 删除好友
@ -70,23 +71,23 @@ func (f *FriendController) UpdateRemark(ctx context.Context, ownerUserID, friend
} }
// FindOwnerFriends 获取ownerUserID的好友列表 // FindOwnerFriends 获取ownerUserID的好友列表
func (f *FriendController) FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) { func (f *FriendController) FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error) {
} }
// FindInWhoseFriends friendUserID在哪些人的好友列表中 // FindInWhoseFriends friendUserID在哪些人的好友列表中
func (f *FriendController) FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) { func (f *FriendController) FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error) {
} }
// FindFriendRequestFromMe 获取我发出去的好友申请 // FindFriendRequestFromMe 获取我发出去的好友申请
func (f *FriendController) FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) { func (f *FriendController) FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error) {
} }
// FindFriendRequestToMe 获取我收到的的好友申请 // FindFriendRequestToMe 获取我收到的的好友申请
func (f *FriendController) FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) { func (f *FriendController) FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error) {
} }
// FindFriends 获取某人指定好友的信息 // FindFriends 获取某人指定好友的信息
func (f *FriendController) FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.Friend, err error) { func (f *FriendController) FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*table.FriendModel, err error) {
} }
type FriendDatabaseInterface interface { type FriendDatabaseInterface interface {
@ -95,37 +96,34 @@ type FriendDatabaseInterface interface {
// AddFriendRequest 增加或者更新好友申请 // AddFriendRequest 增加或者更新好友申请
AddFriendRequest(ctx context.Context, fromUserID, toUserID string, reqMsg string, ex string) (err error) AddFriendRequest(ctx context.Context, fromUserID, toUserID string, reqMsg string, ex string) (err error)
// BecomeFriend 先判断是否在好友表,如果在则不插入 // BecomeFriend 先判断是否在好友表,如果在则不插入
BecomeFriend(ctx context.Context, friends []*relation.Friend) (err error) BecomeFriend(ctx context.Context, friends []*table.FriendModel) (err error)
// RefuseFriendRequest 拒绝好友申请 // RefuseFriendRequest 拒绝好友申请
RefuseFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) RefuseFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error)
// AgreeFriendRequest 同意好友申请 // AgreeFriendRequest 同意好友申请
AgreeFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) AgreeFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error)
// Delete 删除好友 // Delete 删除好友
Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error) Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error)
// UpdateRemark 更新好友备注 // UpdateRemark 更新好友备注
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
// FindOwnerFriends 获取ownerUserID的好友列表 // FindOwnerFriends 获取ownerUserID的好友列表
FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error)
// FindInWhoseFriends friendUserID在哪些人的好友列表中 // FindInWhoseFriends friendUserID在哪些人的好友列表中
FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error)
// FindFriendRequestFromMe 获取我发出去的好友申请 // FindFriendRequestFromMe 获取我发出去的好友申请
FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error)
// FindFriendRequestToMe 获取我收到的的好友申请 // FindFriendRequestToMe 获取我收到的的好友申请
FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error)
// FindFriends 获取某人指定好友的信息 // FindFriends 获取某人指定好友的信息
FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.Friend, err error) FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*table.FriendModel, err error)
} }
type FriendDatabase struct { type FriendDatabase struct {
sqlDB *relation.Friend friend *relation.FriendGorm
friendRequest *relation.FriendRequestGorm
} }
func NewFriendDatabase(db *gorm.DB) *FriendDatabase { func NewFriendDatabase(db *gorm.DB) *FriendDatabase {
sqlDB := relation.NewFriendDB(db) return &FriendDatabase{friend: relation.NewFriendGorm(db), friendRequest: relation.NewFriendRequestGorm(db)}
database := &FriendDatabase{
sqlDB: sqlDB,
}
return database
} }
// CheckIn 检查user2是否在user1的好友列表中(inUser1Friends==true) 检查user1是否在user2的好友列表中(inUser2Friends==true) // CheckIn 检查user2是否在user1的好友列表中(inUser1Friends==true) 检查user1是否在user2的好友列表中(inUser2Friends==true)
@ -137,15 +135,15 @@ func (f *FriendDatabase) AddFriendRequest(ctx context.Context, fromUserID, toUse
} }
// BecomeFriend 先判断是否在好友表,如果在则不插入 // BecomeFriend 先判断是否在好友表,如果在则不插入
func (f *FriendDatabase) BecomeFriend(ctx context.Context, friends []*relation.Friend) (err error) { func (f *FriendDatabase) BecomeFriend(ctx context.Context, friends []*table.FriendModel) (err error) {
} }
// RefuseFriendRequest 拒绝好友申请 // RefuseFriendRequest 拒绝好友申请
func (f *FriendDatabase) RefuseFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) { func (f *FriendDatabase) RefuseFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error) {
} }
// AgreeFriendRequest 同意好友申请 // AgreeFriendRequest 同意好友申请
func (f *FriendDatabase) AgreeFriendRequest(ctx context.Context, friendRequest *relation.FriendRequest) (err error) { func (f *FriendDatabase) AgreeFriendRequest(ctx context.Context, friendRequest *table.FriendRequestModel) (err error) {
} }
// Delete 删除好友 // Delete 删除好友
@ -157,21 +155,21 @@ func (f *FriendDatabase) UpdateRemark(ctx context.Context, ownerUserID, friendUs
} }
// FindOwnerFriends 获取ownerUserID的好友列表 // FindOwnerFriends 获取ownerUserID的好友列表
func (f *FriendDatabase) FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) { func (f *FriendDatabase) FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error) {
} }
// FindInWhoseFriends friendUserID在哪些人的好友列表中 // FindInWhoseFriends friendUserID在哪些人的好友列表中
func (f *FriendDatabase) FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*relation.Friend, err error) { func (f *FriendDatabase) FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*table.FriendModel, err error) {
} }
// FindFriendRequestFromMe 获取我发出去的好友申请 // FindFriendRequestFromMe 获取我发出去的好友申请
func (f *FriendDatabase) FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) { func (f *FriendDatabase) FindFriendRequestFromMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error) {
} }
// FindFriendRequestToMe 获取我收到的的好友申请 // FindFriendRequestToMe 获取我收到的的好友申请
func (f *FriendDatabase) FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*relation.FriendRequest, err error) { func (f *FriendDatabase) FindFriendRequestToMe(ctx context.Context, userID string, pageNumber, showNumber int32) (friends []*table.FriendRequestModel, err error) {
} }
// FindFriends 获取某人指定好友的信息 // FindFriends 获取某人指定好友的信息
func (f *FriendDatabase) FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.Friend, err error) { func (f *FriendDatabase) FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*table.FriendModel, err error) {
} }

View File

@ -3,6 +3,7 @@ package controller
import ( import (
"Open_IM/pkg/common/db/cache" "Open_IM/pkg/common/db/cache"
"Open_IM/pkg/common/db/relation" "Open_IM/pkg/common/db/relation"
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/db/unrelation" "Open_IM/pkg/common/db/unrelation"
"context" "context"
"github.com/dtm-labs/rockscache" "github.com/dtm-labs/rockscache"
@ -13,23 +14,27 @@ import (
) )
type GroupInterface interface { type GroupInterface interface {
FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*table.GroupModel, err error)
CreateGroup(ctx context.Context, groups []*relation.Group, groupMember []*relation.GroupMember) error CreateGroup(ctx context.Context, groups []*table.GroupModel, groupMember []*table.GroupModel) error
DeleteGroupByIDs(ctx context.Context, groupIDs []string) error DeleteGroupByIDs(ctx context.Context, groupIDs []string) error
TakeGroupByID(ctx context.Context, groupID string) (group *relation.Group, err error) TakeGroupByID(ctx context.Context, groupID string) (group *table.GroupModel, err error)
GetJoinedGroupList(ctx context.Context, userID string) ([]*relation.Group, error) TakeGroupMemberByID(ctx context.Context, groupID string, userID string) (groupMember *table.GroupModel, err error)
GetGroupMemberList(ctx context.Context, groupID string) ([]*relation.GroupMember, error) GetJoinedGroupList(ctx context.Context, userID string) ([]*table.GroupModel, error)
GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*relation.GroupMember, error) GetGroupMemberList(ctx context.Context, groupID string) ([]*table.GroupModel, error)
GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*relation.GroupMember, error) // relation.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30) GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*table.GroupModel, 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)
FindGroupMembersByID(ctx context.Context, groupID string, userIDs []string) (groups []*table.GroupModel, err 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)
CreateGroupMember(ctx context.Context, groupMember []*relation.GroupMember) error CreateGroupMember(ctx context.Context, groupMember []*table.GroupModel) error
CreateGroupRequest(ctx context.Context, requests []*table.GroupRequestModel) error
CreateGroupRequest(ctx context.Context, requests []*relation.GroupRequest) error
//mongo //mongo
CreateSuperGroup(ctx context.Context, groupID string, initMemberIDList []string) error CreateSuperGroup(ctx context.Context, groupID string, initMemberIDList []string) error
DelSuperGroupMember(ctx context.Context, groupID string, userIDs []string) error
AddUserToSuperGroup(ctx context.Context, groupID string, userIDs []string) error AddUserToSuperGroup(ctx context.Context, groupID string, userIDs []string) error
GetSuperGroupByID(ctx context.Context, groupID string) (superGroup *unrelation.SuperGroup, err error) GetSuperGroupByID(ctx context.Context, groupID string) (superGroup *unrelation.SuperGroup, err error)
} }
@ -40,22 +45,67 @@ type GroupController struct {
database GroupDataBaseInterface database GroupDataBaseInterface
} }
func (g *GroupController) GetJoinedGroupList(ctx context.Context, userID string) ([]*relation.Group, error) { func (g *GroupController) TakeGroupMemberByID(ctx context.Context, groupID string, userID string) (groupMember *table.GroupModel, err error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (g *GroupController) GetGroupMemberList(ctx context.Context, groupID string) ([]*relation.GroupMember, error) { func (g *GroupController) FindGroupMembersByID(ctx context.Context, groupID string, userIDs []string) (groups []*table.GroupModel, err error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (g *GroupController) GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*relation.GroupMember, error) { func (g *GroupController) DelGroupMember(ctx context.Context, groupID string, userIDs []string) error {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (g *GroupController) GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*relation.GroupMember, error) { func (g *GroupController) GetGroupRecvApplicationList(ctx context.Context, userID string) ([]*table.GroupRequestModel, error) {
/*
var groupRequestList []db.GroupRequest
memberList, err := GetGroupMemberListByUserID(userID)
if err != nil {
return nil, err
}
for _, v := range memberList {
if v.RoleLevel > constant.GroupOrdinaryUsers {
list, err := GetGroupRequestByGroupID(v.GroupID)
if err != nil {
// fmt.Println("111 GetGroupRequestByGroupID failed ", err.Error())
continue
}
// fmt.Println("222 GetGroupRequestByGroupID ok ", list)
groupRequestList = append(groupRequestList, list...)
// fmt.Println("333 GetGroupRequestByGroupID ok ", groupRequestList)
}
}
return groupRequestList, nil
*/
//TODO implement me
panic("implement me")
}
func (g *GroupController) DelSuperGroupMember(ctx context.Context, groupID string, userIDs []string) error {
//TODO implement me
panic("implement me")
}
func (g *GroupController) GetJoinedGroupList(ctx context.Context, userID string) ([]*table.GroupModel, error) {
//TODO implement me
panic("implement me")
}
func (g *GroupController) GetGroupMemberList(ctx context.Context, groupID string) ([]*table.GroupModel, error) {
//TODO implement me
panic("implement me")
}
func (g *GroupController) GetGroupMemberListByUserID(ctx context.Context, groupID string, userIDs []string) ([]*table.GroupModel, error) {
//TODO implement me
panic("implement me")
}
func (g *GroupController) GetGroupMemberFilterList(ctx context.Context, groupID string, filter int32, begin int32, maxNumber int32) ([]*table.GroupModel, error) {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
@ -70,12 +120,12 @@ func (g *GroupController) GetGroupOwnerUserID(ctx context.Context, groupIDs []st
panic("implement me") panic("implement me")
} }
func (g *GroupController) CreateGroupMember(ctx context.Context, groupMember []*relation.GroupMember) error { func (g *GroupController) CreateGroupMember(ctx context.Context, groupMember []*table.GroupModel) error {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
func (g *GroupController) CreateGroupRequest(ctx context.Context, requests []*relation.GroupRequest) error { func (g *GroupController) CreateGroupRequest(ctx context.Context, requests []*table.GroupRequestModel) error {
//TODO implement me //TODO implement me
panic("implement me") panic("implement me")
} }
@ -90,11 +140,11 @@ func NewGroupController(db *gorm.DB, rdb redis.UniversalClient, mgoClient *mongo
return groupController return groupController
} }
func (g *GroupController) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) { func (g *GroupController) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*table.GroupModel, err error) {
return g.database.FindGroupsByID(ctx, groupIDs) return g.database.FindGroupsByID(ctx, groupIDs)
} }
func (g *GroupController) CreateGroup(ctx context.Context, groups []*relation.Group, groupMember []*relation.GroupMember) error { func (g *GroupController) CreateGroup(ctx context.Context, groups []*table.GroupModel, groupMember []*table.GroupModel) error {
return g.database.CreateGroup(ctx, groups, groupMember) return g.database.CreateGroup(ctx, groups, groupMember)
} }
@ -102,7 +152,7 @@ func (g *GroupController) DeleteGroupByIDs(ctx context.Context, groupIDs []strin
return g.database.DeleteGroupByIDs(ctx, groupIDs) return g.database.DeleteGroupByIDs(ctx, groupIDs)
} }
func (g *GroupController) TakeGroupByID(ctx context.Context, groupID string) (group *relation.Group, err error) { func (g *GroupController) TakeGroupByID(ctx context.Context, groupID string) (group *table.GroupModel, err error) {
return g.database.TakeGroupByID(ctx, groupID) return g.database.TakeGroupByID(ctx, groupID)
} }
@ -115,18 +165,18 @@ func (g *GroupController) CreateSuperGroup(ctx context.Context, groupID string,
} }
type GroupDataBaseInterface interface { type GroupDataBaseInterface interface {
FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*table.GroupModel, err error)
CreateGroup(ctx context.Context, groups []*relation.Group, groupMember []*relation.GroupMember) error CreateGroup(ctx context.Context, groups []*table.GroupModel, groupMember []*table.GroupModel) error
DeleteGroupByIDs(ctx context.Context, groupIDs []string) error DeleteGroupByIDs(ctx context.Context, groupIDs []string) error
TakeGroupByID(ctx context.Context, groupID string) (group *relation.Group, err error) TakeGroupByID(ctx context.Context, groupID string) (group *table.GroupModel, err error)
GetSuperGroupByID(ctx context.Context, groupID string) (superGroup *unrelation.SuperGroup, err error) GetSuperGroupByID(ctx context.Context, groupID string) (superGroup *unrelation.SuperGroup, err error)
CreateSuperGroup(ctx context.Context, groupID string, initMemberIDList []string) error CreateSuperGroup(ctx context.Context, groupID string, initMemberIDList []string) error
} }
type GroupDataBase struct { type GroupDataBase struct {
groupDB *relation.Group groupDB *relation.GroupGorm
groupMemberDB *relation.GroupMember groupMemberDB *relation.GroupMemberGorm
groupRequestDB *relation.GroupRequest groupRequestDB *relation.GroupRequestGorm
db *gorm.DB db *gorm.DB
cache *cache.GroupCache cache *cache.GroupCache
@ -155,11 +205,11 @@ func newGroupDatabase(db *gorm.DB, rdb redis.UniversalClient, mgoClient *mongo.C
return database return database
} }
func (g *GroupDataBase) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) { func (g *GroupDataBase) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*table.GroupModel, err error) {
return g.cache.GetGroupsInfo(ctx, groupIDs) return g.cache.GetGroupsInfo(ctx, groupIDs)
} }
func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relation.Group, groupMembers []*relation.GroupMember) error { func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*table.GroupModel, groupMembers []*table.GroupMemberModel) error {
return g.db.Transaction(func(tx *gorm.DB) error { return g.db.Transaction(func(tx *gorm.DB) error {
if len(groups) > 0 { if len(groups) > 0 {
if err := g.groupDB.Create(ctx, groups, tx); err != nil { if err := g.groupDB.Create(ctx, groups, tx); err != nil {
@ -187,11 +237,11 @@ func (g *GroupDataBase) DeleteGroupByIDs(ctx context.Context, groupIDs []string)
}) })
} }
func (g *GroupDataBase) TakeGroupByID(ctx context.Context, groupID string) (group *relation.Group, err error) { func (g *GroupDataBase) TakeGroupByID(ctx context.Context, groupID string) (group *table.GroupModel, err error) {
return g.cache.GetGroupInfo(ctx, groupID) return g.cache.GetGroupInfo(ctx, groupID)
} }
func (g *GroupDataBase) Update(ctx context.Context, groups []*relation.Group) error { func (g *GroupDataBase) Update(ctx context.Context, groups []*table.GroupModel) error {
return g.db.Transaction(func(tx *gorm.DB) error { return g.db.Transaction(func(tx *gorm.DB) error {
if err := g.groupDB.Update(ctx, groups, tx); err != nil { if err := g.groupDB.Update(ctx, groups, tx); err != nil {
return err return err
@ -207,7 +257,7 @@ func (g *GroupDataBase) Update(ctx context.Context, groups []*relation.Group) er
}) })
} }
func (g *GroupDataBase) GetJoinedGroupList(ctx context.Context, userID string) ([]*relation.Group, error) { func (g *GroupDataBase) GetJoinedGroupList(ctx context.Context, userID string) ([]*table.GroupModel, error) {
return nil, nil return nil, nil
} }

View File

@ -1,105 +1,94 @@
package relation package relation
import ( import (
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"gorm.io/gorm" "gorm.io/gorm"
"time"
) )
type Friend struct { type FriendDB interface {
OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"` Create(ctx context.Context, friends []*table.FriendModel) (err error)
FriendUserID string `gorm:"column:friend_user_id;primary_key;size:64"` Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error)
Remark string `gorm:"column:remark;size:255"` UpdateByMap(ctx context.Context, ownerUserID string, args map[string]interface{}) (err error)
CreateTime time.Time `gorm:"column:create_time"` Update(ctx context.Context, friends []*table.FriendModel) (err error)
AddSource int32 `gorm:"column:add_source"` UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
OperatorUserID string `gorm:"column:operator_user_id;size:64"` FindOwnerUserID(ctx context.Context, ownerUserID string) (friends []*table.FriendModel, err error)
Ex string `gorm:"column:ex;size:1024"` }
DB *gorm.DB `gorm:"-"`
type FriendGorm struct {
DB *gorm.DB `gorm:"-"`
}
func NewFriendGorm(DB *gorm.DB) *FriendGorm {
return &FriendGorm{DB: DB}
} }
type FriendUser struct { type FriendUser struct {
Friend FriendGorm
Nickname string `gorm:"column:name;size:255"` Nickname string `gorm:"column:name;size:255"`
} }
func NewFriendDB(db *gorm.DB) *Friend { func (f *FriendGorm) Create(ctx context.Context, friends []*table.FriendModel) (err error) {
var friend Friend
friend.DB = db.Model(friend)
return &friend
}
func (f *Friend) Create(ctx context.Context, friends []*Friend) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends)
}() }()
return utils.Wrap(f.DB.Create(&friends).Error, "") return utils.Wrap(f.DB.Model(&table.FriendModel{}).Create(&friends).Error, "")
} }
func (f *Friend) Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error) { func (f *FriendGorm) Delete(ctx context.Context, ownerUserID string, friendUserIDs string) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendUserIDs", friendUserIDs) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendUserIDs", friendUserIDs)
}() }()
err = utils.Wrap(f.DB.Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserIDs).Delete(&Friend{}).Error, "") err = utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserIDs).Delete(&table.FriendModel{}).Error, "")
return err return err
} }
func (f *Friend) UpdateByMap(ctx context.Context, ownerUserID string, args map[string]interface{}) (err error) { func (f *FriendGorm) UpdateByMap(ctx context.Context, ownerUserID string, args map[string]interface{}) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "args", args) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "args", args)
}() }()
return utils.Wrap(f.DB.Where("owner_user_id = ?", ownerUserID).Updates(args).Error, "") return utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("owner_user_id = ?", ownerUserID).Updates(args).Error, "")
} }
func (f *Friend) Update(ctx context.Context, friends []*Friend) (err error) { func (f *FriendGorm) Update(ctx context.Context, friends []*table.FriendModel) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends)
}() }()
return utils.Wrap(f.DB.Updates(&friends).Error, "") return utils.Wrap(f.DB.Model(&table.FriendModel{}).Updates(&friends).Error, "")
} }
func (f *Friend) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) { func (f *FriendGorm) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendUserID", friendUserID, "remark", remark) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendUserID", friendUserID, "remark", remark)
}() }()
return utils.Wrap(f.DB.Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserID).Update("remark", remark).Error, "") return utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserID).Update("remark", remark).Error, "")
} }
func (f *Friend) FindOwnerUserID(ctx context.Context, ownerUserID string) (friends []*Friend, err error) { func (f *FriendGorm) FindOwnerUserID(ctx context.Context, ownerUserID string) (friends []*table.FriendModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friends", friends)
}() }()
return friends, utils.Wrap(f.DB.Where("owner_user_id = ?", ownerUserID).Find(&friends).Error, "") return friends, utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("owner_user_id = ?", ownerUserID).Find(&friends).Error, "")
} }
func (f *Friend) FindFriendUserID(ctx context.Context, friendUserID string) (friends []*Friend, err error) { func (f *FriendGorm) FindFriendUserID(ctx context.Context, friendUserID string) (friends []*table.FriendModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friendUserID", friendUserID, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friendUserID", friendUserID, "friends", friends)
}() }()
return friends, utils.Wrap(f.DB.Where("friend_user_id = ?", friendUserID).Find(&friends).Error, "") return friends, utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("friend_user_id = ?", friendUserID).Find(&friends).Error, "")
} }
func (f *Friend) GetFriendIDs(ctx context.Context, ownerUserID string) (friendIDList []string, err error) { func (f *FriendGorm) Take(ctx context.Context, ownerUserID, friendUserID string) (friend *table.FriendModel, err error) {
defer func() { friend = &table.FriendModel{}
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendIDList", friendIDList)
}()
err = f.DB.Where("owner_user_id=?", ownerUserID).Pluck("friend_user_id", &friendIDList).Error
if err != nil {
return nil, err
}
return friendIDList, nil
}
func (f *Friend) Take(ctx context.Context, ownerUserID, friendUserID string) (friend *Friend, err error) {
friend = &Friend{}
defer tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendUserID", friendUserID, "friend", friend) defer tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friendUserID", friendUserID, "friend", friend)
return friend, utils.Wrap(f.DB.Where("owner_user_id = ? and friend_user_id", ownerUserID, friendUserID).Take(friend).Error, "") return friend, utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("owner_user_id = ? and friend_user_id", ownerUserID, friendUserID).Take(friend).Error, "")
} }
func (f *Friend) FindUserState(ctx context.Context, userID1, userID2 string) (friends []*Friend, err error) { func (f *FriendGorm) FindUserState(ctx context.Context, userID1, userID2 string) (friends []*table.FriendModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "userID1", userID1, "userID2", userID2) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "userID1", userID1, "userID2", userID2)
}() }()
return friends, utils.Wrap(f.DB.Where("(owner_user_id = ? and friend_user_id = ?) or (owner_user_id = ? and friend_user_id = ?)", userID1, userID2, userID2, userID1).Find(&friends).Error, "") return friends, utils.Wrap(f.DB.Model(&table.FriendModel{}).Where("(owner_user_id = ? and friend_user_id = ?) or (owner_user_id = ? and friend_user_id = ?)", userID1, userID2, userID2, userID1).Find(&friends).Error, "")
} }

View File

@ -1,156 +1,76 @@
package relation package relation
import ( import (
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"gorm.io/gorm" "gorm.io/gorm"
"time"
) )
//var FriendRequestDB *gorm.DB //var FriendRequestDB *gorm.DB
type FriendRequest struct { func NewFriendRequestGorm(db *gorm.DB) *FriendRequestGorm {
FromUserID string `gorm:"column:from_user_id;primary_key;size:64"` var fr FriendRequestGorm
ToUserID string `gorm:"column:to_user_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:255"`
CreateTime time.Time `gorm:"column:create_time"`
HandlerUserID string `gorm:"column:handler_user_id;size:64"`
HandleMsg string `gorm:"column:handle_msg;size:255"`
HandleTime time.Time `gorm:"column:handle_time"`
Ex string `gorm:"column:ex;size:1024"`
DB *gorm.DB `gorm:"-"`
}
func NewFriendRequest(db *gorm.DB) *FriendRequest {
var fr FriendRequest
fr.DB = db fr.DB = db
return &fr return &fr
} }
func (f *FriendRequest) Create(ctx context.Context, friends []*FriendRequest) (err error) { type FriendRequestGorm struct {
DB *gorm.DB `gorm:"-"`
}
func (f *FriendRequestGorm) Create(ctx context.Context, friends []*table.FriendRequestModel) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends)
}() }()
return utils.Wrap(f.DB.Create(&friends).Error, "") return utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Create(&friends).Error, "")
} }
func (f *FriendRequest) Delete(ctx context.Context, fromUserID, toUserID string) (err error) { func (f *FriendRequestGorm) Delete(ctx context.Context, fromUserID, toUserID string) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "fromUserID", fromUserID, "toUserID", toUserID) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "fromUserID", fromUserID, "toUserID", toUserID)
}() }()
return utils.Wrap(f.DB.Where("from_user_id = ? and to_user_id = ?", fromUserID, toUserID).Delete(&FriendRequest{}).Error, "") return utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Where("from_user_id = ? and to_user_id = ?", fromUserID, toUserID).Delete(&table.FriendRequestModel{}).Error, "")
} }
func (f *FriendRequest) UpdateByMap(ctx context.Context, ownerUserID string, args map[string]interface{}) (err error) { func (f *FriendRequestGorm) UpdateByMap(ctx context.Context, ownerUserID string, args map[string]interface{}) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "args", args) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "args", args)
}() }()
return utils.Wrap(f.DB.Where("owner_user_id = ?", ownerUserID).Updates(args).Error, "") return utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Where("owner_user_id = ?", ownerUserID).Updates(args).Error, "")
} }
func (f *FriendRequest) Update(ctx context.Context, friends []*FriendRequest) (err error) { func (f *FriendRequestGorm) Update(ctx context.Context, friends []*table.FriendRequestModel) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "friends", friends)
}() }()
return utils.Wrap(f.DB.Updates(&friends).Error, "") return utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Updates(&friends).Error, "")
} }
func (f *FriendRequest) Find(ctx context.Context, ownerUserID string) (friends []*FriendRequest, err error) { func (f *FriendRequestGorm) Find(ctx context.Context, ownerUserID string) (friends []*table.FriendRequestModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "ownerUserID", ownerUserID, "friends", friends)
}() }()
return friends, utils.Wrap(f.DB.Where("owner_user_id = ?", ownerUserID).Find(&friends).Error, "") return friends, utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Where("owner_user_id = ?", ownerUserID).Find(&friends).Error, "")
} }
func (f *FriendRequest) Take(ctx context.Context, fromUserID, toUserID string) (friend *FriendRequest, err error) { func (f *FriendRequestGorm) Take(ctx context.Context, fromUserID, toUserID string) (friend *table.FriendRequestModel, err error) {
friend = &FriendRequest{} friend = &table.FriendRequestModel{}
defer tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "fromUserID", fromUserID, "toUserID", toUserID, "friend", friend) defer tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "fromUserID", fromUserID, "toUserID", toUserID, "friend", friend)
return friend, utils.Wrap(f.DB.Where("from_user_id = ? and to_user_id", fromUserID, toUserID).Take(friend).Error, "") return friend, utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Where("from_user_id = ? and to_user_id", fromUserID, toUserID).Take(friend).Error, "")
} }
func (f *FriendRequest) FindToUserID(ctx context.Context, toUserID string) (friends []*FriendRequest, err error) { func (f *FriendRequestGorm) FindToUserID(ctx context.Context, toUserID string) (friends []*table.FriendRequestModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "toUserID", toUserID, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "toUserID", toUserID, "friends", friends)
}() }()
return friends, utils.Wrap(f.DB.Where("to_user_id = ?", toUserID).Find(&friends).Error, "") return friends, utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Where("to_user_id = ?", toUserID).Find(&friends).Error, "")
} }
func (f *FriendRequest) FindFromUserID(ctx context.Context, fromUserID string) (friends []*FriendRequest, err error) { func (f *FriendRequestGorm) FindFromUserID(ctx context.Context, fromUserID string) (friends []*table.FriendRequestModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "fromUserID", fromUserID, "friends", friends) tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "fromUserID", fromUserID, "friends", friends)
}() }()
return friends, utils.Wrap(f.DB.Where("from_user_id = ?", fromUserID).Find(&friends).Error, "") return friends, utils.Wrap(f.DB.Model(&table.FriendRequestModel{}).Where("from_user_id = ?", fromUserID).Find(&friends).Error, "")
}
// who apply to add me
func GetReceivedFriendsApplicationListByUserID(ToUserID string) ([]FriendRequest, error) {
var usersInfo []FriendRequest
err := FriendRequestDB.Table("friend_requests").Where("to_user_id=?", ToUserID).Find(&usersInfo).Error
if err != nil {
return nil, err
}
return usersInfo, nil
}
// I apply to add somebody
func GetSendFriendApplicationListByUserID(FromUserID string) ([]FriendRequest, error) {
var usersInfo []FriendRequest
err := FriendRequestDB.Table("friend_requests").Where("from_user_id=?", FromUserID).Find(&usersInfo).Error
if err != nil {
return nil, err
}
return usersInfo, nil
}
// FromUserId apply to add ToUserID
func GetFriendApplicationByBothUserID(FromUserID, ToUserID string) (*FriendRequest, error) {
var friendRequest FriendRequest
err := FriendRequestDB.Table("friend_requests").Where("from_user_id=? and to_user_id=?", FromUserID, ToUserID).Take(&friendRequest).Error
if err != nil {
return nil, err
}
return &friendRequest, nil
}
func UpdateFriendApplication(friendRequest *FriendRequest) error {
friendRequest.CreateTime = time.Now()
return FriendRequestDB.Table("friend_requests").Where("from_user_id=? and to_user_id=?",
friendRequest.FromUserID, friendRequest.ToUserID).Updates(&friendRequest).Error
}
func InsertFriendApplication(friendRequest *FriendRequest, args map[string]interface{}) error {
if err := FriendRequestDB.Table("friend_requests").Create(friendRequest).Error; err == nil {
return nil
}
//t := dbConn.Debug().Table("friend_requests").Where("from_user_id = ? and to_user_id = ?", friendRequest.FromUserID, friendRequest.ToUserID).Select("*").Updates(*friendRequest)
//if t.RowsAffected == 0 {
// return utils.Wrap(errors.New("RowsAffected == 0"), "no update")
//}
//return utils.Wrap(t.Error, "")
friendRequest.CreateTime = time.Now()
args["create_time"] = friendRequest.CreateTime
u := FriendRequestDB.Model(friendRequest).Updates(args)
//u := dbConn.Table("friend_requests").Where("from_user_id=? and to_user_id=?",
// friendRequest.FromUserID, friendRequest.ToUserID).Update(&friendRequest)
//u := dbConn.Table("friend_requests").Where("from_user_id=? and to_user_id=?",
// friendRequest.FromUserID, friendRequest.ToUserID).Update(&friendRequest)
if u.RowsAffected != 0 {
return nil
}
if friendRequest.CreateTime.Unix() < 0 {
friendRequest.CreateTime = time.Now()
}
if friendRequest.HandleTime.Unix() < 0 {
friendRequest.HandleTime = utils.UnixSecondToTime(0)
}
err := FriendRequestDB.Table("friend_requests").Create(friendRequest).Error
if err != nil {
return err
}
return nil
} }

View File

@ -2,62 +2,48 @@ package relation
import ( import (
"Open_IM/pkg/common/constant" "Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"fmt"
"gorm.io/gorm" "gorm.io/gorm"
"time"
) )
var GroupMemberDB *gorm.DB type GroupMemberGorm struct {
DB *gorm.DB
type GroupMember struct {
GroupID string `gorm:"column:group_id;primary_key;size:64"`
UserID string `gorm:"column:user_id;primary_key;size:64"`
Nickname string `gorm:"column:nickname;size:255"`
FaceURL string `gorm:"column:user_group_face_url;size:255"`
RoleLevel int32 `gorm:"column:role_level"`
JoinTime time.Time `gorm:"column:join_time"`
JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
MuteEndTime time.Time `gorm:"column:mute_end_time"`
Ex string `gorm:"column:ex;size:1024"`
DB *gorm.DB `gorm:"-" json:"-"`
} }
func NewGroupMemberDB(db *gorm.DB) *GroupMember { func NewGroupMemberDB(db *gorm.DB) *GroupMemberGorm {
return &GroupMember{DB: db} return &GroupMemberGorm{DB: db}
} }
func (g *GroupMember) Create(ctx context.Context, groupMemberList []*GroupMember, tx ...*gorm.DB) (err error) { func (g *GroupMemberGorm) Create(ctx context.Context, groupMemberList []*table.GroupMemberModel, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMemberList", groupMemberList) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMemberList", groupMemberList)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Create(&groupMemberList).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Create(&groupMemberList).Error, "")
} }
func (g *GroupMember) Delete(ctx context.Context, groupMembers []*GroupMember, tx ...*gorm.DB) (err error) { func (g *GroupMemberGorm) Delete(ctx context.Context, groupMembers []*table.GroupMemberModel, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Delete(groupMembers).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Delete(groupMembers).Error, "")
} }
func (g *GroupMember) UpdateByMap(ctx context.Context, groupID string, userID string, args map[string]interface{}, tx ...*gorm.DB) (err error) { func (g *GroupMemberGorm) UpdateByMap(ctx context.Context, groupID string, userID string, args map[string]interface{}, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "args", args) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "args", args)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Model(&GroupMember{}).Where("group_id = ? and user_id = ?", groupID, userID).Updates(args).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Model(&table.GroupMemberModel{}).Where("group_id = ? and user_id = ?", groupID, userID).Updates(args).Error, "")
} }
func (g *GroupMember) Update(ctx context.Context, groupMembers []*GroupMember, tx ...*gorm.DB) (err error) { func (g *GroupMemberGorm) Update(ctx context.Context, groupMembers []*table.GroupMemberModel, tx ...*gorm.DB) (err error) {
defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers) }() defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers) }()
return utils.Wrap(getDBConn(g.DB, tx).Updates(&groupMembers).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Updates(&groupMembers).Error, "")
} }
func (g *GroupMember) Find(ctx context.Context, groupMembers []*GroupMember, tx ...*gorm.DB) (groupList []*GroupMember, err error) { func (g *GroupMemberGorm) Find(ctx context.Context, groupMembers []*table.GroupMemberModel, tx ...*gorm.DB) (groupList []*table.GroupMemberModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers, "groupList", groupList) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers, "groupList", groupList)
}() }()
@ -68,230 +54,230 @@ func (g *GroupMember) Find(ctx context.Context, groupMembers []*GroupMember, tx
return groupList, utils.Wrap(getDBConn(g.DB, tx).Where("(group_id, user_id) in ?", where).Find(&groupList).Error, "") return groupList, utils.Wrap(getDBConn(g.DB, tx).Where("(group_id, user_id) in ?", where).Find(&groupList).Error, "")
} }
func (g *GroupMember) Take(ctx context.Context, groupID string, userID string, tx ...*gorm.DB) (groupMember *GroupMember, err error) { func (g *GroupMemberGorm) Take(ctx context.Context, groupID string, userID string, tx ...*gorm.DB) (groupMember *table.GroupMemberModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "groupMember", *groupMember) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "groupMember", *groupMember)
}() }()
groupMember = &GroupMember{} groupMember = &table.GroupMemberModel{}
return groupMember, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and user_id = ?", groupID, userID).Take(groupMember).Error, "") return groupMember, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and user_id = ?", groupID, userID).Take(groupMember).Error, "")
} }
func (g *GroupMember) TakeOwnerInfo(ctx context.Context, groupID string, tx ...*gorm.DB) (groupMember *GroupMember, err error) { func (g *GroupMemberGorm) TakeOwnerInfo(ctx context.Context, groupID string, tx ...*gorm.DB) (groupMember *table.GroupMemberModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "groupMember", *groupMember) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "groupMember", *groupMember)
}() }()
groupMember = &GroupMember{} groupMember = &table.GroupMemberModel{}
return groupMember, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and role_level = ?", groupID, constant.GroupOwner).Take(groupMember).Error, "") return groupMember, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and role_level = ?", groupID, constant.GroupOwner).Take(groupMember).Error, "")
} }
func InsertIntoGroupMember(toInsertInfo GroupMember) error { //func InsertIntoGroupMember(toInsertInfo GroupMemberModel) error {
toInsertInfo.JoinTime = time.Now() // toInsertInfo.JoinTime = time.Now()
if toInsertInfo.RoleLevel == 0 { // if toInsertInfo.RoleLevel == 0 {
toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers // toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers
} // }
toInsertInfo.MuteEndTime = time.Unix(int64(time.Now().Second()), 0) // toInsertInfo.MuteEndTime = time.Unix(int64(time.Now().Second()), 0)
err := GroupMemberDB.Table("group_members").Create(toInsertInfo).Error // err := GroupMemberDB.Table("group_members").Create(toInsertInfo).Error
if err != nil { // if err != nil {
return err // return err
} // }
return nil // return nil
} //}
//
func BatchInsertIntoGroupMember(toInsertInfoList []*GroupMember) error { //func BatchInsertIntoGroupMember(toInsertInfoList []*GroupMemberModel) error {
for _, toInsertInfo := range toInsertInfoList { // for _, toInsertInfo := range toInsertInfoList {
toInsertInfo.JoinTime = time.Now() // toInsertInfo.JoinTime = time.Now()
if toInsertInfo.RoleLevel == 0 { // if toInsertInfo.RoleLevel == 0 {
toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers // toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers
} // }
toInsertInfo.MuteEndTime = time.Unix(int64(time.Now().Second()), 0) // toInsertInfo.MuteEndTime = time.Unix(int64(time.Now().Second()), 0)
} // }
return GroupMemberDB.Create(toInsertInfoList).Error // return GroupMemberDB.Create(toInsertInfoList).Error
//
} //}
//
func GetGroupMemberListByUserID(userID string) ([]GroupMember, error) { //func GetGroupMemberListByUserID(userID string) ([]GroupMemberModel, error) {
var groupMemberList []GroupMember // var groupMemberList []GroupMemberModel
err := GroupMemberDB.Table("group_members").Where("user_id=?", userID).Find(&groupMemberList).Error // err := GroupMemberDB.Table("group_members").Where("user_id=?", userID).Find(&groupMemberList).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return groupMemberList, nil // return groupMemberList, nil
} //}
//
func GetGroupMemberListByGroupID(groupID string) ([]GroupMember, error) { //func GetGroupMemberListByGroupID(groupID string) ([]GroupMemberModel, error) {
var groupMemberList []GroupMember // var groupMemberList []GroupMemberModel
err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Find(&groupMemberList).Error // err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Find(&groupMemberList).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return groupMemberList, nil // return groupMemberList, nil
} //}
//
func GetGroupMemberIDListByGroupID(groupID string) ([]string, error) { //func GetGroupMemberIDListByGroupID(groupID string) ([]string, error) {
var groupMemberIDList []string // var groupMemberIDList []string
err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Pluck("user_id", &groupMemberIDList).Error // err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Pluck("user_id", &groupMemberIDList).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return groupMemberIDList, nil // return groupMemberIDList, nil
} //}
//
func GetGroupMemberListByGroupIDAndRoleLevel(groupID string, roleLevel int32) ([]GroupMember, error) { //func GetGroupMemberListByGroupIDAndRoleLevel(groupID string, roleLevel int32) ([]GroupMemberModel, error) {
var groupMemberList []GroupMember // var groupMemberList []GroupMemberModel
err := GroupMemberDB.Table("group_members").Where("group_id=? and role_level=?", groupID, roleLevel).Find(&groupMemberList).Error // err := GroupMemberDB.Table("group_members").Where("group_id=? and role_level=?", groupID, roleLevel).Find(&groupMemberList).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return groupMemberList, nil // return groupMemberList, nil
} //}
//
func GetGroupMemberInfoByGroupIDAndUserID(groupID, userID string) (*GroupMember, error) { //func GetGroupMemberInfoByGroupIDAndUserID(groupID, userID string) (*GroupMemberModel, error) {
var groupMember GroupMember // var groupMember GroupMemberModel
err := GroupMemberDB.Table("group_members").Where("group_id=? and user_id=? ", groupID, userID).Limit(1).Take(&groupMember).Error // err := GroupMemberDB.Table("group_members").Where("group_id=? and user_id=? ", groupID, userID).Limit(1).Take(&groupMember).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return &groupMember, nil // return &groupMember, nil
} //}
//
func DeleteGroupMemberByGroupIDAndUserID(groupID, userID string) error { //func DeleteGroupMemberByGroupIDAndUserID(groupID, userID string) error {
return GroupMemberDB.Table("group_members").Where("group_id=? and user_id=? ", groupID, userID).Delete(GroupMember{}).Error // return GroupMemberDB.Table("group_members").Where("group_id=? and user_id=? ", groupID, userID).Delete(GroupMemberModel{}).Error
} //}
//
func DeleteGroupMemberByGroupID(groupID string) error { //func DeleteGroupMemberByGroupID(groupID string) error {
return GroupMemberDB.Table("group_members").Where("group_id=? ", groupID).Delete(GroupMember{}).Error // return GroupMemberDB.Table("group_members").Where("group_id=? ", groupID).Delete(GroupMemberModel{}).Error
} //}
//
func UpdateGroupMemberInfo(groupMemberInfo GroupMember) error { //func UpdateGroupMemberInfo(groupMemberInfo GroupMemberModel) error {
return GroupMemberDB.Table("group_members").Where("group_id=? and user_id=?", groupMemberInfo.GroupID, groupMemberInfo.UserID).Updates(&groupMemberInfo).Error // return GroupMemberDB.Table("group_members").Where("group_id=? and user_id=?", groupMemberInfo.GroupID, groupMemberInfo.UserID).Updates(&groupMemberInfo).Error
} //}
//
func UpdateGroupMemberInfoByMap(groupMemberInfo GroupMember, m map[string]interface{}) error { //func UpdateGroupMemberInfoByMap(groupMemberInfo GroupMemberModel, m map[string]interface{}) error {
return GroupMemberDB.Table("group_members").Where("group_id=? and user_id=?", groupMemberInfo.GroupID, groupMemberInfo.UserID).Updates(m).Error // return GroupMemberDB.Table("group_members").Where("group_id=? and user_id=?", groupMemberInfo.GroupID, groupMemberInfo.UserID).Updates(m).Error
} //}
//
func GetOwnerManagerByGroupID(groupID string) ([]GroupMember, error) { //func GetOwnerManagerByGroupID(groupID string) ([]GroupMemberModel, error) {
var groupMemberList []GroupMember // var groupMemberList []GroupMemberModel
err := GroupMemberDB.Table("group_members").Where("group_id=? and role_level>?", groupID, constant.GroupOrdinaryUsers).Find(&groupMemberList).Error // err := GroupMemberDB.Table("group_members").Where("group_id=? and role_level>?", groupID, constant.GroupOrdinaryUsers).Find(&groupMemberList).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return groupMemberList, nil // return groupMemberList, nil
} //}
//
func GetGroupMemberNumByGroupID(groupID string) (int64, error) { //func GetGroupMemberNumByGroupID(groupID string) (int64, error) {
var number int64 // var number int64
err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Count(&number).Error // err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Count(&number).Error
if err != nil { // if err != nil {
return 0, utils.Wrap(err, "") // return 0, utils.Wrap(err, "")
} // }
return number, nil // return number, nil
} //}
//
func GetGroupOwnerInfoByGroupID(groupID string) (*GroupMember, error) { //func GetGroupOwnerInfoByGroupID(groupID string) (*GroupMemberModel, error) {
omList, err := GetOwnerManagerByGroupID(groupID) // omList, err := GetOwnerManagerByGroupID(groupID)
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
for _, v := range omList { // for _, v := range omList {
if v.RoleLevel == constant.GroupOwner { // if v.RoleLevel == constant.GroupOwner {
return &v, nil // return &v, nil
} // }
} // }
return nil, utils.Wrap(constant.ErrGroupNoOwner, "") // return nil, utils.Wrap(constant.ErrGroupNoOwner, "")
} //}
//
func IsExistGroupMember(groupID, userID string) bool { //func IsExistGroupMember(groupID, userID string) bool {
var number int64 // var number int64
err := GroupMemberDB.Table("group_members").Where("group_id = ? and user_id = ?", groupID, userID).Count(&number).Error // err := GroupMemberDB.Table("group_members").Where("group_id = ? and user_id = ?", groupID, userID).Count(&number).Error
if err != nil { // if err != nil {
return false // return false
} // }
if number != 1 { // if number != 1 {
return false // return false
} // }
return true // return true
} //}
//
func CheckIsExistGroupMember(ctx context.Context, groupID, userID string) error { //func CheckIsExistGroupMember(ctx context.Context, groupID, userID string) error {
var number int64 // var number int64
err := GroupMemberDB.Table("group_members").Where("group_id = ? and user_id = ?", groupID, userID).Count(&number).Error // err := GroupMemberDB.Table("group_members").Where("group_id = ? and user_id = ?", groupID, userID).Count(&number).Error
if err != nil { // if err != nil {
return constant.ErrDB.Wrap() // return constant.ErrDB.Wrap()
} // }
if number != 1 { // if number != 1 {
return constant.ErrData.Wrap() // return constant.ErrData.Wrap()
} // }
return nil // return nil
} //}
//
func GetGroupMemberByGroupID(groupID string, filter int32, begin int32, maxNumber int32) ([]GroupMember, error) { //func GetGroupMemberByGroupID(groupID string, filter int32, begin int32, maxNumber int32) ([]GroupMember, error) {
var memberList []GroupMember // var memberList []GroupMember
var err error // var err error
if filter >= 0 { // if filter >= 0 {
memberList, err = GetGroupMemberListByGroupIDAndRoleLevel(groupID, filter) //sorted by join time // memberList, err = GetGroupMemberListByGroupIDAndRoleLevel(groupID, filter) //sorted by join time
} else { // } else {
memberList, err = GetGroupMemberListByGroupID(groupID) // memberList, err = GetGroupMemberListByGroupID(groupID)
} // }
//
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
if begin >= int32(len(memberList)) { // if begin >= int32(len(memberList)) {
return nil, nil // return nil, nil
} // }
//
var end int32 // var end int32
if begin+int32(maxNumber) < int32(len(memberList)) { // if begin+int32(maxNumber) < int32(len(memberList)) {
end = begin + maxNumber // end = begin + maxNumber
} else { // } else {
end = int32(len(memberList)) // end = int32(len(memberList))
} // }
return memberList[begin:end], nil // return memberList[begin:end], nil
} //}
//
func GetJoinedGroupIDListByUserID(userID string) ([]string, error) { //func GetJoinedGroupIDListByUserID(userID string) ([]string, error) {
memberList, err := GetGroupMemberListByUserID(userID) // memberList, err := GetGroupMemberListByUserID(userID)
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
var groupIDList []string // var groupIDList []string
for _, v := range memberList { // for _, v := range memberList {
groupIDList = append(groupIDList, v.GroupID) // groupIDList = append(groupIDList, v.GroupID)
} // }
return groupIDList, nil // return groupIDList, nil
} //}
//
func IsGroupOwnerAdmin(groupID, UserID string) bool { //func IsGroupOwnerAdmin(groupID, UserID string) bool {
groupMemberList, err := GetOwnerManagerByGroupID(groupID) // groupMemberList, err := GetOwnerManagerByGroupID(groupID)
if err != nil { // if err != nil {
return false // return false
} // }
for _, v := range groupMemberList { // for _, v := range groupMemberList {
if v.UserID == UserID && v.RoleLevel > constant.GroupOrdinaryUsers { // if v.UserID == UserID && v.RoleLevel > constant.GroupOrdinaryUsers {
return true // return true
} // }
} // }
return false // return false
} //}
//
func GetGroupMembersByGroupIdCMS(groupId string, userName string, showNumber, pageNumber int32) ([]GroupMember, error) { //func GetGroupMembersByGroupIdCMS(groupId string, userName string, showNumber, pageNumber int32) ([]GroupMember, error) {
var groupMembers []GroupMember // var groupMembers []GroupMember
err := GroupMemberDB.Table("group_members").Where("group_id=?", groupId).Where(fmt.Sprintf(" nickname like '%%%s%%' ", userName)).Limit(int(showNumber)).Offset(int(showNumber * (pageNumber - 1))).Find(&groupMembers).Error // err := GroupMemberDB.Table("group_members").Where("group_id=?", groupId).Where(fmt.Sprintf(" nickname like '%%%s%%' ", userName)).Limit(int(showNumber)).Offset(int(showNumber * (pageNumber - 1))).Find(&groupMembers).Error
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
return groupMembers, nil // return groupMembers, nil
} //}
//
func GetGroupMembersCount(groupID, userName string) (int64, error) { //func GetGroupMembersCount(groupID, userName string) (int64, error) {
var count int64 // var count int64
if err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Where(fmt.Sprintf(" nickname like '%%%s%%' ", userName)).Count(&count).Error; err != nil { // if err := GroupMemberDB.Table("group_members").Where("group_id=?", groupID).Where(fmt.Sprintf(" nickname like '%%%s%%' ", userName)).Count(&count).Error; err != nil {
return count, err // return count, err
} // }
return count, nil // return count, nil
} //}
//
func UpdateGroupMemberInfoDefaultZero(groupMemberInfo GroupMember, args map[string]interface{}) error { //func UpdateGroupMemberInfoDefaultZero(groupMemberInfo GroupMember, args map[string]interface{}) error {
return GroupMemberDB.Model(groupMemberInfo).Updates(args).Error // return GroupMemberDB.Model(groupMemberInfo).Updates(args).Error
} //}

View File

@ -1,75 +1,58 @@
package relation package relation
import ( import (
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"gorm.io/gorm" "gorm.io/gorm"
"time"
) )
type Group struct { type GroupGorm struct {
GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"` DB *gorm.DB
GroupName string `gorm:"column:name;size:255" json:"groupName"`
Notification string `gorm:"column:notification;size:255" json:"notification"`
Introduction string `gorm:"column:introduction;size:255" json:"introduction"`
FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"`
CreateTime time.Time `gorm:"column:create_time;index:create_time"`
Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"`
Status int32 `gorm:"column:status"`
CreatorUserID string `gorm:"column:creator_user_id;size:64"`
GroupType int32 `gorm:"column:group_type"`
NeedVerification int32 `gorm:"column:need_verification"`
LookMemberInfo int32 `gorm:"column:look_member_info" json:"lookMemberInfo"`
ApplyMemberFriend int32 `gorm:"column:apply_member_friend" json:"applyMemberFriend"`
NotificationUpdateTime time.Time `gorm:"column:notification_update_time"`
NotificationUserID string `gorm:"column:notification_user_id;size:64"`
DB *gorm.DB
} }
func NewGroupDB(db *gorm.DB) *Group { func NewGroupDB(db *gorm.DB) *GroupGorm {
var group Group return &GroupGorm{DB: db}
group.DB = db
return &group
} }
func (g *Group) Create(ctx context.Context, groups []*Group, tx ...*gorm.DB) (err error) { func (g *GroupGorm) Create(ctx context.Context, groups []*table.GroupModel, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groups", groups) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groups", groups)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Create(&groups).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Create(&groups).Error, "")
} }
func (g *Group) Delete(ctx context.Context, groupIDs []string, tx ...*gorm.DB) (err error) { func (g *GroupGorm) Delete(ctx context.Context, groupIDs []string, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Delete(&Group{}).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Delete(&table.GroupModel{}).Error, "")
} }
func (g *Group) UpdateByMap(ctx context.Context, groupID string, args map[string]interface{}, tx ...*gorm.DB) (err error) { func (g *GroupGorm) UpdateByMap(ctx context.Context, groupID string, args map[string]interface{}, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "args", args) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "args", args)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ?", groupID).Model(g).Updates(args).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ?", groupID).Model(g).Updates(args).Error, "")
} }
func (g *Group) Update(ctx context.Context, groups []*Group, tx ...*gorm.DB) (err error) { func (g *GroupGorm) Update(ctx context.Context, groups []*table.GroupModel, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groups", groups) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groups", groups)
}() }()
return utils.Wrap(getDBConn(g.DB, tx).Updates(&groups).Error, "") return utils.Wrap(getDBConn(g.DB, tx).Updates(&groups).Error, "")
} }
func (g *Group) Find(ctx context.Context, groupIDs []string, tx ...*gorm.DB) (groups []*Group, err error) { func (g *GroupGorm) Find(ctx context.Context, groupIDs []string, tx ...*gorm.DB) (groups []*table.GroupModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "groups", groups) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "groups", groups)
}() }()
return groups, utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Find(&groups).Error, "") return groups, utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Find(&groups).Error, "")
} }
func (g *Group) Take(ctx context.Context, groupID string, tx ...*gorm.DB) (group *Group, err error) { func (g *GroupGorm) Take(ctx context.Context, groupID string, tx ...*gorm.DB) (group *table.GroupModel, err error) {
group = &Group{} group = &table.GroupModel{}
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group)
}() }()

View File

@ -1,69 +1,52 @@
package relation package relation
import ( import (
"Open_IM/pkg/common/db/table"
"Open_IM/pkg/common/tracelog" "Open_IM/pkg/common/tracelog"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"gorm.io/gorm" "gorm.io/gorm"
"time"
) )
var GroupRequestDB *gorm.DB type GroupRequestGorm struct {
DB *gorm.DB
type GroupRequest struct {
UserID string `gorm:"column:user_id;primary_key;size:64"`
GroupID string `gorm:"column:group_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:1024"`
HandledMsg string `gorm:"column:handle_msg;size:1024"`
ReqTime time.Time `gorm:"column:req_time"`
HandleUserID string `gorm:"column:handle_user_id;size:64"`
HandledTime time.Time `gorm:"column:handle_time"`
JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
Ex string `gorm:"column:ex;size:1024"`
DB *gorm.DB
} }
func NewGroupRequest(db *gorm.DB) *GroupRequest { func NewGroupRequest(db *gorm.DB) *GroupRequestGorm {
return &GroupRequest{ return &GroupRequestGorm{
DB: db, DB: db,
} }
} }
func (GroupRequest) TableName() string { func (g *GroupRequestGorm) Create(ctx context.Context, groupRequests []*table.GroupRequestModel, tx ...*gorm.DB) (err error) {
return "friend_requests"
}
func (*GroupRequest) Create(ctx context.Context, groupRequests []*GroupRequest) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests)
}() }()
return utils.Wrap(GroupRequestDB.Create(&groupRequests).Error, utils.GetSelfFuncName()) return utils.Wrap(getDBConn(g.DB, tx).Create(&groupRequests).Error, utils.GetSelfFuncName())
} }
func (*GroupRequest) Delete(ctx context.Context, groupRequests []*GroupRequest) (err error) { func (g *GroupRequestGorm) Delete(ctx context.Context, groupRequests []*table.GroupRequestModel, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests)
}() }()
return utils.Wrap(GroupRequestDB.Delete(&groupRequests).Error, utils.GetSelfFuncName()) return utils.Wrap(getDBConn(g.DB, tx).Delete(&groupRequests).Error, utils.GetSelfFuncName())
} }
func (*GroupRequest) UpdateByMap(ctx context.Context, groupID string, userID string, args map[string]interface{}) (err error) { func (g *GroupRequestGorm) UpdateByMap(ctx context.Context, groupID string, userID string, args map[string]interface{}, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "args", args) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "args", args)
}() }()
return utils.Wrap(GroupRequestDB.Where("group_id = ? and user_id = ? ", groupID, userID).Updates(args).Error, utils.GetSelfFuncName()) return utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and user_id = ? ", groupID, userID).Updates(args).Error, utils.GetSelfFuncName())
} }
func (*GroupRequest) Update(ctx context.Context, groupRequests []*GroupRequest) (err error) { func (g *GroupRequestGorm) Update(ctx context.Context, groupRequests []*table.GroupRequestModel, tx ...*gorm.DB) (err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests)
}() }()
return utils.Wrap(GroupRequestDB.Updates(&groupRequests).Error, utils.GetSelfFuncName()) return utils.Wrap(getDBConn(g.DB, tx).Updates(&groupRequests).Error, utils.GetSelfFuncName())
} }
func (*GroupRequest) Find(ctx context.Context, groupRequests []*GroupRequest) (resultGroupRequests []*GroupRequest, err error) { func (g *GroupRequestGorm) Find(ctx context.Context, groupRequests []*table.GroupRequestModel, tx ...*gorm.DB) (resultGroupRequests []*table.GroupRequestModel, err error) {
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests, "resultGroupRequests", resultGroupRequests) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupRequests", groupRequests, "resultGroupRequests", resultGroupRequests)
}() }()
@ -71,13 +54,13 @@ func (*GroupRequest) Find(ctx context.Context, groupRequests []*GroupRequest) (r
for _, groupMember := range groupRequests { for _, groupMember := range groupRequests {
where = append(where, []interface{}{groupMember.GroupID, groupMember.UserID}) where = append(where, []interface{}{groupMember.GroupID, groupMember.UserID})
} }
return resultGroupRequests, utils.Wrap(GroupRequestDB.Where("(group_id, user_id) in ?", where).Find(&resultGroupRequests).Error, utils.GetSelfFuncName()) return resultGroupRequests, utils.Wrap(getDBConn(g.DB, tx).Where("(group_id, user_id) in ?", where).Find(&resultGroupRequests).Error, utils.GetSelfFuncName())
} }
func (*GroupRequest) Take(ctx context.Context, groupID string, userID string) (groupRequest *GroupRequest, err error) { func (g *GroupRequestGorm) Take(ctx context.Context, groupID string, userID string, tx ...*gorm.DB) (groupRequest *table.GroupRequestModel, err error) {
groupRequest = &GroupRequest{} groupRequest = &table.GroupRequestModel{}
defer func() { defer func() {
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "groupRequest", *groupRequest) tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "groupRequest", *groupRequest)
}() }()
return groupRequest, utils.Wrap(GroupRequestDB.Where("group_id = ? and user_id = ? ", groupID, userID).Take(groupRequest).Error, utils.GetSelfFuncName()) return groupRequest, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and user_id = ? ", groupID, userID).Take(groupRequest).Error, utils.GetSelfFuncName())
} }

View File

@ -0,0 +1,91 @@
package table
import (
"time"
)
type FriendModel struct {
OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"`
FriendUserID string `gorm:"column:friend_user_id;primary_key;size:64"`
Remark string `gorm:"column:remark;size:255"`
CreateTime time.Time `gorm:"column:create_time"`
AddSource int32 `gorm:"column:add_source"`
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
Ex string `gorm:"column:ex;size:1024"`
}
type ConversationModel struct {
OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"`
ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"`
ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"`
UserID string `gorm:"column:user_id;type:char(64)" json:"userID"`
GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"`
RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"`
UnreadCount int32 `gorm:"column:unread_count" json:"unreadCount"`
DraftTextTime int64 `gorm:"column:draft_text_time" json:"draftTextTime"`
IsPinned bool `gorm:"column:is_pinned" json:"isPinned"`
IsPrivateChat bool `gorm:"column:is_private_chat" json:"isPrivateChat"`
BurnDuration int32 `gorm:"column:burn_duration;default:30" json:"burnDuration"`
GroupAtType int32 `gorm:"column:group_at_type" json:"groupAtType"`
IsNotInGroup bool `gorm:"column:is_not_in_group" json:"isNotInGroup"`
UpdateUnreadCountTime int64 `gorm:"column:update_unread_count_time" json:"updateUnreadCountTime"`
AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"`
Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"`
}
type GroupModel struct {
GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"`
GroupName string `gorm:"column:name;size:255" json:"groupName"`
Notification string `gorm:"column:notification;size:255" json:"notification"`
Introduction string `gorm:"column:introduction;size:255" json:"introduction"`
FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"`
CreateTime time.Time `gorm:"column:create_time;index:create_time"`
Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"`
Status int32 `gorm:"column:status"`
CreatorUserID string `gorm:"column:creator_user_id;size:64"`
GroupType int32 `gorm:"column:group_type"`
NeedVerification int32 `gorm:"column:need_verification"`
LookMemberInfo int32 `gorm:"column:look_member_info" json:"lookMemberInfo"`
ApplyMemberFriend int32 `gorm:"column:apply_member_friend" json:"applyMemberFriend"`
NotificationUpdateTime time.Time `gorm:"column:notification_update_time"`
NotificationUserID string `gorm:"column:notification_user_id;size:64"`
}
type FriendRequestModel struct {
FromUserID string `gorm:"column:from_user_id;primary_key;size:64"`
ToUserID string `gorm:"column:to_user_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:255"`
CreateTime time.Time `gorm:"column:create_time"`
HandlerUserID string `gorm:"column:handler_user_id;size:64"`
HandleMsg string `gorm:"column:handle_msg;size:255"`
HandleTime time.Time `gorm:"column:handle_time"`
Ex string `gorm:"column:ex;size:1024"`
}
type GroupMemberModel struct {
GroupID string `gorm:"column:group_id;primary_key;size:64"`
UserID string `gorm:"column:user_id;primary_key;size:64"`
Nickname string `gorm:"column:nickname;size:255"`
FaceURL string `gorm:"column:user_group_face_url;size:255"`
RoleLevel int32 `gorm:"column:role_level"`
JoinTime time.Time `gorm:"column:join_time"`
JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
MuteEndTime time.Time `gorm:"column:mute_end_time"`
Ex string `gorm:"column:ex;size:1024"`
}
type GroupRequestModel struct {
UserID string `gorm:"column:user_id;primary_key;size:64"`
GroupID string `gorm:"column:group_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:1024"`
HandledMsg string `gorm:"column:handle_msg;size:1024"`
ReqTime time.Time `gorm:"column:req_time"`
HandleUserID string `gorm:"column:handle_user_id;size:64"`
HandledTime time.Time `gorm:"column:handle_time"`
JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
Ex string `gorm:"column:ex;size:1024"`
}

View File

@ -1,10 +1,6 @@
package middleware package middleware
import ( import (
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/log"
"Open_IM/pkg/common/token_verify"
"Open_IM/pkg/utils"
"bytes" "bytes"
"encoding/json" "encoding/json"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -12,27 +8,6 @@ import (
"net/http" "net/http"
) )
func JWTAuth() gin.HandlerFunc {
return func(c *gin.Context) {
ok, userID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), "")
// log.NewInfo("0", utils.GetSelfFuncName(), "userID: ", userID)
c.Set("userID", userID)
if !ok {
log.NewError("", "GetUserIDFromToken false ", c.Request.Header.Get("token"))
c.Abort()
c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": errInfo})
return
} else {
if !utils.IsContain(userID, config.Config.Manager.AppManagerUid) {
c.Abort()
c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": "user is not admin"})
return
}
log.NewInfo("0", utils.GetSelfFuncName(), "failed: ", errInfo)
}
}
}
func CorsHandler() gin.HandlerFunc { func CorsHandler() gin.HandlerFunc {
return func(context *gin.Context) { return func(context *gin.Context) {
context.Writer.Header().Set("Access-Control-Allow-Origin", "*") context.Writer.Header().Set("Access-Control-Allow-Origin", "*")

View File

@ -1,73 +0,0 @@
package multi_terminal_login
//
//import (
// "Open_IM/internal/push/content_struct"
// "Open_IM/internal/push/logic"
// "Open_IM/pkg/common/config"
// "Open_IM/pkg/common/constant"
// "Open_IM/pkg/common/db"
// pbChat "Open_IM/pkg/proto/msg"
// "Open_IM/pkg/utils"
//)
//
//const DayOfSecond = 24*60*60
//func MultiTerminalLoginChecker(uid, token string, platformID int32) error {
// // 1.check userid and platform class 0 not exists and 1 exists
// exists, err := db.DB.ExistsUserIDAndPlatform(uid, constant.PlatformNameToClass(constant.PlatformIDToName(platformID)))
// if err != nil {
// return err
// }
// //get config multi login policy
// if config.Config.MultiLoginPolicy {
// //OnlyOneTerminalAccess policy need to check all terminal
// if constant.PlatformNameToClass(constant.PlatformIDToName(platformID)) == "PC" {
// exists, err = db.DB.ExistsUserIDAndPlatform(uid, "Mobile")
// if err != nil {
// return err
// }
// } else {
// exists, err = db.DB.ExistsUserIDAndPlatform(uid, "PC")
// if err != nil {
// return err
// }
// }
// if exists == 1 {
// err := db.DB.SetUserIDAndPlatform(uid, constant.PlatformNameToClass(constant.PlatformIDToName(platformID)), token, config.Config.TokenPolicy.AccessExpire*DayOfSecond)
// if err != nil {
// return err
// }
// PushMessageToTheTerminal(uid, platformID)
// return nil
// }
// } else if config.Config.MultiLoginPolicy.MobileAndPCTerminalAccessButOtherTerminalKickEachOther {
// // common terminal need to kick eich other
// if exists == 1 {
// err := db.DB.SetUserIDAndPlatform(uid, constant.PlatformNameToClass(constant.PlatformIDToName(platformID)), token, config.Config.TokenPolicy.AccessExpire*DayOfSecond)
// if err != nil {
// return err
// }
// PushMessageToTheTerminal(uid, platformID)
// return nil
// }
// }
// err = db.DB.SetUserIDAndPlatform(uid, constant.PlatformNameToClass(constant.PlatformIDToName(platformID)), token, config.Config.TokenPolicy.AccessExpire*DayOfSecond)
// if err != nil {
// return err
// }
// PushMessageToTheTerminal(uid, platformID)
// return nil
//}
////
////func PushMessageToTheTerminal(uid string, platform int32) {
////
//// logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
//// SendID: uid,
//// RecvID: uid,
//// Content: content_struct.NewContentStructString(1, "", "Your account is already logged on other terminal,please confirm"),
//// SendTime: utils.GetCurrentTimestampBySecond(),
//// MsgFrom: constant.SysMsgType,
//// ContentType: constant.KickOnlineTip,
//// PlatformID: platform,
//// })
////}

View File

@ -26,7 +26,7 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type CreateGroupReq struct { type CreateGroupReq struct {
InitMemberList []string `protobuf:"bytes,1,rep,name=initMemberList" json:"initMemberList,omitempty"` InitMembers []string `protobuf:"bytes,1,rep,name=initMembers" json:"initMembers,omitempty"`
GroupInfo *sdk_ws.GroupInfo `protobuf:"bytes,2,opt,name=groupInfo" json:"groupInfo,omitempty"` GroupInfo *sdk_ws.GroupInfo `protobuf:"bytes,2,opt,name=groupInfo" json:"groupInfo,omitempty"`
AdminUserIDs []string `protobuf:"bytes,3,rep,name=adminUserIDs" json:"adminUserIDs,omitempty"` AdminUserIDs []string `protobuf:"bytes,3,rep,name=adminUserIDs" json:"adminUserIDs,omitempty"`
OwnerUserID string `protobuf:"bytes,4,opt,name=ownerUserID" json:"ownerUserID,omitempty"` OwnerUserID string `protobuf:"bytes,4,opt,name=ownerUserID" json:"ownerUserID,omitempty"`
@ -39,7 +39,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} }
func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) }
func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) ProtoMessage() {}
func (*CreateGroupReq) Descriptor() ([]byte, []int) { func (*CreateGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{0} return fileDescriptor_group_5c8d3aafef0e7d21, []int{0}
} }
func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b)
@ -59,9 +59,9 @@ func (m *CreateGroupReq) XXX_DiscardUnknown() {
var xxx_messageInfo_CreateGroupReq proto.InternalMessageInfo var xxx_messageInfo_CreateGroupReq proto.InternalMessageInfo
func (m *CreateGroupReq) GetInitMemberList() []string { func (m *CreateGroupReq) GetInitMembers() []string {
if m != nil { if m != nil {
return m.InitMemberList return m.InitMembers
} }
return nil return nil
} }
@ -98,7 +98,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} }
func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) }
func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) ProtoMessage() {}
func (*CreateGroupResp) Descriptor() ([]byte, []int) { func (*CreateGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{1} return fileDescriptor_group_5c8d3aafef0e7d21, []int{1}
} }
func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b)
@ -136,7 +136,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} }
func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) ProtoMessage() {}
func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{2} return fileDescriptor_group_5c8d3aafef0e7d21, []int{2}
} }
func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b)
@ -174,7 +174,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} }
func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) ProtoMessage() {}
func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{3} return fileDescriptor_group_5c8d3aafef0e7d21, []int{3}
} }
func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b)
@ -212,7 +212,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} }
func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) ProtoMessage() {}
func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { func (*SetGroupInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{4} return fileDescriptor_group_5c8d3aafef0e7d21, []int{4}
} }
func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b)
@ -249,7 +249,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} }
func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) ProtoMessage() {}
func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { func (*SetGroupInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{5} return fileDescriptor_group_5c8d3aafef0e7d21, []int{5}
} }
func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b)
@ -281,7 +281,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL
func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) ProtoMessage() {}
func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{6} return fileDescriptor_group_5c8d3aafef0e7d21, []int{6}
} }
func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b)
@ -327,7 +327,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication
func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) ProtoMessage() {}
func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{7} return fileDescriptor_group_5c8d3aafef0e7d21, []int{7}
} }
func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b)
@ -373,7 +373,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat
func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) }
func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) ProtoMessage() {}
func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{8} return fileDescriptor_group_5c8d3aafef0e7d21, []int{8}
} }
func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b)
@ -419,7 +419,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica
func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) }
func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) ProtoMessage() {}
func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{9} return fileDescriptor_group_5c8d3aafef0e7d21, []int{9}
} }
func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b)
@ -466,7 +466,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} }
func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) }
func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) ProtoMessage() {}
func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{10} return fileDescriptor_group_5c8d3aafef0e7d21, []int{10}
} }
func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b)
@ -517,7 +517,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{}
func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) }
func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) ProtoMessage() {}
func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{11} return fileDescriptor_group_5c8d3aafef0e7d21, []int{11}
} }
func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b)
@ -551,7 +551,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} }
func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) }
func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) ProtoMessage() {}
func (*JoinGroupReq) Descriptor() ([]byte, []int) { func (*JoinGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{12} return fileDescriptor_group_5c8d3aafef0e7d21, []int{12}
} }
func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b)
@ -609,7 +609,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} }
func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) }
func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) ProtoMessage() {}
func (*JoinGroupResp) Descriptor() ([]byte, []int) { func (*JoinGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{13} return fileDescriptor_group_5c8d3aafef0e7d21, []int{13}
} }
func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b)
@ -643,7 +643,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes
func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) }
func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) ProtoMessage() {}
func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{14} return fileDescriptor_group_5c8d3aafef0e7d21, []int{14}
} }
func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b)
@ -701,7 +701,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe
func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) }
func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) ProtoMessage() {}
func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{15} return fileDescriptor_group_5c8d3aafef0e7d21, []int{15}
} }
func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b)
@ -732,7 +732,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} }
func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) }
func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) ProtoMessage() {}
func (*QuitGroupReq) Descriptor() ([]byte, []int) { func (*QuitGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{16} return fileDescriptor_group_5c8d3aafef0e7d21, []int{16}
} }
func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b)
@ -769,7 +769,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} }
func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) }
func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) ProtoMessage() {}
func (*QuitGroupResp) Descriptor() ([]byte, []int) { func (*QuitGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{17} return fileDescriptor_group_5c8d3aafef0e7d21, []int{17}
} }
func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b)
@ -802,7 +802,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} }
func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) ProtoMessage() {}
func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{18} return fileDescriptor_group_5c8d3aafef0e7d21, []int{18}
} }
func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b)
@ -855,7 +855,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{}
func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) ProtoMessage() {}
func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{19} return fileDescriptor_group_5c8d3aafef0e7d21, []int{19}
} }
func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b)
@ -891,7 +891,7 @@ func (m *GetGroupMemberListResp) GetMembers() []*sdk_ws.GroupMemberFullInfo {
type GetGroupMembersInfoReq struct { type GetGroupMembersInfoReq struct {
GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"`
MemberList []string `protobuf:"bytes,2,rep,name=memberList" json:"memberList,omitempty"` Members []string `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -901,7 +901,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{}
func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) ProtoMessage() {}
func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{20} return fileDescriptor_group_5c8d3aafef0e7d21, []int{20}
} }
func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b)
@ -928,9 +928,9 @@ func (m *GetGroupMembersInfoReq) GetGroupID() string {
return "" return ""
} }
func (m *GetGroupMembersInfoReq) GetMemberList() []string { func (m *GetGroupMembersInfoReq) GetMembers() []string {
if m != nil { if m != nil {
return m.MemberList return m.Members
} }
return nil return nil
} }
@ -946,7 +946,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp
func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) ProtoMessage() {}
func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{21} return fileDescriptor_group_5c8d3aafef0e7d21, []int{21}
} }
func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b)
@ -975,7 +975,7 @@ func (m *GetGroupMembersInfoResp) GetMembers() []*sdk_ws.GroupMemberFullInfo {
type KickGroupMemberReq struct { type KickGroupMemberReq struct {
GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"`
KickedUserIDList []string `protobuf:"bytes,2,rep,name=kickedUserIDList" json:"kickedUserIDList,omitempty"` KickedUserIDs []string `protobuf:"bytes,2,rep,name=kickedUserIDs" json:"kickedUserIDs,omitempty"`
Reason string `protobuf:"bytes,3,opt,name=reason" json:"reason,omitempty"` Reason string `protobuf:"bytes,3,opt,name=reason" json:"reason,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -986,7 +986,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} }
func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) ProtoMessage() {}
func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { func (*KickGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{22} return fileDescriptor_group_5c8d3aafef0e7d21, []int{22}
} }
func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b)
@ -1013,9 +1013,9 @@ func (m *KickGroupMemberReq) GetGroupID() string {
return "" return ""
} }
func (m *KickGroupMemberReq) GetKickedUserIDList() []string { func (m *KickGroupMemberReq) GetKickedUserIDs() []string {
if m != nil { if m != nil {
return m.KickedUserIDList return m.KickedUserIDs
} }
return nil return nil
} }
@ -1037,7 +1037,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} }
func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) ProtoMessage() {}
func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { func (*KickGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{23} return fileDescriptor_group_5c8d3aafef0e7d21, []int{23}
} }
func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b)
@ -1069,7 +1069,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} }
func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) }
func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) ProtoMessage() {}
func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{24} return fileDescriptor_group_5c8d3aafef0e7d21, []int{24}
} }
func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b)
@ -1115,7 +1115,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{}
func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) }
func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) ProtoMessage() {}
func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{25} return fileDescriptor_group_5c8d3aafef0e7d21, []int{25}
} }
func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b)
@ -1162,7 +1162,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} }
func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) }
func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) ProtoMessage() {}
func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{26} return fileDescriptor_group_5c8d3aafef0e7d21, []int{26}
} }
func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b)
@ -1213,7 +1213,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} }
func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) }
func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) ProtoMessage() {}
func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{27} return fileDescriptor_group_5c8d3aafef0e7d21, []int{27}
} }
func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b)
@ -1245,7 +1245,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} }
func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) ProtoMessage() {}
func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{28} return fileDescriptor_group_5c8d3aafef0e7d21, []int{28}
} }
func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b)
@ -1290,7 +1290,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} }
func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) ProtoMessage() {}
func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{29} return fileDescriptor_group_5c8d3aafef0e7d21, []int{29}
} }
func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b)
@ -1330,7 +1330,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} }
func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (m *CMSGroup) String() string { return proto.CompactTextString(m) }
func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) ProtoMessage() {}
func (*CMSGroup) Descriptor() ([]byte, []int) { func (*CMSGroup) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{30} return fileDescriptor_group_5c8d3aafef0e7d21, []int{30}
} }
func (m *CMSGroup) XXX_Unmarshal(b []byte) error { func (m *CMSGroup) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CMSGroup.Unmarshal(m, b) return xxx_messageInfo_CMSGroup.Unmarshal(m, b)
@ -1384,7 +1384,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} }
func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) ProtoMessage() {}
func (*GetGroupsReq) Descriptor() ([]byte, []int) { func (*GetGroupsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{31} return fileDescriptor_group_5c8d3aafef0e7d21, []int{31}
} }
func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b)
@ -1437,7 +1437,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} }
func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) ProtoMessage() {}
func (*GetGroupsResp) Descriptor() ([]byte, []int) { func (*GetGroupsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{32} return fileDescriptor_group_5c8d3aafef0e7d21, []int{32}
} }
func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b)
@ -1482,7 +1482,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} }
func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) ProtoMessage() {}
func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { func (*GetGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{33} return fileDescriptor_group_5c8d3aafef0e7d21, []int{33}
} }
func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b)
@ -1522,7 +1522,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} }
func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) ProtoMessage() {}
func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{34} return fileDescriptor_group_5c8d3aafef0e7d21, []int{34}
} }
func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b)
@ -1576,7 +1576,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{}
func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) ProtoMessage() {}
func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{35} return fileDescriptor_group_5c8d3aafef0e7d21, []int{35}
} }
func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b)
@ -1628,7 +1628,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} }
func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) }
func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) ProtoMessage() {}
func (*DismissGroupReq) Descriptor() ([]byte, []int) { func (*DismissGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{36} return fileDescriptor_group_5c8d3aafef0e7d21, []int{36}
} }
func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b)
@ -1665,7 +1665,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} }
func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) }
func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) ProtoMessage() {}
func (*DismissGroupResp) Descriptor() ([]byte, []int) { func (*DismissGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{37} return fileDescriptor_group_5c8d3aafef0e7d21, []int{37}
} }
func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b)
@ -1698,7 +1698,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} }
func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) ProtoMessage() {}
func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{38} return fileDescriptor_group_5c8d3aafef0e7d21, []int{38}
} }
func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b)
@ -1749,7 +1749,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} }
func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) ProtoMessage() {}
func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{39} return fileDescriptor_group_5c8d3aafef0e7d21, []int{39}
} }
func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b)
@ -1781,7 +1781,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR
func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) ProtoMessage() {}
func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{40} return fileDescriptor_group_5c8d3aafef0e7d21, []int{40}
} }
func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b)
@ -1825,7 +1825,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember
func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) ProtoMessage() {}
func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{41} return fileDescriptor_group_5c8d3aafef0e7d21, []int{41}
} }
func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b)
@ -1856,7 +1856,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} }
func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) }
func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) ProtoMessage() {}
func (*MuteGroupReq) Descriptor() ([]byte, []int) { func (*MuteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{42} return fileDescriptor_group_5c8d3aafef0e7d21, []int{42}
} }
func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b)
@ -1893,7 +1893,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} }
func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) }
func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) ProtoMessage() {}
func (*MuteGroupResp) Descriptor() ([]byte, []int) { func (*MuteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{43} return fileDescriptor_group_5c8d3aafef0e7d21, []int{43}
} }
func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b)
@ -1924,7 +1924,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} }
func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) ProtoMessage() {}
func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{44} return fileDescriptor_group_5c8d3aafef0e7d21, []int{44}
} }
func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b)
@ -1961,7 +1961,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} }
func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) ProtoMessage() {}
func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{45} return fileDescriptor_group_5c8d3aafef0e7d21, []int{45}
} }
func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b)
@ -1994,7 +1994,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam
func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) ProtoMessage() {}
func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{46} return fileDescriptor_group_5c8d3aafef0e7d21, []int{46}
} }
func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b)
@ -2045,7 +2045,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna
func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) ProtoMessage() {}
func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{47} return fileDescriptor_group_5c8d3aafef0e7d21, []int{47}
} }
func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b)
@ -2077,7 +2077,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL
func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) }
func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) ProtoMessage() {}
func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{48} return fileDescriptor_group_5c8d3aafef0e7d21, []int{48}
} }
func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b)
@ -2123,7 +2123,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup
func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) }
func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) ProtoMessage() {}
func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{49} return fileDescriptor_group_5c8d3aafef0e7d21, []int{49}
} }
func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b)
@ -2168,7 +2168,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} }
func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupsInfoReq) ProtoMessage() {} func (*GetSuperGroupsInfoReq) ProtoMessage() {}
func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{50} return fileDescriptor_group_5c8d3aafef0e7d21, []int{50}
} }
func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b)
@ -2206,7 +2206,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{}
func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupsInfoResp) ProtoMessage() {} func (*GetSuperGroupsInfoResp) ProtoMessage() {}
func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{51} return fileDescriptor_group_5c8d3aafef0e7d21, []int{51}
} }
func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b)
@ -2249,7 +2249,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} }
func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberInfoReq) ProtoMessage() {} func (*SetGroupMemberInfoReq) ProtoMessage() {}
func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{52} return fileDescriptor_group_5c8d3aafef0e7d21, []int{52}
} }
func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b)
@ -2321,7 +2321,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{}
func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberInfoResp) ProtoMessage() {} func (*SetGroupMemberInfoResp) ProtoMessage() {}
func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{53} return fileDescriptor_group_5c8d3aafef0e7d21, []int{53}
} }
func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b)
@ -2352,7 +2352,7 @@ func (m *GetGroupAbstractInfoReq) Reset() { *m = GetGroupAbstractInfoReq
func (m *GetGroupAbstractInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupAbstractInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupAbstractInfoReq) ProtoMessage() {} func (*GetGroupAbstractInfoReq) ProtoMessage() {}
func (*GetGroupAbstractInfoReq) Descriptor() ([]byte, []int) { func (*GetGroupAbstractInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{54} return fileDescriptor_group_5c8d3aafef0e7d21, []int{54}
} }
func (m *GetGroupAbstractInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupAbstractInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAbstractInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupAbstractInfoReq.Unmarshal(m, b)
@ -2392,7 +2392,7 @@ func (m *GroupAbstractInfo) Reset() { *m = GroupAbstractInfo{} }
func (m *GroupAbstractInfo) String() string { return proto.CompactTextString(m) } func (m *GroupAbstractInfo) String() string { return proto.CompactTextString(m) }
func (*GroupAbstractInfo) ProtoMessage() {} func (*GroupAbstractInfo) ProtoMessage() {}
func (*GroupAbstractInfo) Descriptor() ([]byte, []int) { func (*GroupAbstractInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{55} return fileDescriptor_group_5c8d3aafef0e7d21, []int{55}
} }
func (m *GroupAbstractInfo) XXX_Unmarshal(b []byte) error { func (m *GroupAbstractInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupAbstractInfo.Unmarshal(m, b) return xxx_messageInfo_GroupAbstractInfo.Unmarshal(m, b)
@ -2444,7 +2444,7 @@ func (m *GetGroupAbstractInfoResp) Reset() { *m = GetGroupAbstractInfoRe
func (m *GetGroupAbstractInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupAbstractInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupAbstractInfoResp) ProtoMessage() {} func (*GetGroupAbstractInfoResp) ProtoMessage() {}
func (*GetGroupAbstractInfoResp) Descriptor() ([]byte, []int) { func (*GetGroupAbstractInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{56} return fileDescriptor_group_5c8d3aafef0e7d21, []int{56}
} }
func (m *GetGroupAbstractInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupAbstractInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAbstractInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupAbstractInfoResp.Unmarshal(m, b)
@ -2483,7 +2483,7 @@ func (m *GetUserInGroupMembersReq) Reset() { *m = GetUserInGroupMembersR
func (m *GetUserInGroupMembersReq) String() string { return proto.CompactTextString(m) } func (m *GetUserInGroupMembersReq) String() string { return proto.CompactTextString(m) }
func (*GetUserInGroupMembersReq) ProtoMessage() {} func (*GetUserInGroupMembersReq) ProtoMessage() {}
func (*GetUserInGroupMembersReq) Descriptor() ([]byte, []int) { func (*GetUserInGroupMembersReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{57} return fileDescriptor_group_5c8d3aafef0e7d21, []int{57}
} }
func (m *GetUserInGroupMembersReq) XXX_Unmarshal(b []byte) error { func (m *GetUserInGroupMembersReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserInGroupMembersReq.Unmarshal(m, b) return xxx_messageInfo_GetUserInGroupMembersReq.Unmarshal(m, b)
@ -2528,7 +2528,7 @@ func (m *GetUserInGroupMembersResp) Reset() { *m = GetUserInGroupMembers
func (m *GetUserInGroupMembersResp) String() string { return proto.CompactTextString(m) } func (m *GetUserInGroupMembersResp) String() string { return proto.CompactTextString(m) }
func (*GetUserInGroupMembersResp) ProtoMessage() {} func (*GetUserInGroupMembersResp) ProtoMessage() {}
func (*GetUserInGroupMembersResp) Descriptor() ([]byte, []int) { func (*GetUserInGroupMembersResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_19947c3109871c24, []int{58} return fileDescriptor_group_5c8d3aafef0e7d21, []int{58}
} }
func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error { func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b) return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b)
@ -3597,124 +3597,124 @@ var _Group_serviceDesc = grpc.ServiceDesc{
Metadata: "group/group.proto", Metadata: "group/group.proto",
} }
func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_19947c3109871c24) } func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_5c8d3aafef0e7d21) }
var fileDescriptor_group_19947c3109871c24 = []byte{ var fileDescriptor_group_5c8d3aafef0e7d21 = []byte{
// 1848 bytes of a gzipped FileDescriptorProto // 1851 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x5f, 0x53, 0xdb, 0xc0, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x5f, 0x53, 0xe4, 0xc6,
0x11, 0x1f, 0x99, 0x40, 0xc2, 0x06, 0x02, 0x1c, 0x18, 0x8c, 0x20, 0x40, 0x2e, 0x69, 0xca, 0xb4, 0x11, 0x2f, 0x2d, 0x07, 0x77, 0xf4, 0x81, 0xe1, 0x06, 0x16, 0x74, 0x82, 0x03, 0x3c, 0x26, 0x0e,
0x89, 0xe9, 0x24, 0x6d, 0xa6, 0x7f, 0x32, 0x93, 0x26, 0x90, 0x10, 0x5a, 0x0c, 0x8d, 0x4c, 0xd2, 0x95, 0xf8, 0x96, 0xd4, 0x5d, 0xe2, 0xca, 0x1f, 0x57, 0x39, 0x36, 0xd8, 0x98, 0x84, 0x85, 0x9c,
0x69, 0x3a, 0x19, 0x2a, 0xec, 0x43, 0x51, 0xb0, 0xa5, 0x43, 0x27, 0x43, 0x26, 0x93, 0x3e, 0xb4, 0x16, 0x3b, 0x15, 0xa7, 0x5c, 0x44, 0xec, 0x0e, 0xb2, 0x0e, 0xad, 0x34, 0x68, 0xb4, 0xe0, 0x72,
0xcf, 0xfd, 0xf3, 0xd0, 0xc7, 0xbe, 0x75, 0xfa, 0x29, 0xfa, 0xd6, 0xaf, 0xd2, 0x4f, 0xd2, 0xd1, 0x39, 0x0f, 0xc9, 0x73, 0xfe, 0x3c, 0xe4, 0x31, 0x6f, 0xa9, 0x7c, 0x84, 0x7c, 0x81, 0x7c, 0x95,
0xe9, 0x74, 0x3e, 0x49, 0x27, 0xd9, 0x25, 0xee, 0x8b, 0x67, 0xb4, 0xb7, 0x7b, 0xb7, 0xb7, 0xff, 0x7c, 0x92, 0x94, 0x66, 0x46, 0xb3, 0x23, 0x69, 0xb4, 0xbb, 0xc1, 0x9b, 0x97, 0xad, 0x52, 0x4f,
0xee, 0xb7, 0x6b, 0x98, 0x73, 0x02, 0xbf, 0x47, 0xb7, 0xf8, 0x6f, 0x9d, 0x06, 0x7e, 0xe8, 0xa3, 0xf7, 0x4c, 0x4f, 0xff, 0x9b, 0x5f, 0xf7, 0xc2, 0x13, 0x3f, 0x89, 0x07, 0x74, 0x9f, 0xff, 0xb6,
0x71, 0xfe, 0x61, 0x6e, 0x1e, 0x52, 0xe2, 0x3d, 0xdc, 0x6b, 0x3c, 0x6c, 0x92, 0xe0, 0x82, 0x04, 0x68, 0x12, 0xa7, 0x31, 0x9a, 0xe5, 0x1f, 0xce, 0xde, 0x19, 0x25, 0xd1, 0xf3, 0xe3, 0xf6, 0xf3,
0x5b, 0xf4, 0xcc, 0xd9, 0xe2, 0x0c, 0x5b, 0xac, 0x7d, 0x76, 0x7c, 0xc9, 0xb6, 0x2e, 0x59, 0x2c, 0x0e, 0x49, 0x6e, 0x49, 0xb2, 0x4f, 0xaf, 0xfd, 0x7d, 0xce, 0xb0, 0xcf, 0x7a, 0xd7, 0x17, 0x77,
0x60, 0xd6, 0x07, 0x72, 0x06, 0x36, 0xa5, 0x24, 0x10, 0xfc, 0xf8, 0x5f, 0x06, 0xdc, 0xda, 0x0e, 0x6c, 0xff, 0x8e, 0x09, 0x01, 0xa7, 0x35, 0x96, 0x33, 0xf1, 0x28, 0x25, 0x89, 0xe4, 0xc7, 0xff,
0x88, 0x1d, 0x92, 0xdd, 0xe8, 0x24, 0x8b, 0x9c, 0xa3, 0xfb, 0x70, 0xcb, 0xf5, 0xdc, 0xb0, 0x41, 0xb2, 0xe0, 0x8d, 0x83, 0x84, 0x78, 0x29, 0x39, 0xca, 0x4e, 0x72, 0xc9, 0x0d, 0xda, 0x81, 0xc7,
0xba, 0x27, 0x24, 0xd8, 0x77, 0x59, 0x58, 0x33, 0x36, 0xc6, 0x36, 0x27, 0xad, 0x0c, 0x15, 0xfd, 0x41, 0x14, 0xa4, 0x6d, 0xd2, 0xbf, 0x24, 0x09, 0xb3, 0xad, 0x9d, 0x99, 0xbd, 0x79, 0x57, 0x27,
0x14, 0x26, 0xb9, 0x76, 0x7b, 0xde, 0xa9, 0x5f, 0xab, 0x6c, 0x18, 0x9b, 0x37, 0x1f, 0xad, 0xd6, 0xa1, 0x9f, 0xc2, 0x3c, 0xd7, 0xeb, 0x38, 0xba, 0x8a, 0xed, 0xc6, 0x8e, 0xb5, 0xf7, 0xf8, 0xc5,
0x19, 0x3f, 0xf6, 0xd8, 0xa6, 0xee, 0x31, 0xb5, 0x03, 0xbb, 0xcb, 0xea, 0xbb, 0x09, 0x8f, 0xd5, 0x66, 0x8b, 0xf1, 0x03, 0x2f, 0x3c, 0x1a, 0x5c, 0x50, 0x2f, 0xf1, 0xfa, 0xac, 0x75, 0x94, 0xf3,
0x67, 0x47, 0x18, 0xa6, 0xec, 0x76, 0xd7, 0xf5, 0xde, 0x32, 0x12, 0xec, 0xed, 0xb0, 0xda, 0x18, 0xb8, 0x43, 0x76, 0x84, 0x61, 0xc1, 0xeb, 0xf5, 0x83, 0xe8, 0x53, 0x46, 0x92, 0xe3, 0x43, 0x66,
0x3f, 0x21, 0x45, 0x43, 0x1b, 0x70, 0xd3, 0xbf, 0xf4, 0x48, 0x10, 0x7f, 0xd7, 0xae, 0x6d, 0x18, 0xcf, 0xf0, 0xed, 0x0b, 0xb4, 0x4c, 0x83, 0xf8, 0x2e, 0x22, 0x89, 0xf8, 0xb6, 0x1f, 0xec, 0x58,
0x9b, 0x93, 0x96, 0x4a, 0xc2, 0x0d, 0x98, 0x49, 0xe9, 0xce, 0x68, 0x5a, 0x29, 0xe3, 0x7f, 0x52, 0x99, 0x06, 0x1a, 0x09, 0xb7, 0x61, 0xa9, 0xa0, 0x35, 0xa3, 0x45, 0xa5, 0xac, 0xff, 0x49, 0x29,
0x0a, 0xd7, 0x61, 0x76, 0x97, 0x84, 0x7c, 0x89, 0xf1, 0x35, 0x72, 0x8e, 0x4c, 0xb8, 0x11, 0x33, 0xdc, 0x82, 0xe5, 0x23, 0x92, 0xf2, 0x25, 0xc6, 0xd7, 0xc8, 0x0d, 0x72, 0xe0, 0x91, 0x60, 0x38,
0xec, 0x30, 0x61, 0x06, 0xf9, 0x8d, 0xdf, 0xc0, 0x5c, 0x86, 0x9f, 0x51, 0xf4, 0x14, 0x40, 0xee, 0xcc, 0x6d, 0xa0, 0xbe, 0xf1, 0x2b, 0x78, 0x52, 0xe2, 0x67, 0x14, 0xbd, 0x07, 0xa0, 0x76, 0x14,
0x18, 0x8b, 0x0c, 0xd2, 0x40, 0xe1, 0xc7, 0xc7, 0x30, 0xd3, 0x14, 0x5b, 0x26, 0x1a, 0xec, 0xc3, 0x22, 0xe3, 0x34, 0xd0, 0xf8, 0xf1, 0x05, 0x2c, 0x75, 0xe4, 0x96, 0xb9, 0x06, 0x27, 0xb0, 0xa4,
0x8c, 0x64, 0x78, 0xe5, 0x07, 0x4d, 0x12, 0x8a, 0x7b, 0xe1, 0xb2, 0x5d, 0x63, 0x4e, 0x2b, 0x2b, 0x18, 0x3e, 0x8e, 0x93, 0x0e, 0x49, 0xe5, 0xbd, 0xf0, 0xa8, 0x5d, 0x05, 0xa7, 0x5b, 0x16, 0xc5,
0x8a, 0x11, 0xcc, 0xa6, 0x0f, 0x60, 0x14, 0xff, 0xd1, 0x00, 0x33, 0xb9, 0xc8, 0x73, 0x4a, 0x3b, 0x08, 0x96, 0x8b, 0x07, 0x30, 0x8a, 0xff, 0x68, 0x81, 0x93, 0x5f, 0xe4, 0x03, 0x4a, 0xc3, 0xa0,
0x6e, 0xcb, 0x0e, 0x5d, 0xdf, 0x8b, 0x9c, 0x1c, 0x29, 0xb0, 0x03, 0x40, 0x6d, 0xc7, 0xf5, 0x38, 0xeb, 0xa5, 0x41, 0x1c, 0x9d, 0x04, 0x2c, 0xcd, 0x14, 0x38, 0x04, 0xa0, 0x9e, 0x1f, 0x44, 0x9c,
0x51, 0x9c, 0x7d, 0x4f, 0x73, 0xb6, 0x45, 0xce, 0x7b, 0x84, 0x85, 0xbf, 0x92, 0xbc, 0x96, 0x22, 0x28, 0xcf, 0xde, 0x35, 0x9c, 0xed, 0x92, 0x9b, 0x01, 0x61, 0xe9, 0xaf, 0x14, 0xaf, 0xab, 0xc9,
0x87, 0xd6, 0x00, 0x4e, 0x03, 0xbf, 0x2b, 0x9c, 0x59, 0xe1, 0xce, 0x54, 0x28, 0xf8, 0x0b, 0xac, 0xa1, 0x2d, 0x80, 0xab, 0x24, 0xee, 0x4b, 0x67, 0x36, 0xb8, 0x33, 0x35, 0x0a, 0xfe, 0x1a, 0x36,
0x14, 0xea, 0xc0, 0x28, 0x5a, 0x80, 0xf1, 0xd0, 0x0f, 0xed, 0x0e, 0x3f, 0x7f, 0xdc, 0x8a, 0x3f, 0x6a, 0x75, 0x60, 0x14, 0xad, 0xc2, 0x6c, 0x1a, 0xa7, 0x5e, 0xc8, 0xcf, 0x9f, 0x75, 0xc5, 0x07,
0xd0, 0x4b, 0x98, 0x76, 0x44, 0xd8, 0x46, 0x47, 0xb3, 0x5a, 0x85, 0xdb, 0x7b, 0xbd, 0xc8, 0x32, 0xfa, 0x08, 0x16, 0x7d, 0x19, 0xb0, 0xd9, 0xd1, 0xcc, 0x6e, 0x70, 0x7b, 0x6f, 0xd7, 0x59, 0x46,
0x82, 0xcf, 0x4a, 0x4b, 0xe1, 0xaf, 0xb0, 0xba, 0x4b, 0xc2, 0x48, 0x11, 0x8b, 0x9c, 0x6b, 0x2c, 0xf2, 0xb9, 0x45, 0x29, 0xfc, 0x0d, 0x6c, 0x1e, 0x91, 0x34, 0x53, 0xc4, 0x25, 0x37, 0x06, 0x0b,
0xb0, 0x08, 0x13, 0xbd, 0x58, 0x6f, 0x83, 0xeb, 0x2d, 0xbe, 0x32, 0x96, 0xa9, 0x5c, 0xcd, 0x32, 0xac, 0xc1, 0xdc, 0x40, 0xe8, 0x6d, 0x71, 0xbd, 0xe5, 0x57, 0xc9, 0x32, 0x8d, 0xfb, 0x59, 0x06,
0xf8, 0x2b, 0xdc, 0x2e, 0x39, 0xfd, 0xff, 0x7d, 0xf7, 0x3f, 0x18, 0x50, 0x3d, 0x0a, 0x6c, 0x8f, 0x7f, 0x03, 0xcf, 0x46, 0x9c, 0xfe, 0xff, 0xbe, 0xfb, 0x1f, 0x2c, 0x68, 0x9e, 0x27, 0x5e, 0xc4,
0x9d, 0x92, 0x80, 0xf3, 0x1d, 0x46, 0x09, 0x16, 0xdd, 0xba, 0x06, 0xd7, 0x45, 0xa8, 0x8b, 0x6b, 0xae, 0x48, 0xc2, 0xf9, 0xce, 0xb2, 0x04, 0xcb, 0x6e, 0x6d, 0xc3, 0x43, 0x19, 0xea, 0xf2, 0xda,
0x27, 0x9f, 0x51, 0x85, 0xf0, 0x3b, 0xed, 0x43, 0x25, 0x39, 0x63, 0x7f, 0x66, 0xa8, 0x11, 0x9f, 0xf9, 0x27, 0x7a, 0x1b, 0xde, 0x88, 0xc3, 0xde, 0x99, 0x96, 0x9c, 0xc2, 0x9f, 0x25, 0x6a, 0xc6,
0x47, 0x2e, 0x55, 0xbe, 0xb1, 0x98, 0x2f, 0x4d, 0xc5, 0x35, 0x58, 0xd4, 0xa9, 0xc0, 0x28, 0xfe, 0x17, 0x91, 0x3b, 0x9d, 0x6f, 0x46, 0xf0, 0x15, 0xa9, 0xd8, 0x86, 0x35, 0x93, 0x0a, 0x8c, 0xe2,
0x8b, 0x01, 0x53, 0xbf, 0xf0, 0x5d, 0x4f, 0x16, 0xa7, 0x62, 0xa5, 0xd6, 0x00, 0x02, 0x72, 0xde, 0xbf, 0x58, 0xb0, 0xf0, 0x8b, 0x38, 0x88, 0x54, 0x59, 0xaa, 0x57, 0x6a, 0x0b, 0x20, 0x21, 0x37,
0x20, 0x8c, 0xd9, 0x0e, 0x49, 0x02, 0xac, 0x4f, 0x89, 0xd6, 0x3f, 0xf9, 0xae, 0xd7, 0xf4, 0x7b, 0x6d, 0xc2, 0x98, 0xe7, 0x93, 0x3c, 0xc0, 0x86, 0x94, 0x6c, 0xfd, 0x75, 0x1c, 0x44, 0x9d, 0x78,
0x41, 0x8b, 0x70, 0x45, 0xc6, 0x2d, 0x85, 0x82, 0xee, 0xc1, 0xb4, 0xeb, 0x5d, 0xb8, 0x61, 0xa6, 0x90, 0x74, 0x09, 0x57, 0x64, 0xd6, 0xd5, 0x28, 0x68, 0x17, 0x16, 0x83, 0xe8, 0x36, 0x48, 0x4b,
0xe0, 0xa4, 0x89, 0x78, 0x06, 0xa6, 0x15, 0x7d, 0x18, 0xc5, 0x7f, 0x37, 0x60, 0x25, 0x1b, 0xb5, 0x05, 0xa7, 0x48, 0xc4, 0x4b, 0xb0, 0xa8, 0xe9, 0xc3, 0x28, 0xfe, 0xbb, 0x05, 0x1b, 0xe5, 0xa8,
0xd1, 0x82, 0xef, 0x31, 0x32, 0x50, 0xe1, 0xb2, 0x8c, 0x88, 0xd6, 0x3f, 0xda, 0x5e, 0xbb, 0x43, 0xcd, 0x16, 0xe2, 0x88, 0x91, 0xb1, 0x0a, 0x8f, 0xca, 0x88, 0x6c, 0xfd, 0x4b, 0x2f, 0xea, 0x85,
0xda, 0x0d, 0xe6, 0x08, 0xcb, 0x29, 0x94, 0xa8, 0x86, 0xc6, 0x5f, 0x16, 0x61, 0xbd, 0x4e, 0xc8, 0xa4, 0xd7, 0x66, 0xbe, 0xb4, 0x9c, 0x46, 0xc9, 0x6a, 0xa8, 0xf8, 0x72, 0x09, 0x1b, 0x84, 0x29,
0xf5, 0x1d, 0xb7, 0x52, 0x34, 0xbc, 0x06, 0xab, 0xc5, 0xca, 0x31, 0x8a, 0x37, 0x61, 0xea, 0x4d, 0xd7, 0x77, 0xd6, 0x2d, 0xd0, 0xf0, 0x16, 0x6c, 0xd6, 0x2b, 0xc7, 0x28, 0xde, 0x83, 0x85, 0x57,
0xcf, 0x0d, 0x07, 0x9b, 0x37, 0xba, 0xb8, 0xc2, 0xc9, 0x28, 0xfe, 0xab, 0x01, 0xd5, 0x24, 0x63, 0x83, 0x20, 0x1d, 0x6f, 0xde, 0xec, 0xe2, 0x1a, 0x27, 0xa3, 0xf8, 0xaf, 0x16, 0x34, 0xf3, 0x8c,
0xfb, 0xaf, 0x42, 0xf9, 0x95, 0x17, 0x61, 0xe2, 0xd4, 0xed, 0x84, 0x24, 0xe0, 0xd7, 0x1d, 0xb7, 0x15, 0x4f, 0x42, 0x9e, 0x2e, 0xf5, 0x57, 0x5e, 0x83, 0xb9, 0xab, 0x20, 0x4c, 0x49, 0xc2, 0xaf,
0xc4, 0x57, 0x26, 0x91, 0xae, 0x5d, 0x31, 0x91, 0x28, 0x2c, 0xea, 0x14, 0x2a, 0xcc, 0xa0, 0x9f, 0x3b, 0xeb, 0xca, 0xaf, 0x52, 0x22, 0x3d, 0xb8, 0x67, 0x22, 0x51, 0x58, 0x33, 0x29, 0x54, 0x9b,
0xc3, 0xf5, 0x2e, 0xe7, 0x4b, 0x72, 0xe7, 0x7e, 0x51, 0xee, 0xc4, 0xdb, 0xbd, 0xea, 0x75, 0x3a, 0x41, 0x3f, 0x87, 0x87, 0x7d, 0xf9, 0xbc, 0x89, 0xdc, 0x79, 0xbb, 0x2e, 0x77, 0xc4, 0x76, 0x1f,
0xbc, 0x68, 0x26, 0x62, 0xd8, 0xca, 0x9e, 0x28, 0xdf, 0x8d, 0x52, 0xb7, 0x77, 0xfb, 0x4f, 0x6b, 0x0f, 0xc2, 0x90, 0x17, 0xcd, 0x5c, 0x0c, 0x9f, 0x94, 0x4f, 0x54, 0xef, 0x46, 0xbd, 0x0d, 0xec,
0x85, 0xbf, 0x29, 0x0a, 0x05, 0xff, 0x16, 0x96, 0xb4, 0x7b, 0x32, 0xaa, 0x2a, 0x6c, 0x5c, 0x4d, 0xe2, 0xa9, 0xf3, 0xc3, 0xdd, 0x7e, 0x0b, 0xeb, 0xc6, 0xdd, 0x18, 0xd5, 0x55, 0xb5, 0xee, 0xa7,
0xe1, 0x00, 0xd0, 0x2f, 0xdd, 0xd6, 0x99, 0xc2, 0x53, 0xae, 0xec, 0xf7, 0x60, 0xf6, 0xcc, 0x6d, 0x6a, 0x08, 0xe8, 0x97, 0x41, 0xf7, 0x5a, 0xe3, 0x19, 0xad, 0xe6, 0x2e, 0x2c, 0x5e, 0x07, 0xdd,
0x9d, 0x91, 0x76, 0x1c, 0x93, 0x8a, 0xca, 0x39, 0x7a, 0xe4, 0xdc, 0x80, 0xd8, 0xcc, 0xf7, 0x44, 0x6b, 0xd2, 0xcb, 0x9f, 0x68, 0xa1, 0x6c, 0x91, 0x98, 0x39, 0x34, 0x21, 0x1e, 0x8b, 0x23, 0x19,
0xac, 0x8a, 0x2f, 0x5c, 0x85, 0xf9, 0xdc, 0x99, 0x8c, 0xe2, 0xdf, 0xf3, 0xf0, 0x89, 0x92, 0x89, 0x9f, 0xf2, 0x0b, 0x37, 0x61, 0xa5, 0x72, 0x1a, 0xa3, 0xf8, 0xf7, 0x3c, 0x64, 0xb2, 0x04, 0x22,
0xb4, 0xf9, 0x5a, 0x12, 0x3e, 0xe9, 0xbc, 0x30, 0x72, 0x79, 0x31, 0x9a, 0xaa, 0xdb, 0xe6, 0xae, 0x3d, 0xbe, 0x96, 0x87, 0x4c, 0x31, 0x17, 0xac, 0x4a, 0x2e, 0x4c, 0xa7, 0xd2, 0xf6, 0xb8, 0xbb,
0xcb, 0x1d, 0x5f, 0x18, 0x2c, 0x3f, 0x84, 0x09, 0x6e, 0x94, 0x24, 0x56, 0xca, 0xdf, 0x74, 0xc1, 0x2a, 0xc7, 0xd7, 0x06, 0xc8, 0x0f, 0x61, 0x8e, 0x9b, 0x23, 0x8f, 0x8f, 0xd1, 0xef, 0xb8, 0xe4,
0x8b, 0x29, 0x2c, 0xec, 0xf1, 0xfa, 0x11, 0xe9, 0x7e, 0xe4, 0x0f, 0x51, 0xc6, 0xfa, 0x56, 0xac, 0xc5, 0x14, 0x56, 0x8f, 0x79, 0xcd, 0xc8, 0x74, 0x3f, 0x8f, 0x27, 0x28, 0x5d, 0x43, 0x2b, 0x36,
0xa8, 0x56, 0x8c, 0x51, 0x59, 0xb4, 0x53, 0x3b, 0x8d, 0x99, 0x32, 0x54, 0xbc, 0x04, 0x55, 0xcd, 0x74, 0x2b, 0x66, 0xf5, 0x53, 0x54, 0x9f, 0x5e, 0x11, 0x27, 0x95, 0xa8, 0x78, 0x1d, 0x9a, 0x86,
0x89, 0x8c, 0xe2, 0x0b, 0x58, 0x90, 0x0f, 0x6c, 0xa7, 0x33, 0x8c, 0xf3, 0x47, 0x63, 0xe8, 0xdf, 0x13, 0x19, 0xc5, 0xb7, 0xb0, 0xaa, 0x1e, 0xd5, 0x30, 0x9c, 0xc4, 0xed, 0xd3, 0x31, 0xf4, 0x6f,
0xf4, 0xcb, 0x84, 0x72, 0xee, 0x48, 0xa2, 0xf9, 0x1f, 0x06, 0xdc, 0xd8, 0x6e, 0x34, 0x39, 0xcf, 0x86, 0xa5, 0x41, 0x3b, 0x77, 0x2a, 0x71, 0xfc, 0x0f, 0x0b, 0x1e, 0x1d, 0xb4, 0x3b, 0x9c, 0xe7,
0xb7, 0x20, 0x3f, 0x54, 0x07, 0xe4, 0xc8, 0x87, 0x27, 0x32, 0xdc, 0x81, 0xdd, 0x4d, 0xde, 0x10, 0xdb, 0xa0, 0x3d, 0xd4, 0x02, 0xe4, 0xab, 0xc7, 0x26, 0x33, 0xdc, 0xa9, 0xd7, 0xcf, 0xdf, 0x0d,
0xcd, 0x4a, 0x94, 0x16, 0x69, 0xaa, 0x7c, 0xda, 0x72, 0x74, 0xfc, 0x27, 0x03, 0xa6, 0x24, 0x4c, 0xc3, 0x0a, 0xfa, 0x1e, 0x2c, 0x17, 0xa9, 0xea, 0x39, 0xab, 0xd0, 0xf1, 0x9f, 0x2c, 0x58, 0x50,
0x1c, 0x1d, 0x9e, 0x5a, 0x15, 0xd7, 0x55, 0x34, 0xed, 0x13, 0x54, 0xa7, 0x8e, 0xa5, 0xeb, 0xf8, 0xd0, 0x70, 0x7a, 0x18, 0x6a, 0x53, 0x5e, 0x57, 0xd3, 0x74, 0x48, 0xd0, 0x9d, 0x3a, 0x53, 0xac,
0x11, 0x4c, 0x2b, 0xda, 0x30, 0x8a, 0xbe, 0x2b, 0x03, 0x3b, 0xf6, 0xc2, 0x4c, 0x3d, 0x6e, 0x40, 0xdd, 0xe7, 0xb0, 0xa8, 0x69, 0xc3, 0x28, 0xfa, 0xae, 0x0a, 0x6c, 0xe1, 0x85, 0xa5, 0x96, 0x68,
0x12, 0xc3, 0x26, 0xb1, 0x1c, 0x41, 0x61, 0x4e, 0x38, 0xe8, 0x75, 0x45, 0xf9, 0x96, 0xdf, 0xf8, 0x37, 0x72, 0xc3, 0xe6, 0xb1, 0x9c, 0xc1, 0x5f, 0x4e, 0x38, 0x1d, 0xf4, 0x65, 0xc9, 0x56, 0xdf,
0x61, 0x1f, 0x0a, 0x0f, 0x11, 0x59, 0xf8, 0x6f, 0xb9, 0xb7, 0x83, 0x6d, 0x37, 0x9a, 0xe5, 0xd1, 0xf8, 0xf9, 0x10, 0xfe, 0x4e, 0x10, 0x59, 0xf8, 0x6f, 0x95, 0xf7, 0x82, 0x1d, 0xb4, 0x3b, 0xa3,
0x68, 0xc2, 0x8d, 0x5e, 0xda, 0x33, 0xf2, 0x3b, 0x63, 0xd2, 0xb1, 0x2b, 0x46, 0xea, 0xbf, 0x8d, 0xa3, 0xd1, 0x81, 0x47, 0x83, 0xa2, 0x67, 0xd4, 0x77, 0xc9, 0xa4, 0x33, 0xf7, 0x8c, 0xd4, 0x7f,
0x5c, 0x39, 0xe7, 0x5a, 0x8d, 0x22, 0x56, 0xd1, 0x4b, 0x4d, 0x32, 0x7d, 0x47, 0xab, 0x62, 0xfc, 0x5b, 0x95, 0x12, 0xce, 0xb5, 0x9a, 0x46, 0xac, 0xa2, 0x8f, 0x0c, 0xc9, 0xf4, 0x1d, 0xa3, 0x8a,
0x3c, 0x17, 0xc3, 0xe8, 0x78, 0xc7, 0x83, 0x5e, 0x97, 0x25, 0x28, 0xa6, 0x4f, 0xc1, 0xdf, 0x87, 0xe2, 0x49, 0xae, 0x87, 0xce, 0x62, 0xc7, 0xd3, 0x41, 0x9f, 0xe5, 0xc8, 0x65, 0x48, 0xc1, 0xdf,
0x99, 0x1d, 0x97, 0x75, 0x5d, 0xc6, 0x86, 0x78, 0xd3, 0x11, 0xcc, 0xa6, 0x99, 0x19, 0xc5, 0x9f, 0x87, 0xa5, 0xc3, 0x80, 0xf5, 0x03, 0xc6, 0x26, 0x78, 0xc7, 0x11, 0x2c, 0x17, 0x99, 0x19, 0xc5,
0x00, 0x35, 0x7a, 0xa2, 0xa3, 0x1a, 0xa6, 0x48, 0xf4, 0xb1, 0x71, 0x25, 0x85, 0x8d, 0x31, 0x4c, 0xaf, 0x01, 0xb5, 0x07, 0xb2, 0x8b, 0x9a, 0xa4, 0x48, 0x0c, 0xf1, 0x70, 0xa3, 0x80, 0x87, 0x31,
0x75, 0x7b, 0x21, 0x69, 0x37, 0x49, 0xcb, 0xf7, 0xda, 0xb1, 0xaa, 0xd3, 0x56, 0x8a, 0x16, 0xbd, 0x2c, 0xf4, 0x07, 0x29, 0xe9, 0x75, 0x48, 0x37, 0x8e, 0x7a, 0x42, 0xd5, 0x45, 0xb7, 0x40, 0xcb,
0x0c, 0xb9, 0xb3, 0x18, 0xc5, 0xfb, 0x50, 0xdb, 0xb6, 0xbd, 0x16, 0xe9, 0x8c, 0x42, 0x11, 0xbc, 0x5e, 0x86, 0xca, 0x59, 0x8c, 0xe2, 0x13, 0xb0, 0x0f, 0xbc, 0xa8, 0x4b, 0xc2, 0x69, 0x28, 0x82,
0x02, 0xcb, 0x05, 0xbb, 0xc5, 0xf8, 0x47, 0x92, 0x07, 0xe2, 0x1f, 0x85, 0x93, 0x51, 0x5c, 0x07, 0x37, 0xe0, 0x69, 0xcd, 0x6e, 0x02, 0xf3, 0x28, 0xf2, 0x58, 0xcc, 0xa3, 0x71, 0x32, 0x8a, 0x5b,
0x94, 0xd9, 0xb7, 0x7c, 0x83, 0x2a, 0xcc, 0xe7, 0xf8, 0x19, 0xc5, 0x2e, 0x2c, 0x37, 0x53, 0x31, 0x80, 0x4a, 0xfb, 0x8e, 0xde, 0xa0, 0x09, 0x2b, 0x15, 0x7e, 0x46, 0x71, 0x00, 0x4f, 0x3b, 0x85,
0x77, 0xe0, 0xb6, 0xce, 0x3c, 0xbb, 0x4b, 0x06, 0x66, 0x83, 0x27, 0x18, 0x93, 0x6c, 0x48, 0xbe, 0x98, 0x3b, 0x0d, 0xba, 0xd7, 0x91, 0xd7, 0x27, 0x63, 0xb3, 0x21, 0x92, 0x8c, 0x79, 0x36, 0xe4,
0x15, 0x4b, 0x8c, 0xa5, 0x2c, 0xb1, 0x0a, 0x66, 0xd1, 0x51, 0x8c, 0xe2, 0x2f, 0xbc, 0x09, 0x8c, 0xdf, 0x9a, 0x25, 0x66, 0x0a, 0x96, 0xd8, 0x04, 0xa7, 0xee, 0x28, 0x46, 0xf1, 0xd7, 0xbc, 0xf1,
0x1f, 0xc4, 0x66, 0x8f, 0x0a, 0x28, 0x3e, 0xda, 0x26, 0xb0, 0xc8, 0x47, 0x2e, 0x6f, 0xfe, 0xf4, 0x13, 0x0f, 0x62, 0x67, 0x40, 0x25, 0xfc, 0x9e, 0x6e, 0xe3, 0x57, 0xe7, 0xa3, 0x80, 0x37, 0x7c,
0x67, 0x8f, 0xf8, 0x45, 0x7e, 0xcc, 0x2b, 0x4f, 0xff, 0x90, 0xa1, 0x3a, 0xfd, 0x77, 0xbc, 0x30, 0xe6, 0xb3, 0xa7, 0xfc, 0x22, 0xbf, 0xe4, 0x95, 0x67, 0x78, 0xc8, 0x44, 0xdd, 0xfd, 0x67, 0xbc,
0xe4, 0x84, 0xbe, 0xb9, 0xdd, 0xff, 0x67, 0x05, 0xaa, 0x69, 0x97, 0x0c, 0xc6, 0x8f, 0x45, 0x09, 0x30, 0x54, 0x84, 0xbe, 0x75, 0x8b, 0xff, 0xcf, 0x06, 0x34, 0x8b, 0x2e, 0x19, 0x8f, 0x19, 0xeb,
0xf7, 0x63, 0x25, 0x22, 0xc6, 0xc4, 0xf3, 0xe7, 0xf8, 0xbe, 0xd3, 0x21, 0xf1, 0xa8, 0xe7, 0xa4, 0x12, 0xee, 0xc7, 0x5a, 0x44, 0xcc, 0xc8, 0xe7, 0xcf, 0x8f, 0x63, 0x3f, 0x24, 0x62, 0xb0, 0x73,
0x77, 0x5a, 0x6f, 0x86, 0x81, 0xeb, 0x39, 0xef, 0xec, 0x4e, 0x8f, 0x28, 0xf1, 0xf2, 0x04, 0xae, 0x39, 0xb8, 0x6a, 0x75, 0xd2, 0x24, 0x88, 0xfc, 0xcf, 0xbc, 0x70, 0x40, 0xb4, 0x78, 0x79, 0x17,
0x9f, 0xda, 0x2d, 0xf2, 0xd6, 0xda, 0x17, 0xd0, 0xbb, 0x5c, 0x30, 0x61, 0x46, 0x3f, 0x81, 0xc9, 0x1e, 0x5e, 0x79, 0x5d, 0xf2, 0xa9, 0x7b, 0x22, 0xe1, 0xf6, 0x68, 0xc1, 0x9c, 0x19, 0xfd, 0x04,
0xc0, 0xef, 0x90, 0x7d, 0x72, 0x41, 0x3a, 0xb5, 0x71, 0x2e, 0xb9, 0x92, 0x93, 0xdc, 0xf3, 0xc2, 0xe6, 0x93, 0x38, 0x24, 0x27, 0xe4, 0x96, 0x84, 0xf6, 0x2c, 0x97, 0xdc, 0xa8, 0x48, 0x1e, 0x47,
0xc7, 0x8f, 0x62, 0xc1, 0x3e, 0x37, 0x7a, 0x00, 0x15, 0xf2, 0xb9, 0x36, 0x31, 0xc4, 0x69, 0x15, 0xe9, 0xcb, 0x17, 0x42, 0x70, 0xc8, 0x8d, 0xde, 0x81, 0x06, 0xf9, 0xca, 0x9e, 0x9b, 0xe0, 0xb4,
0xf2, 0x39, 0xea, 0x0f, 0x75, 0x56, 0x62, 0x14, 0xff, 0xa8, 0x0f, 0x96, 0x9f, 0x9f, 0xb0, 0x30, 0x06, 0xf9, 0x2a, 0xeb, 0x09, 0x4d, 0x56, 0x62, 0x14, 0xff, 0x68, 0x08, 0x93, 0x3f, 0xb8, 0x64,
0xb0, 0x5b, 0xe1, 0x30, 0xfe, 0xfc, 0xb3, 0x01, 0x73, 0x39, 0xa1, 0x12, 0x9b, 0x3f, 0x10, 0xb3, 0x69, 0xe2, 0x75, 0xd3, 0x49, 0xfc, 0xf9, 0x67, 0x0b, 0x9e, 0x54, 0x84, 0x46, 0xd8, 0xfc, 0x1d,
0xb9, 0x46, 0x52, 0x68, 0x4f, 0x64, 0x0b, 0x93, 0x5f, 0x40, 0x3f, 0x80, 0x79, 0x27, 0xdd, 0x84, 0x39, 0x89, 0x6b, 0xe7, 0x85, 0xf6, 0x52, 0xb5, 0x2d, 0xd5, 0x05, 0xf4, 0x03, 0x58, 0xf1, 0x8b,
0xbc, 0xb6, 0xd9, 0x47, 0xee, 0x94, 0x6b, 0x96, 0x6e, 0x09, 0xb7, 0xa1, 0xa6, 0xbf, 0x06, 0xa3, 0x8d, 0xc7, 0x27, 0x1e, 0xfb, 0x92, 0x3b, 0xe5, 0x81, 0x6b, 0x5a, 0xc2, 0x3d, 0xb0, 0xcd, 0xd7,
0xe8, 0xb5, 0xc0, 0x26, 0xea, 0x42, 0x12, 0x69, 0x35, 0xf1, 0x56, 0xe7, 0x25, 0x35, 0x32, 0xf8, 0x60, 0x14, 0x7d, 0x22, 0xb1, 0x89, 0xbe, 0x90, 0x47, 0x9a, 0x2d, 0xdf, 0xea, 0xaa, 0xa4, 0x41,
0x00, 0x6a, 0x4e, 0x3c, 0x68, 0xd8, 0xf3, 0xd4, 0x47, 0xae, 0x6c, 0xc4, 0xa1, 0x5a, 0xb1, 0x92, 0x06, 0x9f, 0x82, 0xed, 0x8b, 0xe1, 0xc2, 0x71, 0xa4, 0x3f, 0x72, 0xa3, 0xc6, 0x1a, 0xba, 0x15,
0xb1, 0xe2, 0x07, 0x58, 0x2e, 0xd8, 0x6f, 0x14, 0x2f, 0xe6, 0xa3, 0xff, 0xcc, 0x42, 0x3c, 0xfe, 0x1b, 0x25, 0x2b, 0x7e, 0x01, 0x4f, 0x6b, 0xf6, 0x9b, 0xc6, 0x8b, 0xf9, 0xe2, 0x3f, 0xcb, 0x20,
0x44, 0x4f, 0xe1, 0x66, 0xab, 0x3f, 0xe7, 0x43, 0xd5, 0x04, 0xa1, 0xa4, 0xe6, 0x96, 0xe6, 0xa2, 0x86, 0x9d, 0xe8, 0x3d, 0x78, 0xdc, 0x1d, 0xce, 0xf6, 0x50, 0x33, 0x47, 0x28, 0x85, 0x29, 0xa5,
0x8e, 0xcc, 0x28, 0x7a, 0x02, 0x93, 0x9f, 0x92, 0x96, 0x1d, 0xcd, 0x0b, 0x26, 0x75, 0xa8, 0x60, 0xb3, 0x66, 0x22, 0x33, 0x8a, 0xde, 0x85, 0xf9, 0xd7, 0x79, 0x9b, 0x8e, 0x56, 0x24, 0x93, 0x3e,
0x2e, 0xe4, 0x89, 0xb1, 0xdc, 0x79, 0xd2, 0xf1, 0x4a, 0x39, 0xb5, 0x5b, 0x96, 0x72, 0xa9, 0xc6, 0x48, 0x70, 0x56, 0xab, 0x44, 0x21, 0x77, 0x93, 0x77, 0xb9, 0x4a, 0x4e, 0xef, 0x90, 0x95, 0x5c,
0x18, 0xbd, 0x80, 0x69, 0x47, 0x1d, 0x0b, 0xa2, 0xa5, 0xc4, 0x4b, 0x99, 0xe1, 0xa2, 0x59, 0xd3, 0xa1, 0x19, 0x46, 0x1f, 0xc2, 0xa2, 0xaf, 0x8f, 0x02, 0xd1, 0x7a, 0xee, 0xa5, 0xd2, 0x40, 0xd1,
0x2f, 0x30, 0x8a, 0x9e, 0xc1, 0x14, 0x53, 0xc6, 0x74, 0x28, 0xb9, 0x5b, 0x66, 0x38, 0x68, 0x2e, 0xb1, 0xcd, 0x0b, 0x8c, 0xa2, 0xf7, 0x61, 0x81, 0x69, 0xa3, 0x39, 0x94, 0xdf, 0xad, 0x34, 0x10,
0x69, 0xe9, 0x8c, 0xa2, 0xdf, 0xc1, 0x92, 0xa3, 0x1f, 0xa7, 0xa1, 0x3b, 0x99, 0x53, 0xf3, 0x03, 0x74, 0xd6, 0x8d, 0x74, 0x46, 0xd1, 0xef, 0x60, 0xdd, 0x37, 0x8f, 0xd0, 0xd0, 0x9b, 0xa5, 0x53,
0x2f, 0x13, 0x0f, 0x62, 0x61, 0x14, 0x9d, 0x4a, 0xef, 0xe7, 0xc7, 0x56, 0xe8, 0x6e, 0x7f, 0x83, 0xab, 0x43, 0x2e, 0x07, 0x8f, 0x63, 0x61, 0x14, 0x5d, 0x29, 0xef, 0x57, 0x47, 0x55, 0xe8, 0xad,
0xc2, 0xb1, 0x9a, 0x79, 0x6f, 0x30, 0x13, 0xa3, 0xe8, 0x0d, 0xa0, 0x30, 0x37, 0x1c, 0x42, 0xab, 0xe1, 0x06, 0xb5, 0xa3, 0x34, 0x67, 0x77, 0x3c, 0x13, 0xa3, 0xe8, 0x15, 0xa0, 0xb4, 0x32, 0x10,
0x42, 0x56, 0x3b, 0xba, 0x32, 0x6f, 0x97, 0xac, 0x32, 0x8a, 0x5a, 0x50, 0x73, 0x0a, 0xa6, 0x22, 0x42, 0x9b, 0x52, 0xd6, 0x38, 0xae, 0x72, 0x9e, 0x8d, 0x58, 0x65, 0x14, 0x75, 0xc1, 0xf6, 0x6b,
0x08, 0xa7, 0x52, 0x4a, 0x3b, 0xd3, 0x31, 0xef, 0x0e, 0xe4, 0x89, 0xf5, 0x76, 0x72, 0xd3, 0x08, 0x26, 0x21, 0x08, 0x17, 0x52, 0xca, 0x38, 0xc7, 0x71, 0xde, 0x1a, 0xcb, 0x23, 0xf4, 0xf6, 0x2b,
0xa9, 0xb7, 0x76, 0x72, 0x22, 0xf5, 0x2e, 0x18, 0x63, 0x1c, 0xc1, 0xbc, 0x93, 0x1f, 0x0d, 0x20, 0x13, 0x08, 0xa5, 0xb7, 0x71, 0x5a, 0xa2, 0xf4, 0xae, 0x19, 0x5d, 0x9c, 0xc3, 0x8a, 0x5f, 0x1d,
0xbd, 0x94, 0x8c, 0xb2, 0xb5, 0xb2, 0x65, 0x5e, 0x60, 0x66, 0xce, 0xd2, 0xfd, 0x39, 0x5a, 0x16, 0x0a, 0x20, 0xb3, 0x94, 0x8a, 0xb2, 0xad, 0x51, 0xcb, 0xbc, 0xc0, 0x2c, 0x5d, 0x17, 0xfb, 0x73,
0x22, 0xf9, 0x59, 0x81, 0x69, 0x16, 0x2d, 0xc9, 0x2b, 0x67, 0x7a, 0x6a, 0xf5, 0xca, 0xf9, 0x6e, 0xf4, 0x54, 0x8a, 0x54, 0xa7, 0x04, 0x8e, 0x53, 0xb7, 0xa4, 0xae, 0x5c, 0xea, 0xa9, 0xf5, 0x2b,
0x5f, 0xbd, 0xb2, 0xae, 0x19, 0x3f, 0x80, 0x39, 0x37, 0xdb, 0xce, 0xa2, 0x15, 0x21, 0xa3, 0x6b, 0x57, 0xbb, 0x7d, 0xfd, 0xca, 0xa6, 0x66, 0xfc, 0x14, 0x9e, 0x04, 0xe5, 0x76, 0x16, 0x6d, 0x48,
0xad, 0xcd, 0xd5, 0xe2, 0xc5, 0x38, 0xa9, 0x65, 0x72, 0xca, 0xa4, 0x56, 0xdb, 0x33, 0x99, 0xd4, 0x19, 0x53, 0x6b, 0xed, 0x6c, 0xd6, 0x2f, 0x8a, 0xa4, 0x56, 0xc9, 0xa9, 0x92, 0x5a, 0x6f, 0xcf,
0xe9, 0x2e, 0x29, 0xe7, 0xcd, 0xa8, 0x35, 0x28, 0xf0, 0xa6, 0xe8, 0x65, 0x0a, 0xbc, 0x29, 0x7b, 0x54, 0x52, 0x17, 0xbb, 0xa4, 0x8a, 0x37, 0xb3, 0xd6, 0xa0, 0xc6, 0x9b, 0xb2, 0x97, 0xa9, 0xf1,
0x8a, 0x67, 0x30, 0xd5, 0x56, 0xd0, 0xb7, 0xcc, 0xf1, 0x0c, 0x7e, 0x97, 0x39, 0x9e, 0x85, 0xea, 0xa6, 0xea, 0x29, 0xde, 0x87, 0x85, 0x9e, 0x86, 0xbe, 0x55, 0x8e, 0x97, 0xf0, 0xbb, 0xca, 0xf1,
0x91, 0xe3, 0xba, 0x69, 0x4c, 0x2b, 0x1d, 0x97, 0x47, 0xce, 0xd2, 0x71, 0x1a, 0x18, 0x8c, 0xde, 0x32, 0x54, 0xcf, 0x1c, 0xd7, 0x2f, 0x62, 0x5a, 0xe5, 0xb8, 0x2a, 0x72, 0x56, 0x8e, 0x33, 0xc0,
0x43, 0xb5, 0xa5, 0xc3, 0xc8, 0x68, 0x3d, 0xa9, 0xa9, 0x05, 0x78, 0xdc, 0xdc, 0x28, 0x67, 0x88, 0x60, 0xf4, 0x39, 0x34, 0xbb, 0x26, 0x8c, 0x8c, 0xb6, 0xf3, 0x9a, 0x5a, 0x83, 0xc7, 0x9d, 0x9d,
0x2d, 0x2e, 0xb5, 0x94, 0x16, 0x57, 0x31, 0xb3, 0xb4, 0x78, 0x0a, 0x18, 0x47, 0xb7, 0xcb, 0xe8, 0xd1, 0x0c, 0xc2, 0xe2, 0x4a, 0x4b, 0x65, 0x71, 0x1d, 0x33, 0x2b, 0x8b, 0x17, 0x80, 0x71, 0x76,
0x24, 0x6f, 0x97, 0xc7, 0xdd, 0xf2, 0x76, 0x1a, 0x88, 0x2d, 0x6a, 0xa1, 0x0e, 0x5d, 0xaa, 0xb5, 0xbb, 0x92, 0x4e, 0xea, 0x76, 0x55, 0xdc, 0xad, 0x6e, 0x67, 0x80, 0xd8, 0xb2, 0x16, 0x9a, 0xd0,
0xb0, 0x00, 0xf9, 0xaa, 0xb5, 0xb0, 0x10, 0xa0, 0xc6, 0xd1, 0x91, 0xc1, 0x87, 0x6a, 0x74, 0xe4, 0xa5, 0x5e, 0x0b, 0x6b, 0x90, 0xaf, 0x5e, 0x0b, 0x6b, 0x01, 0xaa, 0x88, 0x8e, 0x12, 0x3e, 0xd4,
0xf1, 0xa6, 0x1a, 0x1d, 0x3a, 0x60, 0xf9, 0x01, 0x16, 0x99, 0x16, 0xac, 0xa3, 0x8d, 0x4c, 0xcd, 0xa3, 0xa3, 0x8a, 0x37, 0xf5, 0xe8, 0x30, 0x01, 0xcb, 0x2f, 0x60, 0x8d, 0x19, 0xc1, 0x3a, 0xda,
0xcf, 0xb5, 0x0d, 0xe6, 0x9d, 0x01, 0x1c, 0xb1, 0xc6, 0x2c, 0x07, 0xa9, 0xa4, 0xc6, 0x5a, 0x4c, 0x29, 0xd5, 0xfc, 0x4a, 0xdb, 0xe0, 0xbc, 0x39, 0x86, 0x43, 0x68, 0xcc, 0x2a, 0x90, 0x4a, 0x69,
0x2a, 0x35, 0xd6, 0x63, 0x31, 0xf4, 0x6b, 0x58, 0x70, 0x34, 0x20, 0x06, 0x65, 0xeb, 0x4f, 0x06, 0x6c, 0xc4, 0xa4, 0x4a, 0x63, 0x33, 0x16, 0x43, 0xbf, 0x86, 0x55, 0xdf, 0x00, 0x62, 0x50, 0xb9,
0xa8, 0x99, 0xeb, 0xa5, 0xeb, 0x71, 0x74, 0x6a, 0x71, 0x86, 0x8c, 0xce, 0x22, 0x54, 0x23, 0xa3, 0xfe, 0x94, 0x80, 0x9a, 0xb3, 0x3d, 0x72, 0x5d, 0x44, 0xa7, 0x11, 0x67, 0xa8, 0xe8, 0xac, 0x43,
0xb3, 0x10, 0xa6, 0xbc, 0x58, 0x7f, 0x7f, 0xfb, 0x90, 0x12, 0xef, 0x78, 0xaf, 0xa1, 0xfc, 0x55, 0x35, 0x2a, 0x3a, 0x6b, 0x61, 0xca, 0x87, 0xdb, 0x9f, 0x3f, 0x3b, 0xa3, 0x24, 0xba, 0x38, 0x6e,
0xca, 0x85, 0x7e, 0xc6, 0x7f, 0x4f, 0x26, 0x38, 0xe9, 0xf1, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x7f, 0x8c, 0x72, 0xa1, 0x9f, 0xf1, 0xdf, 0xcb, 0x39, 0x4e, 0x7a, 0xf9, 0xdf, 0x00, 0x00,
0x5e, 0xb6, 0x4c, 0x79, 0x9d, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x6c, 0x49, 0xeb, 0x8b, 0x1d, 0x00, 0x00,
} }