group.go 26.2 KB
Newer Older
落凡尘.'s avatar
落凡尘. 已提交
1 2 3
package group

import (
W
wenxu12345 已提交
4
	chat "Open_IM/internal/rpc/msg"
5 6 7 8 9
	"Open_IM/pkg/common/config"
	"Open_IM/pkg/common/constant"
	"Open_IM/pkg/common/db"
	imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
	"Open_IM/pkg/common/log"
W
wenxu12345 已提交
10
	"Open_IM/pkg/common/token_verify"
W
wenxu12345 已提交
11
	cp "Open_IM/pkg/common/utils"
W
wenxu12345 已提交
12
	"Open_IM/pkg/grpc-etcdv3/getcdv3"
13
	pbGroup "Open_IM/pkg/proto/group"
W
wenxu12345 已提交
14
	open_im_sdk "Open_IM/pkg/proto/sdk_ws"
15
	"Open_IM/pkg/utils"
落凡尘.'s avatar
落凡尘. 已提交
16
	"context"
W
wenxu12345 已提交
17 18 19 20 21
	"google.golang.org/grpc"
	"net"
	"strconv"
	"strings"
	"time"
落凡尘.'s avatar
落凡尘. 已提交
22 23
)

W
wenxu12345 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
type groupServer struct {
	rpcPort         int
	rpcRegisterName string
	etcdSchema      string
	etcdAddr        []string
}

func NewGroupServer(port int) *groupServer {
	log.NewPrivateLog("group")
	return &groupServer{
		rpcPort:         port,
		rpcRegisterName: config.Config.RpcRegisterName.OpenImGroupName,
		etcdSchema:      config.Config.Etcd.EtcdSchema,
		etcdAddr:        config.Config.Etcd.EtcdAddr,
	}
}
W
wenxu12345 已提交
40

W
wenxu12345 已提交
41
func (s *groupServer) Run() {
W
wenxu12345 已提交
42
	log.NewInfo("0", "group rpc start ")
W
wenxu12345 已提交
43 44 45 46 47
	ip := utils.ServerIP
	registerAddress := ip + ":" + strconv.Itoa(s.rpcPort)
	//listener network
	listener, err := net.Listen("tcp", registerAddress)
	if err != nil {
W
wenxu12345 已提交
48
		log.NewError("0", "Listen failed ", err.Error(), registerAddress)
W
wenxu12345 已提交
49 50
		return
	}
W
wenxu12345 已提交
51
	log.NewInfo("0", "listen network success, ", registerAddress, listener)
W
wenxu12345 已提交
52 53 54 55 56 57 58 59
	defer listener.Close()
	//grpc server
	srv := grpc.NewServer()
	defer srv.GracefulStop()
	//Service registers with etcd
	pbGroup.RegisterGroupServer(srv, s)
	err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10)
	if err != nil {
W
wenxu12345 已提交
60
		log.NewError("0", "RegisterEtcd failed ", err.Error())
W
wenxu12345 已提交
61 62 63 64
		return
	}
	err = srv.Serve(listener)
	if err != nil {
W
wenxu12345 已提交
65
		log.NewError("0", "Serve failed ", err.Error())
W
wenxu12345 已提交
66 67
		return
	}
W
wenxu12345 已提交
68
	log.NewInfo("0", "group rpc success")
W
wenxu12345 已提交
69 70 71
}

func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
W
wenxu12345 已提交
72
	log.NewInfo(req.OperationID, "CreateGroup, args ", req.String())
W
wenxu12345 已提交
73 74 75
	if !token_verify.CheckAccess(req.OpUserID, req.OwnerUserID) {
		log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.OwnerUserID)
		return &pbGroup.CreateGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
76
	}
W
wenxu12345 已提交
77

W
wenxu12345 已提交
78
	//Time stamp + MD5 to generate group chat id
W
wenxu12345 已提交
79
	groupId := utils.Md5(strconv.FormatInt(time.Now().UnixNano(), 10))
W
wenxu12345 已提交
80
	//to group
W
wenxu12345 已提交
81
	groupInfo := db.Group{}
W
wenxu12345 已提交
82
	utils.CopyStructFields(&groupInfo, req.GroupInfo)
W
wenxu12345 已提交
83
	groupInfo.CreatorUserID = req.OpUserID
W
wenxu12345 已提交
84
	groupInfo.GroupID = groupId
W
wenxu12345 已提交
85
	err := imdb.InsertIntoGroup(groupInfo)
W
wenxu12345 已提交
86
	if err != nil {
W
wenxu12345 已提交
87
		log.NewError(req.OperationID, "InsertIntoGroup failed, ", err.Error(), groupInfo)
W
wenxu12345 已提交
88
		return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
89 90
	}

W
wenxu12345 已提交
91
	us, err := imdb.GetUserByUserID(req.OwnerUserID)
W
wenxu12345 已提交
92
	if err != nil {
W
wenxu12345 已提交
93
		log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID)
W
wenxu12345 已提交
94
		return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
95 96
	}

W
wenxu12345 已提交
97
	//to group member
