group.go 29.7 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
	"net"
	"strconv"
	"strings"
	"time"
W
group  
wangchuxiao 已提交
21 22

	"google.golang.org/grpc"
落凡尘.'s avatar
落凡尘. 已提交
23 24
)

W
wenxu12345 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
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 已提交
41

W
wenxu12345 已提交
42
func (s *groupServer) Run() {
W
wenxu12345 已提交
43
	log.NewInfo("0", "group rpc start ")
W
wenxu12345 已提交
44 45 46 47 48
	ip := utils.ServerIP
	registerAddress := ip + ":" + strconv.Itoa(s.rpcPort)
	//listener network
	listener, err := net.Listen("tcp", registerAddress)
	if err != nil {
W
wenxu12345 已提交
49
		log.NewError("0", "Listen failed ", err.Error(), registerAddress)
W
wenxu12345 已提交
50 51
		return
	}
W
wenxu12345 已提交
52
	log.NewInfo("0", "listen network success, ", registerAddress, listener)
W
wenxu12345 已提交
53 54 55 56 57 58 59 60
	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 已提交
61
		log.NewError("0", "RegisterEtcd failed ", err.Error())
W
wenxu12345 已提交
62 63 64 65
		return
	}
	err = srv.Serve(listener)
	if err != nil {
W
wenxu12345 已提交
66
		log.NewError("0", "Serve failed ", err.Error())
W
wenxu12345 已提交
67 68
		return
	}
W
wenxu12345 已提交
69
	log.NewInfo("0", "group rpc success")
W
wenxu12345 已提交
70 71 72
}

func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
W
wenxu12345 已提交
73
	log.NewInfo(req.OperationID, "CreateGroup, args ", req.String())
W
wenxu12345 已提交
74 75 76
	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 已提交
77
	}
W
wenxu12345 已提交
78

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	for _, v := range memberList {
W
wenxu12345 已提交
290
		var node open_im_sdk.GroupMemberFullInfo
W
wenxu12345 已提交
291
		utils.CopyStructFields(&node, &v)
落凡尘.'s avatar
落凡尘. 已提交
292 293 294 295 296 297 298 299 300
		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 已提交
301
	resp.ErrCode = 0
W
wenxu12345 已提交
302
	log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String())
落凡尘.'s avatar
落凡尘. 已提交
303 304 305 306
	return &resp, nil
}

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

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

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

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

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

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

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

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

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

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

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

W
wenxu12345 已提交
409
	log.NewDebug(req.OperationID, "GetGroupApplicationList reply ", reply)
W
wenxu12345 已提交
410 411
	resp := pbGroup.GetGroupApplicationListResp{}
	for _, v := range reply {
W
wenxu12345 已提交
412 413 414 415 416 417 418 419 420 421 422 423
		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 已提交
424
		cp.GroupRequestDBCopyOpenIM(&node, &v)
W
wenxu12345 已提交
425
		cp.UserDBCopyOpenIMPublicUser(node.UserInfo, user)
W
wenxu12345 已提交
426
		cp.GroupDBCopyOpenIM(node.GroupInfo, group)
W
wenxu12345 已提交
427
		log.NewDebug(req.OperationID, "node ", node, "v ", v)
W
wenxu12345 已提交
428
		resp.GroupRequestList = append(resp.GroupRequestList, &node)
W
wenxu12345 已提交
429 430 431
	}
	log.NewInfo(req.OperationID, "GetGroupMembersInfo rpc return ", resp)
	return &resp, nil
W
wenxu12345 已提交
432 433 434
}

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

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

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

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

W
wenxu12345 已提交
472 473 474 475 476
	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 已提交
477
		}
W
wenxu12345 已提交
478 479 480 481 482 483 484 485 486 487 488 489 490 491
		member := db.GroupMember{}
		member.GroupID = req.GroupID
		member.UserID = req.FromUserID
		member.RoleLevel = constant.GroupOrdinaryUsers
		member.OperatorUserID = req.OpUserID
		member.FaceUrl = user.FaceURL
		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 已提交
492
		chat.MemberEnterNotification(req)
W
wenxu12345 已提交
493 494 495 496 497
	} 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 已提交
498 499
	}

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

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

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

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

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

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

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

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

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

	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 已提交
555
	chat.MemberQuitNotification(req)
W
wenxu12345 已提交
556
	log.NewInfo(req.OperationID, "rpc QuitGroup return ", pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}})
W
wenxu12345 已提交
557
	return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
W
wenxu12345 已提交
558 559 560 561 562 563
}

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

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

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

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

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

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

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

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

W
wenxu12345 已提交
641
}
W
cms  
wangchuxiao 已提交
642

W
add  
wangchuxiao 已提交
643 644 645 646 647 648 649 650
func (s *groupServer) GetGroupById(_ context.Context, req *pbGroup.GetGroupByIdReq) (*pbGroup.GetGroupByIdResp, error) {
	log.NewInfo(req.OperationID, "GetGroup ", req.String())
	resp := &pbGroup.GetGroupByIdResp{}
	group, err := imdb.GetGroupsById(req.GroupId)
	if err != nil {
		return resp, err
	}
	resp.GroupInfo = &open_im_sdk.GroupInfo{
W
wangchuxiao 已提交
651 652 653 654
		GroupID:       group.GroupID,
		GroupName:     group.GroupName,
		FaceURL:       group.FaceUrl,
		OwnerUserID:   group.CreatorUserID,
W
add  
wangchuxiao 已提交
655 656 657
		MemberCount:   0,
		Status:        group.Status,
		CreatorUserID: group.CreatorUserID,
W
wangchuxiao 已提交
658
		GroupType:     group.GroupType,
W
add  
wangchuxiao 已提交
659 660 661 662 663
	}
	resp.GroupInfo.CreatorUserID = group.CreatorUserID
	return resp, nil
}