W
wenxu12345 已提交
98
	groupMember := db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID}
W
wenxu12345 已提交
99
	utils.CopyStructFields(&groupMember, us)
W
wenxu12345 已提交
100
	err = imdb.InsertIntoGroupMember(groupMember)
W
wenxu12345 已提交
101
	if err != nil {
W
wenxu12345 已提交
102
		log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember)
W
wenxu12345 已提交
103
		return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
104 105
	}

W
wenxu12345 已提交
106
	err = db.DB.AddGroupMember(groupId, req.OwnerUserID)
W
wenxu12345 已提交
107
	if err != nil {
W
wenxu12345 已提交
108
		log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), groupId, req.OwnerUserID)
W
wenxu12345 已提交
109
	}
W
wenxu12345 已提交
110
	var okUserIDList []string
W
wenxu12345 已提交
111
	//to group member
W
wenxu12345 已提交
112
	for _, user := range req.InitMemberList {
W
wenxu12345 已提交
113
		us, err := imdb.GetUserByUserID(user.UserID)
W
wenxu12345 已提交
114
		if err != nil {
W
wenxu12345 已提交
115
			log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), user.UserID)
W
wenxu12345 已提交
116 117
			continue
		}
W
wenxu12345 已提交
118
		if user.RoleLevel == constant.GroupOwner {
W
wenxu12345 已提交
119 120 121
			log.NewError(req.OperationID, "only one owner, failed ", user)
			continue
		}
W
wenxu12345 已提交
122
		groupMember.RoleLevel = user.RoleLevel
W
wenxu12345 已提交
123
		utils.CopyStructFields(&groupMember, us)
W
wenxu12345 已提交
124
		err = imdb.InsertIntoGroupMember(groupMember)
W
wenxu12345 已提交
125
		if err != nil {
W
wenxu12345 已提交
126
			log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember)
W
wenxu12345 已提交
127
			continue
W
wenxu12345 已提交
128
		}
W
wenxu12345 已提交
129

W
wenxu12345 已提交
130
		okUserIDList = append(okUserIDList, user.UserID)
W
wenxu12345 已提交
131
		err = db.DB.AddGroupMember(groupId, user.UserID)
W
wenxu12345 已提交
132
		if err != nil {
W
wenxu12345 已提交
133
			log.NewError(req.OperationID, "add mongo group member failed, db.DB.AddGroupMember failed ", err.Error())
W
wenxu12345 已提交
134 135 136
		}
	}

W
wenxu12345 已提交
137
	resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}}
W
wenxu12345 已提交
138
	group, err := imdb.GetGroupInfoByGroupID(groupId)
W
wenxu12345 已提交
139
	if err != nil {
W
wenxu12345 已提交
140
		log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId)
W
wenxu12345 已提交
141 142
		resp.ErrCode = constant.ErrDB.ErrCode
		resp.ErrMsg = constant.ErrDB.ErrMsg
W
wenxu12345 已提交
143 144 145
		return resp, nil
	}
	utils.CopyStructFields(resp.GroupInfo, group)
W
wenxu12345 已提交
146 147 148 149 150 151 152
	resp.GroupInfo.MemberCount, err = imdb.GetGroupMemberNumByGroupID(groupId)
	if err != nil {
		log.NewError(req.OperationID, "GetGroupMemberNumByGroupID failed ", err.Error(), groupId)
		resp.ErrCode = constant.ErrDB.ErrCode
		resp.ErrMsg = constant.ErrDB.ErrMsg
		return resp, nil
	}
W
wenxu12345 已提交
153 154
	resp.GroupInfo.OwnerUserID = req.OwnerUserID

W
wenxu12345 已提交
155
	log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String())
W
wenxu12345 已提交
156
	chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList)
W
wenxu12345 已提交
157
	return resp, nil
W
wenxu12345 已提交
158 159
}

落凡尘.'s avatar
落凡尘. 已提交
160
func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJoinedGroupListReq) (*pbGroup.GetJoinedGroupListResp, error) {
W
wenxu12345 已提交
161 162 163
	log.NewInfo(req.OperationID, "GetJoinedGroupList, args ", req.String())
	if !token_verify.CheckAccess(req.OpUserID, req.FromUserID) {
		log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.FromUserID)
W
wenxu12345 已提交
164
		return &pbGroup.GetJoinedGroupListResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
落凡尘.'s avatar
落凡尘. 已提交
165
	}
W
wenxu12345 已提交
166
	//group list
W
wenxu12345 已提交
167
	joinedGroupList, err := imdb.GetJoinedGroupIDListByUserID(req.FromUserID)
落凡尘.'s avatar
落凡尘. 已提交
168
	if err != nil {
W
wenxu12345 已提交
169
		log.NewError(req.OperationID, "GetJoinedGroupIDListByUserID failed ", err.Error(), req.FromUserID)
W
wenxu12345 已提交
170
		return &pbGroup.GetJoinedGroupListResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
落凡尘.'s avatar
落凡尘. 已提交
171 172 173 174
	}

	var resp pbGroup.GetJoinedGroupListResp
	for _, v := range joinedGroupList {
W
wenxu12345 已提交
175
		var groupNode open_im_sdk.GroupInfo
W
wenxu12345 已提交
176
		num, err := imdb.GetGroupMemberNumByGroupID(v)
W
wenxu12345 已提交
177 178
		owner, err2 := imdb.GetGroupOwnerInfoByGroupID(v)
		group, err := imdb.GetGroupInfoByGroupID(v)
W
wenxu12345 已提交
179 180
		if num > 0 && owner != nil && err2 == nil && group != nil && err == nil {
			utils.CopyStructFields(&groupNode, group)
W
wenxu12345 已提交
181
			groupNode.CreateTime = uint32(group.CreateTime.Unix())
W
wenxu12345 已提交
182
			groupNode.MemberCount = uint32(num)
W
wenxu12345 已提交
183
			groupNode.OwnerUserID = owner.UserID
落凡尘.'s avatar
落凡尘. 已提交
184
			resp.GroupList = append(resp.GroupList, &groupNode)
W
wenxu12345 已提交
185 186 187
		} else {
			log.NewError(req.OperationID, "check nil ", num, owner, err, group)
			continue
落凡尘.'s avatar
落凡尘. 已提交
188
		}
W
wenxu12345 已提交
189
		log.NewDebug(req.OperationID, "joinedGroup ", groupNode)
落凡尘.'s avatar
落凡尘. 已提交
190
	}
W
wenxu12345 已提交
191
	log.NewInfo(req.OperationID, "GetJoinedGroupList rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
192 193 194 195
	return &resp, nil
}

func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) {
W
wenxu12345 已提交
196 197
	log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String())

W
wenxu12345 已提交
198
	if !imdb.IsExistGroupMember(req.GroupID, req.OpUserID) && !token_verify.IsMangerUserID(req.OpUserID) {
W
wenxu12345 已提交
199
		log.NewError(req.OperationID, "no permission InviteUserToGroup ", req.GroupID, req.OpUserID)
W
wenxu12345 已提交
200
		return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
落凡尘.'s avatar
落凡尘. 已提交
201 202
	}

W
wenxu12345 已提交
203 204
	_, err := imdb.GetGroupInfoByGroupID(req.GroupID)
	if err != nil {
W
wenxu12345 已提交
205
		log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", req.GroupID, err)
W
wenxu12345 已提交
206
		return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
207
	}
落凡尘.'s avatar
落凡尘. 已提交
208 209 210 211
	//
	//from User:  invite: applicant
	//to user:  invite: invited
	var resp pbGroup.InviteUserToGroupResp
W
wenxu12345 已提交
212
	var okUserIDList []string
W
wenxu12345 已提交
213
	for _, v := range req.InvitedUserIDList {
落凡尘.'s avatar
落凡尘. 已提交
214
		var resultNode pbGroup.Id2Result
W
wenxu12345 已提交
215
		resultNode.UserID = v
落凡尘.'s avatar
落凡尘. 已提交
216
		resultNode.Result = 0
W
wenxu12345 已提交
217
		toUserInfo, err := imdb.GetUserByUserID(v)
落凡尘.'s avatar
落凡尘. 已提交
218
		if err != nil {
W
wenxu12345 已提交
219
			log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v)
落凡尘.'s avatar
落凡尘. 已提交
220
			resultNode.Result = -1
W
wenxu12345 已提交
221
			resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
落凡尘.'s avatar
落凡尘. 已提交
222 223
			continue
		}
落凡尘.'s avatar
落凡尘. 已提交
224 225

		if imdb.IsExistGroupMember(req.GroupID, v) {
W
wenxu12345 已提交
226
			log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v)
落凡尘.'s avatar
落凡尘. 已提交
227
			resultNode.Result = -1
W
wenxu12345 已提交
228
			resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
落凡尘.'s avatar
落凡尘. 已提交
229 230
			continue
		}
W
wenxu12345 已提交
231
		var toInsertInfo db.GroupMember
W
wenxu12345 已提交
232 233
		utils.CopyStructFields(&toInsertInfo, toUserInfo)
		toInsertInfo.GroupID = req.GroupID
W
wenxu12345 已提交
234
		toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers
W
wenxu12345 已提交
235
		toInsertInfo.OperatorUserID = req.OpUserID
W
wenxu12345 已提交
236
		err = imdb.InsertIntoGroupMember(toInsertInfo)
落凡尘.'s avatar
落凡尘. 已提交
237
		if err != nil {
W
wenxu12345 已提交
238
			log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL)
落凡尘.'s avatar
落凡尘. 已提交
239
			resultNode.Result = -1
W
wenxu12345 已提交
240
			resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
落凡尘.'s avatar
落凡尘. 已提交
241 242
			continue
		}
W
wenxu12345 已提交
243
		okUserIDList = append(okUserIDList, v)
W
wenxu12345 已提交
244
		err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID)