W
cms  
wangchuxiao 已提交
664 665
func (s *groupServer) GetGroup(_ context.Context, req *pbGroup.GetGroupReq) (*pbGroup.GetGroupResp, error) {
	log.NewInfo(req.OperationID, "GetGroup ", req.String())
W
wangchuxiao 已提交
666 667 668 669
	resp := &pbGroup.GetGroupResp{
		GroupInfo: []*open_im_sdk.GroupInfo{},
	}
	groups, err := imdb.GetGroupsByName(req.GroupName, req.Pagination.PageNumber, req.Pagination.ShowNumber)
W
cms  
wangchuxiao 已提交
670 671 672
	if err != nil {
		return nil, err
	}
W
add  
wangchuxiao 已提交
673 674 675 676
	resp.Pagination = &open_im_sdk.RequestPagination{
		PageNumber: req.Pagination.PageNumber,
		ShowNumber: req.Pagination.ShowNumber,
	}
W
group  
wangchuxiao 已提交
677
	for _, v := range groups {
W
wangchuxiao 已提交
678 679 680 681 682 683 684 685
		resp.GroupInfo = append(resp.GroupInfo, &open_im_sdk.GroupInfo{
			GroupID:       v.GroupID,
			GroupName:     v.GroupName,
			FaceURL:       v.FaceUrl,
			OwnerUserID:   v.CreatorUserID,
			Status:        v.Status,
			CreatorUserID: v.CreatorUserID,
		})
W
cms  
wangchuxiao 已提交
686 687 688 689 690 691
	}
	return resp, nil
}

func (s *groupServer) GetGroups(_ context.Context, req *pbGroup.GetGroupsReq) (*pbGroup.GetGroupsResp, error) {
	log.NewInfo(req.OperationID, "GetGroups ", req.String())
W
group  
wangchuxiao 已提交
692 693 694 695
	resp := &pbGroup.GetGroupsResp{
		GroupInfo:  []*open_im_sdk.GroupInfo{},
		Pagination: &open_im_sdk.RequestPagination{},
	}
W
cms  
wangchuxiao 已提交
696 697
	groups, err := imdb.GetGroups(int(req.Pagination.PageNumber), int(req.Pagination.ShowNumber))
	if err != nil {
W
group  
wangchuxiao 已提交
698
		return resp, err
W
cms  
wangchuxiao 已提交
699
	}
W
group  
wangchuxiao 已提交
700 701 702 703
	groupsCountNum, err := imdb.GetGroupsCountNum()
	log.NewInfo(req.OperationID, "groupsCountNum ", groupsCountNum)
	if err != nil {
		return resp, err
W
wangchuxiao 已提交
704
	}
W
group  
wangchuxiao 已提交
705 706 707 708
	resp.GroupNum = int32(groupsCountNum)
	resp.Pagination.PageNumber = req.Pagination.PageNumber
	resp.Pagination.ShowNumber = req.Pagination.ShowNumber
	for _, v := range groups {
W
wangchuxiao 已提交
709 710 711 712 713 714 715 716
		resp.GroupInfo = append(resp.GroupInfo, &open_im_sdk.GroupInfo{
			GroupID:       v.GroupID,
			GroupName:     v.GroupName,
			FaceURL:       v.FaceUrl,
			OwnerUserID:   v.CreatorUserID,
			Status:        v.Status,
			CreatorUserID: v.CreatorUserID,
		})
W
cms  
wangchuxiao 已提交
717
	}
W
group  
wangchuxiao 已提交
718

W
cms  
wangchuxiao 已提交
719 720 721
	return resp, nil
}

W
add  
wangchuxiao 已提交
722
func (s *groupServer) OperateGroupStatus(_ context.Context, req *pbGroup.OperateGroupStatusReq) (*pbGroup.OperateGroupStatusResp, error) {
W
wangchuxiao 已提交
723
	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
W
add  
wangchuxiao 已提交
724 725
	resp := &pbGroup.OperateGroupStatusResp{}
	if err := imdb.OperateGroupStatus(req.GroupId, req.Status); err != nil {
W
wangchuxiao 已提交
726 727 728 729 730 731
		return resp, err
	}
	return resp, nil
}

func (s *groupServer) DeleteGroup(_ context.Context, req *pbGroup.DeleteGroupReq) (*pbGroup.DeleteGroupResp, error) {
W
add  
wangchuxiao 已提交
732
	log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
W
wangchuxiao 已提交
733 734 735 736 737 738 739
	resp := &pbGroup.DeleteGroupResp{}
	if err := imdb.DeleteGroup(req.GroupId); err != nil {
		return resp, err
	}
	return resp, nil
}

W
add  
wangchuxiao 已提交
740
func (s *groupServer) OperateUserRole(_ context.Context, req *pbGroup.OperateUserRoleReq) (*pbGroup.OperateUserRoleResp, error) {
W
wangchuxiao 已提交
741
	log.NewInfo(req.OperationID, "DeleteGroup ", req.String())
W
add  
wangchuxiao 已提交
742 743
	resp := &pbGroup.OperateUserRoleResp{}
	if err := imdb.OperateGroupRole(req.UserId, req.GroupId, req.RoleLevel); err != nil {
W
wangchuxiao 已提交
744 745 746 747
		return resp, err
	}
	return resp, nil
}