落凡尘.'s avatar
落凡尘. 已提交
245
		if err != nil {
W
wenxu12345 已提交
246
			log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID)
落凡尘.'s avatar
落凡尘. 已提交
247
		}
W
wenxu12345 已提交
248
		resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
落凡尘.'s avatar
落凡尘. 已提交
249 250
	}

W
wenxu12345 已提交
251
	chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList)
W
wenxu12345 已提交
252
	resp.ErrCode = 0
W
wenxu12345 已提交
253
	log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
254 255 256 257
	return &resp, nil
}

func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) {
W
wenxu12345 已提交
258
	log.NewInfo(req.OperationID, "GetGroupAllMember, args ", req.String())
落凡尘.'s avatar
落凡尘. 已提交
259
	var resp pbGroup.GetGroupAllMemberResp
W
wenxu12345 已提交
260
	memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID)
落凡尘.'s avatar
落凡尘. 已提交
261
	if err != nil {
W
wenxu12345 已提交
262 263
		resp.ErrCode = constant.ErrDB.ErrCode
		resp.ErrMsg = constant.ErrDB.ErrMsg
W
wenxu12345 已提交
264
		log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID)
落凡尘.'s avatar
落凡尘. 已提交
265 266
		return &resp, nil
	}
W
wenxu12345 已提交
267

落凡尘.'s avatar
落凡尘. 已提交
268
	for _, v := range memberList {
W
wenxu12345 已提交
269
		var node open_im_sdk.GroupMemberFullInfo
W
wenxu12345 已提交
270
		utils.CopyStructFields(&node, &v)
落凡尘.'s avatar
落凡尘. 已提交
271
		resp.MemberList = append(resp.MemberList, &node)
W
wenxu12345 已提交
272
	}
W
wenxu12345 已提交
273
	log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
274 275 276 277
	return &resp, nil
}

func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGroupMemberListReq) (*pbGroup.GetGroupMemberListResp, error) {
W
wenxu12345 已提交
278
	log.NewInfo(req.OperationID, "GetGroupMemberList args ", req.String())
落凡尘.'s avatar
落凡尘. 已提交
279
	var resp pbGroup.GetGroupMemberListResp
W
wenxu12345 已提交
280
	memberList, err := imdb.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30)
落凡尘.'s avatar
落凡尘. 已提交
281
	if err != nil {
W
wenxu12345 已提交
282
		resp.ErrCode = constant.ErrDB.ErrCode
W
wenxu12345 已提交
283
		resp.ErrMsg = constant.ErrDB.ErrMsg
W
wenxu12345 已提交
284
		log.NewError(req.OperationID, "GetGroupMemberByGroupId failed,", req.GroupID, req.Filter, req.NextSeq, 30)
落凡尘.'s avatar
落凡尘. 已提交
285 286 287 288
		return &resp, nil
	}

	for _, v := range memberList {
W
wenxu12345 已提交
289
		var node open_im_sdk.GroupMemberFullInfo
W
wenxu12345 已提交
290
		utils.CopyStructFields(&node, &v)
落凡尘.'s avatar
落凡尘. 已提交
291 292 293 294 295 296 297 298 299
		resp.MemberList = append(resp.MemberList, &node)
	}
	//db operate  get db sorted by join time
	if int32(len(memberList)) < 30 {
		resp.NextSeq = 0
	} else {
		resp.NextSeq = req.NextSeq + int32(len(memberList))
	}

W
wenxu12345 已提交
300
	resp.ErrCode = 0
W
wenxu12345 已提交
301
	log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
302 303 304 305
	return &resp, nil
}

func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) {
W
wenxu12345 已提交
306
	log.NewInfo(req.OperationID, "KickGroupMember args ", req.String())
W
wenxu12345 已提交
307
	ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID)
落凡尘.'s avatar
落凡尘. 已提交
308
	if err != nil {
W
wenxu12345 已提交
309
		log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID)
W
wenxu12345 已提交
310
		return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
落凡尘.'s avatar
落凡尘. 已提交
311 312 313 314
	}
	//op is group owner?
	var flag = 0
	for _, v := range ownerList {
W
wenxu12345 已提交
315
		if v.UserID == req.OpUserID {
落凡尘.'s avatar
落凡尘. 已提交
316
			flag = 1
W
wenxu12345 已提交
317
			log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID)
落凡尘.'s avatar
落凡尘. 已提交
318 319 320
			break
		}
	}
W
wenxu12345 已提交
321

W
wenxu12345 已提交
322
	//op is app manager
programor_guo's avatar
programor_guo 已提交
323
	if flag != 1 {
W
wenxu12345 已提交
324
		if token_verify.IsMangerUserID(req.OpUserID) {
programor_guo's avatar
programor_guo 已提交
325
			flag = 1
W
wenxu12345 已提交
326
			log.NewDebug(req.OperationID, "is app manager ", req.OpUserID)
programor_guo's avatar
programor_guo 已提交
327 328 329
		}
	}

落凡尘.'s avatar
落凡尘. 已提交
330
	if flag != 1 {
W
wenxu12345 已提交
331
		log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID)
W
wenxu12345 已提交
332
		return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
落凡尘.'s avatar
落凡尘. 已提交
333 334
	}

W
wenxu12345 已提交
335
	if len(req.KickedUserIDList) == 0 {
W
wenxu12345 已提交
336
		log.NewError(req.OperationID, "failed, kick list 0")
W
wenxu12345 已提交
337
		return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil
落凡尘.'s avatar
落凡尘. 已提交
338
	}
W
wenxu12345 已提交
339

W
wenxu12345 已提交
340 341
	groupOwnerUserID := ""
	for _, v := range ownerList {
W
wenxu12345 已提交
342
		if v.RoleLevel == constant.GroupOwner {
W
wenxu12345 已提交
343 344 345 346
			groupOwnerUserID = v.UserID
		}
	}

W
wenxu12345 已提交
347
	var okUserIDList []string
落凡尘.'s avatar
落凡尘. 已提交
348 349
	//remove
	var resp pbGroup.KickGroupMemberResp
W
wenxu12345 已提交
350
	for _, v := range req.KickedUserIDList {
落凡尘.'s avatar
落凡尘. 已提交
351
		//owner cant kicked
W
wenxu12345 已提交
352 353 354
		if v == groupOwnerUserID {
			log.NewError(req.OperationID, "failed, can't kick owner ", v)
			resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
落凡尘.'s avatar
落凡尘. 已提交
355 356
			continue
		}
W
wenxu12345 已提交
357
		err := imdb.RemoveGroupMember(req.GroupID, v)
落凡尘.'s avatar
落凡尘. 已提交
358
		if err != nil {
W
wenxu12345 已提交
359 360
			log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v)
			resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
落凡尘.'s avatar
落凡尘. 已提交
361
		} else {
W
wenxu12345 已提交
362
			log.NewDebug(req.OperationID, "kicked ", v)
W
wenxu12345 已提交
363
			resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0})
W
wenxu12345 已提交
364
			okUserIDList = append(okUserIDList, v)
落凡尘.'s avatar
落凡尘. 已提交
365
		}
W
wenxu12345 已提交
366

W
wenxu12345 已提交
367
		err = db.DB.DelGroupMember(req.GroupID, v)
落凡尘.'s avatar
落凡尘. 已提交
368
		if err != nil {
W
wenxu12345 已提交
369
			log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v)
落凡尘.'s avatar
落凡尘. 已提交
370
		}
落凡尘.'s avatar
落凡尘. 已提交
371
	}
W
wenxu12345 已提交
372 373
	chat.MemberKickedNotification(req, okUserIDList)
	log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
374 375 376 377
	return &resp, nil
}

func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetGroupMembersInfoReq) (*pbGroup.GetGroupMembersInfoResp, error) {
W
wenxu12345 已提交
378 379
	log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String())

落凡尘.'s avatar
落凡尘. 已提交
380 381 382
	var resp pbGroup.GetGroupMembersInfoResp

	for _, v := range req.MemberList {
W
wenxu12345 已提交
383
		var memberNode open_im_sdk.GroupMemberFullInfo
W
wenxu12345 已提交
384
		memberInfo, err := imdb.GetMemberInfoByID(req.GroupID, v)
W
wenxu12345 已提交
385
		memberNode.UserID = v
落凡尘.'s avatar
落凡尘. 已提交
386
		if err != nil {
W
wenxu12345 已提交
387
			log.NewError(req.OperationID, "GetMemberInfoById failed ", err.Error(), req.GroupID, v)
落凡尘.'s avatar
落凡尘. 已提交
388
			continue
W
wenxu12345 已提交
389 390
		} else {
			utils.CopyStructFields(&memberNode, memberInfo)
W
wenxu12345 已提交
391
			memberNode.JoinTime = memberInfo.JoinTime.Unix()
W
wenxu12345 已提交
392
			resp.MemberList = append(resp.MemberList, &memberNode)
落凡尘.'s avatar
落凡尘. 已提交
393 394
		}
	}
W
wenxu12345 已提交
395
	resp.ErrCode = 0
W
wenxu12345 已提交
396
	log.NewInfo(req.OperationID, "GetGroupMembersInfo rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
397 398
	return &resp, nil
}
W
wenxu12345 已提交
399

W
wenxu12345 已提交
400 401
func (s *groupServer) GetGroupApplicationList(_ context.Context, req *pbGroup.GetGroupApplicationListReq) (*pbGroup.GetGroupApplicationListResp, error) {
	log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String())
W
wenxu12345 已提交
402
	reply, err := imdb.GetGroupApplicationList(req.FromUserID)
W
wenxu12345 已提交
403
	if err != nil {
W
wenxu12345 已提交
404
		log.NewError(req.OperationID, "GetGroupApplicationList failed ", err.Error(), req.FromUserID)
W
wenxu12345 已提交
405 406
		return &pbGroup.GetGroupApplicationListResp{ErrCode: 701, ErrMsg: "GetGroupApplicationList failed"}, nil
	}
W
wenxu12345 已提交
407

W
wenxu12345 已提交
408
	log.NewDebug(req.OperationID, "GetGroupApplicationList reply ", reply)
W
wenxu12345 已提交
409 410
	resp := pbGroup.GetGroupApplicationListResp{}
	for _, v := range reply {
W
wenxu12345 已提交
411 412 413 414 415 416 417 418 419 420 421 422
		node := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}, GroupInfo: &open_im_sdk.GroupInfo{}}
		group, err := imdb.GetGroupInfoByGroupID(v.GroupID)
		if err != nil {
			log.Error(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), v.GroupID)
			continue
		}
		user, err := imdb.GetUserByUserID(v.UserID)
		if err != nil {
			log.Error(req.OperationID, "GetUserByUserID failed ", err.Error(), v.UserID)
			continue
		}

W
wenxu12345 已提交
423
		cp.GroupRequestDBCopyOpenIM(&node, &v)
W
wenxu12345 已提交
424
		cp.UserDBCopyOpenIMPublicUser(node.UserInfo, user)
W
wenxu12345 已提交
425
		cp.GroupDBCopyOpenIM(node.GroupInfo, group)
W
wenxu12345 已提交
426
		log.NewDebug(req.OperationID, "node ", node, "v ", v)
W
wenxu12345 已提交
427
		resp.GroupRequestList = append(resp.GroupRequestList, &node)
W
wenxu12345 已提交
428 429 430
	}
	log.NewInfo(req.OperationID, "GetGroupMembersInfo rpc return ", resp)
	return &resp, nil
W
wenxu12345 已提交
431 432 433
}

func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbGroup.GetGroupsInfoReq) (*pbGroup.GetGroupsInfoResp, error) {
W
wenxu12345 已提交
434 435
	log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String())
	groupsInfoList := make([]*open_im_sdk.GroupInfo, 0)
W
wenxu12345 已提交
436
	for _, groupID := range req.GroupIDList {
W
wenxu12345 已提交
437
		groupInfoFromMysql, err := imdb.GetGroupInfoByGroupID(groupID)
W
wenxu12345 已提交
438
		if err != nil {
W
wenxu12345 已提交
439
			log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupID)
W
wenxu12345 已提交
440 441
			continue
		}
W
wenxu12345 已提交
442
		var groupInfo open_im_sdk.GroupInfo
W
wenxu12345 已提交
443
		cp.GroupDBCopyOpenIM(&groupInfo, groupInfoFromMysql)
W
wenxu12345 已提交
444 445
		groupsInfoList = append(groupsInfoList, &groupInfo)
	}
W
wenxu12345 已提交
446 447 448 449

	resp := pbGroup.GetGroupsInfoResp{GroupInfoList: groupsInfoList}
	log.NewInfo(req.OperationID, "GetGroupsInfo rpc return ", resp)
	return &resp, nil
W
wenxu12345 已提交
450 451
}

W
wenxu12345 已提交
452
func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.GroupApplicationResponseReq) (*pbGroup.GroupApplicationResponseResp, error) {
W
wenxu12345 已提交
453
	log.NewInfo(req.OperationID, "GroupApplicationResponse args ", req.String())
W
wenxu12345 已提交
454

W
wenxu12345 已提交
455
	groupRequest := db.GroupRequest{}
W
wenxu12345 已提交
456
	utils.CopyStructFields(&groupRequest, req)
W
wenxu12345 已提交
457 458
	groupRequest.UserID = req.FromUserID
	groupRequest.HandleUserID = req.OpUserID
W
wenxu12345 已提交
459
	groupRequest.HandledTime = time.Now()
W
wenxu12345 已提交
460 461 462 463
	if !token_verify.IsMangerUserID(req.OpUserID) && !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) {
		log.NewError(req.OperationID, "IsMangerUserID IsGroupOwnerAdmin false ", req.GroupID, req.OpUserID)
		return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
	}
W
wenxu12345 已提交
464
	err := imdb.UpdateGroupRequest(groupRequest)
W
wenxu12345 已提交
465
	if err != nil {
W
wenxu12345 已提交
466
		//{openIM002 7836e478bc43ce1d3b8889cac983f59b 1  ok 0001-01-01 00:00:00 +0000 UTC openIM001 0001-01-01 00:00:00 +0000 UTC }
W
wenxu12345 已提交
467
		log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), groupRequest)
W
wenxu12345 已提交
468
		return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
469
	}
W
wenxu12345 已提交
470

W
wenxu12345 已提交
471 472 473 474 475
	if req.HandleResult == constant.GroupResponseAgree {
		user, err := imdb.GetUserByUserID(req.FromUserID)
		if err != nil {
			log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), req.FromUserID)
			return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
476
		}
W
wenxu12345 已提交
477 478 479 480 481
		member := db.GroupMember{}
		member.GroupID = req.GroupID
		member.UserID = req.FromUserID
		member.RoleLevel = constant.GroupOrdinaryUsers
		member.OperatorUserID = req.OpUserID
W
wenxu12345 已提交
482
		member.FaceURL = user.FaceURL
W
wenxu12345 已提交
483 484 485 486 487 488 489 490
		member.Nickname = user.Nickname

		err = imdb.InsertIntoGroupMember(member)
		if err != nil {
			log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), member)
			return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
		}
		chat.GroupApplicationAcceptedNotification(req)
W
wenxu12345 已提交
491
		chat.MemberEnterNotification(req)
W
wenxu12345 已提交
492 493 494 495 496
	} else if req.HandleResult == constant.GroupResponseRefuse {
		chat.GroupApplicationRejectedNotification(req)
	} else {
		log.Error(req.OperationID, "HandleResult failed ", req.HandleResult)
		return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil
W
wenxu12345 已提交
497 498
	}

W
wenxu12345 已提交
499
	log.NewInfo(req.OperationID, "rpc GroupApplicationResponse return ", pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{}})
W
wenxu12345 已提交
500
	return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{}}, nil
W
wenxu12345 已提交
501 502
}

W
wenxu12345 已提交
503
func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) {
W
wenxu12345 已提交
504
	log.NewInfo(req.OperationID, "JoinGroup args ", req.String())
W
wenxu12345 已提交
505
	_, err := imdb.GetUserByUserID(req.OpUserID)
W
wenxu12345 已提交
506
	if err != nil {
W
wenxu12345 已提交
507
		log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OpUserID)
W
wenxu12345 已提交
508
		return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
509 510
	}

W
wenxu12345 已提交
511
	var groupRequest db.GroupRequest
W
wenxu12345 已提交
512 513 514 515
	groupRequest.UserID = req.OpUserID
	groupRequest.ReqMsg = req.ReqMessage
	groupRequest.GroupID = req.GroupID

W
wenxu12345 已提交
516
	err = imdb.InsertIntoGroupRequest(groupRequest)
W
wenxu12345 已提交
517 518
	if err != nil {
		log.NewError(req.OperationID, "UpdateGroupRequest ", err.Error(), groupRequest)
W
wenxu12345 已提交
519
		return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
520 521
	}

W
wenxu12345 已提交
522 523 524
	_, err = imdb.GetGroupMemberListByGroupIDAndRoleLevel(req.GroupID, constant.GroupOwner)
	if err != nil {
		log.NewError(req.OperationID, "GetGroupMemberListByGroupIDAndRoleLevel failed ", err.Error(), req.GroupID, constant.GroupOwner)
W
wenxu12345 已提交
525
		return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
W
wenxu12345 已提交
526
	}
W
wenxu12345 已提交
527

W
wenxu12345 已提交
528
	chat.JoinGroupApplicationNotification(req)
W
wenxu12345 已提交
529

W
wenxu12345 已提交
530
	log.NewInfo(req.OperationID, "ReceiveJoinApplicationNotification rpc return ")
W
wenxu12345 已提交
531
	return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
W
wenxu12345 已提交
532 533
}

W
wenxu12345 已提交
534
func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) (*pbGroup.QuitGroupResp, error) {
W
wenxu12345 已提交
535
	log.NewError(req.OperationID, "QuitGroup args ", req.String())
W
wenxu12345 已提交
536
	_, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID)
W
wenxu12345 已提交
537
	if err != nil {
W
wenxu12345 已提交
538
		log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), req.GroupID, req.OpUserID)
W
wenxu12345 已提交
539
		return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
540 541
	}

W
wenxu12345 已提交
542
	err = imdb.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, req.OpUserID)
W
wenxu12345 已提交
543 544
	if err != nil {
		log.NewError(req.OperationID, "DeleteGroupMemberByGroupIdAndUserId failed ", err.Error(), req.GroupID, req.OpUserID)
W
wenxu12345 已提交
545
		return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
546 547 548 549 550 551 552 553
	}

	err = db.DB.DelGroupMember(req.GroupID, req.OpUserID)
	if err != nil {
		log.NewError(req.OperationID, "DelGroupMember failed ", req.GroupID, req.OpUserID)
		//	return &pbGroup.CommonResp{ErrorCode: constant.ErrQuitGroup.ErrCode, ErrorMsg: constant.ErrQuitGroup.ErrMsg}, nil
	}

W
wenxu12345 已提交
554
	chat.MemberQuitNotification(req)
W
wenxu12345 已提交
555
	log.NewInfo(req.OperationID, "rpc QuitGroup return ", pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}})
W
wenxu12345 已提交
556
	return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
W
wenxu12345 已提交
557 558 559 560 561 562
}

func hasAccess(req *pbGroup.SetGroupInfoReq) bool {
	if utils.IsContain(req.OpUserID, config.Config.Manager.AppManagerUid) {
		return true
	}
W
wenxu12345 已提交
563
	groupUserInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupInfo.GroupID, req.OpUserID)
W
wenxu12345 已提交
564
	if err != nil {
W
wenxu12345 已提交
565
		log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed, ", err.Error(), req.GroupInfo.GroupID, req.OpUserID)
W
wenxu12345 已提交
566 567 568
		return false

	}
W
wenxu12345 已提交
569
	if groupUserInfo.RoleLevel == constant.GroupOwner || groupUserInfo.RoleLevel == constant.GroupAdmin {
W
wenxu12345 已提交
570 571
		return true
	}
W
wenxu12345 已提交
572
	return false
W
wenxu12345 已提交
573 574
}

W
wenxu12345 已提交
575
func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInfoReq) (*pbGroup.SetGroupInfoResp, error) {
W
wenxu12345 已提交
576 577
	log.NewInfo(req.OperationID, "SetGroupInfo args ", req.String())
	if !hasAccess(req) {
W
wenxu12345 已提交
578
		log.NewError(req.OperationID, "no access ", req)
W
wenxu12345 已提交
579
		return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
580 581
	}

W
wenxu12345 已提交
582
	group, err := imdb.GetGroupInfoByGroupID(req.GroupInfo.GroupID)
W
wenxu12345 已提交
583
	if err != nil {
W
wenxu12345 已提交
584
		log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), req.GroupInfo.GroupID)
W
wenxu12345 已提交
585
		return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
586 587
	}

W
wenxu12345 已提交
588
	////bitwise operators: 0001:groupName; 0010:Notification  0100:Introduction; 1000:FaceUrl; 10000:owner
W
wenxu12345 已提交
589
	var changedType int32
W
wenxu12345 已提交
590
	if group.GroupName != req.GroupInfo.GroupName && req.GroupInfo.GroupName != "" {
W
wenxu12345 已提交
591 592
		changedType = 1
	}
W
wenxu12345 已提交
593
	if group.Notification != req.GroupInfo.Notification && req.GroupInfo.Notification != "" {
W
wenxu12345 已提交
594 595
		changedType = changedType | (1 << 1)
	}
W
wenxu12345 已提交
596
	if group.Introduction != req.GroupInfo.Introduction && req.GroupInfo.Introduction != "" {
W
wenxu12345 已提交
597 598
		changedType = changedType | (1 << 2)
	}
W
wenxu12345 已提交
599
	if group.FaceURL != req.GroupInfo.FaceURL && req.GroupInfo.FaceURL != "" {
W
wenxu12345 已提交
600 601 602
		changedType = changedType | (1 << 3)
	}
	//only administrators can set group information
W
wenxu12345 已提交
603
	var groupInfo db.Group
W
wenxu12345 已提交
604 605 606
	utils.CopyStructFields(&groupInfo, req.GroupInfo)
	err = imdb.SetGroupInfo(groupInfo)
	if err != nil {
W
wenxu12345 已提交
607
		log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), groupInfo)
W
wenxu12345 已提交
608
		return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
609
	}
W
wenxu12345 已提交
610
	log.NewInfo(req.OperationID, "SetGroupInfo rpc return ", pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}})
W
wenxu12345 已提交
611
	if changedType != 0 {
W
wenxu12345 已提交
612
		chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID)
W
wenxu12345 已提交
613
	}
W
wenxu12345 已提交
614
	return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil
W
wenxu12345 已提交
615 616
}

W
wenxu12345 已提交
617
func (s *groupServer) TransferGroupOwner(_ context.Context, req *pbGroup.TransferGroupOwnerReq) (*pbGroup.TransferGroupOwnerResp, error) {
W
wenxu12345 已提交
618
	log.NewInfo(req.OperationID, "TransferGroupOwner ", req.String())
W
wenxu12345 已提交
619

W
wenxu12345 已提交
620
	if req.OldOwnerUserID == req.NewOwnerUserID {
W
wenxu12345 已提交
621
		log.NewError(req.OperationID, "same owner ", req.OldOwnerUserID, req.NewOwnerUserID)
W
wenxu12345 已提交
622 623
		return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil
	}
W
wenxu12345 已提交
624
	groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.OldOwnerUserID, RoleLevel: constant.GroupOrdinaryUsers}
W
wenxu12345 已提交
625 626
	err := imdb.UpdateGroupMemberInfo(groupMemberInfo)
	if err != nil {
W
wenxu12345 已提交
627
		log.NewError(req.OperationID, "UpdateGroupMemberInfo failed ", groupMemberInfo)
W
wenxu12345 已提交
628 629
		return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
	}
W
wenxu12345 已提交
630
	groupMemberInfo = db.GroupMember{GroupID: req.GroupID, UserID: req.NewOwnerUserID, RoleLevel: constant.GroupOwner}
W
wenxu12345 已提交
631
	err = imdb.UpdateGroupMemberInfo(groupMemberInfo)
W
wenxu12345 已提交
632
	if err != nil {
W
wenxu12345 已提交
633
		log.NewError(req.OperationID, "UpdateGroupMemberInfo failed ", groupMemberInfo)
W
wenxu12345 已提交
634
		return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
635
	}
W
wenxu12345 已提交
636
	chat.GroupOwnerTransferredNotification(req)
W
wenxu12345 已提交
637 638 639

	return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil

W
wenxu12345 已提交
640
}