Files
open-im-server/internal/rpc/group/group.go
T

1042 lines
45 KiB
Go
Raw Normal View History

2021-06-28 15:36:09 +08:00
package group
import (
2021-12-23 18:29:39 +08:00
chat "Open_IM/internal/rpc/msg"
"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"
2022-02-14 15:16:59 +08:00
"Open_IM/pkg/common/http"
"Open_IM/pkg/common/log"
2021-12-22 15:24:49 +08:00
"Open_IM/pkg/common/token_verify"
2021-12-30 10:56:17 +08:00
cp "Open_IM/pkg/common/utils"
2021-12-22 15:24:49 +08:00
"Open_IM/pkg/grpc-etcdv3/getcdv3"
2021-10-11 22:00:38 +08:00
pbGroup "Open_IM/pkg/proto/group"
2021-12-24 15:02:47 +08:00
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
"Open_IM/pkg/utils"
2021-06-28 15:36:09 +08:00
"context"
2021-12-22 15:24:49 +08:00
"net"
"strconv"
"strings"
"time"
2022-01-27 01:08:02 +08:00
"google.golang.org/grpc"
2021-06-28 15:36:09 +08:00
)
2021-12-22 15:24:49 +08:00
type groupServer struct {
rpcPort int
rpcRegisterName string
etcdSchema string
etcdAddr []string
}
func NewGroupServer(port int) *groupServer {
2022-03-31 11:15:06 +08:00
log.NewPrivateLog(constant.LogFileName)
2021-12-22 15:24:49 +08:00
return &groupServer{
rpcPort: port,
rpcRegisterName: config.Config.RpcRegisterName.OpenImGroupName,
etcdSchema: config.Config.Etcd.EtcdSchema,
etcdAddr: config.Config.Etcd.EtcdAddr,
}
}
2021-12-24 15:02:47 +08:00
2021-12-22 15:24:49 +08:00
func (s *groupServer) Run() {
2022-03-29 11:48:17 +08:00
log.NewInfo("", "group rpc start ")
2021-12-22 15:24:49 +08:00
ip := utils.ServerIP
registerAddress := ip + ":" + strconv.Itoa(s.rpcPort)
//listener network
listener, err := net.Listen("tcp", registerAddress)
if err != nil {
2022-03-29 11:48:17 +08:00
log.NewError("", "Listen failed ", err.Error(), registerAddress)
2021-12-22 15:24:49 +08:00
return
}
2022-03-29 11:48:17 +08:00
log.NewInfo("", "listen network success, ", registerAddress, listener)
2021-12-22 15:24:49 +08:00
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 {
2022-03-29 11:48:17 +08:00
log.NewError("", "RegisterEtcd failed ", err.Error())
2021-12-22 15:24:49 +08:00
return
}
err = srv.Serve(listener)
if err != nil {
2022-03-29 11:48:17 +08:00
log.NewError("", "Serve failed ", err.Error())
2021-12-22 15:24:49 +08:00
return
}
2022-03-29 11:48:17 +08:00
log.NewInfo("", "group rpc success")
2021-12-22 15:24:49 +08:00
}
func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "CreateGroup, args ", req.String())
2021-12-26 18:47:11 +08:00
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
2021-12-22 15:24:49 +08:00
}
2022-02-28 17:57:03 +08:00
canCreate, err := callbackBeforeCreateGroup(req)
if err != nil || !canCreate {
if err != nil {
2022-03-10 12:01:28 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "callbackBeforeCreateGroup failed")
2022-02-28 17:57:03 +08:00
}
}
2021-12-22 15:24:49 +08:00
//Time stamp + MD5 to generate group chat id
2021-12-23 17:22:49 +08:00
groupId := utils.Md5(strconv.FormatInt(time.Now().UnixNano(), 10))
2021-12-24 15:02:47 +08:00
//to group
2022-01-18 21:42:27 +08:00
groupInfo := db.Group{}
2021-12-27 21:08:42 +08:00
utils.CopyStructFields(&groupInfo, req.GroupInfo)
2021-12-28 11:57:12 +08:00
groupInfo.CreatorUserID = req.OpUserID
2022-01-18 21:42:27 +08:00
groupInfo.GroupID = groupId
2022-02-28 17:57:03 +08:00
err = imdb.InsertIntoGroup(groupInfo)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-28 11:57:12 +08:00
log.NewError(req.OperationID, "InsertIntoGroup failed, ", err.Error(), groupInfo)
2022-02-17 19:35:17 +08:00
return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB)
2021-12-22 15:24:49 +08:00
}
2021-12-27 21:08:42 +08:00
us, err := imdb.GetUserByUserID(req.OwnerUserID)
2021-12-23 17:22:49 +08:00
if err != nil {
2021-12-28 11:57:12 +08:00
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OwnerUserID)
2022-02-17 19:35:17 +08:00
return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB)
2021-12-22 15:24:49 +08:00
}
2021-12-24 15:02:47 +08:00
//to group member
2021-12-31 10:57:45 +08:00
groupMember := db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID}
2021-12-29 18:36:56 +08:00
utils.CopyStructFields(&groupMember, us)
2021-12-31 10:57:45 +08:00
err = imdb.InsertIntoGroupMember(groupMember)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-28 11:57:12 +08:00
log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember)
2022-02-17 19:35:17 +08:00
return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB)
2021-12-22 15:24:49 +08:00
}
2021-12-26 18:47:11 +08:00
err = db.DB.AddGroupMember(groupId, req.OwnerUserID)
2021-12-23 17:22:49 +08:00
if err != nil {
2021-12-26 18:47:11 +08:00
log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), groupId, req.OwnerUserID)
2021-12-22 15:24:49 +08:00
}
2021-12-28 11:57:12 +08:00
var okUserIDList []string
2021-12-24 15:02:47 +08:00
//to group member
2021-12-23 17:22:49 +08:00
for _, user := range req.InitMemberList {
2021-12-31 10:57:45 +08:00
us, err := imdb.GetUserByUserID(user.UserID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-29 17:52:01 +08:00
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), user.UserID)
2021-12-22 15:24:49 +08:00
continue
}
2021-12-28 21:17:41 +08:00
if user.RoleLevel == constant.GroupOwner {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "only one owner, failed ", user)
continue
}
2021-12-28 11:57:12 +08:00
groupMember.RoleLevel = user.RoleLevel
2021-12-27 21:08:42 +08:00
utils.CopyStructFields(&groupMember, us)
2021-12-31 10:57:45 +08:00
err = imdb.InsertIntoGroupMember(groupMember)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-27 21:08:42 +08:00
log.NewError(req.OperationID, "InsertIntoGroupMember failed ", err.Error(), groupMember)
2021-12-28 11:57:12 +08:00
continue
2021-12-22 15:24:49 +08:00
}
2021-12-28 11:57:12 +08:00
2021-12-24 16:02:21 +08:00
okUserIDList = append(okUserIDList, user.UserID)
2021-12-23 17:22:49 +08:00
err = db.DB.AddGroupMember(groupId, user.UserID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "add mongo group member failed, db.DB.AddGroupMember failed ", err.Error())
2021-12-22 15:24:49 +08:00
}
}
2021-12-29 17:52:01 +08:00
resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}}
2021-12-31 10:57:45 +08:00
group, err := imdb.GetGroupInfoByGroupID(groupId)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-27 21:08:42 +08:00
log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupId)
2021-12-26 18:47:11 +08:00
resp.ErrCode = constant.ErrDB.ErrCode
resp.ErrMsg = constant.ErrDB.ErrMsg
2021-12-23 17:22:49 +08:00
return resp, nil
}
utils.CopyStructFields(resp.GroupInfo, group)
2022-01-14 13:44:46 +08:00
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
}
2021-12-28 11:57:12 +08:00
resp.GroupInfo.OwnerUserID = req.OwnerUserID
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String())
2022-01-16 16:31:28 +08:00
chat.GroupCreatedNotification(req.OperationID, req.OpUserID, groupId, okUserIDList)
2021-12-23 17:22:49 +08:00
return resp, nil
2021-12-22 15:24:49 +08:00
}
2021-06-28 15:36:09 +08:00
func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJoinedGroupListReq) (*pbGroup.GetJoinedGroupListResp, error) {
2021-12-23 17:22:49 +08:00
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)
2021-12-26 18:47:11 +08:00
return &pbGroup.GetJoinedGroupListResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
2021-06-28 15:36:09 +08:00
}
2021-12-24 15:02:47 +08:00
//group list
2021-12-27 21:08:42 +08:00
joinedGroupList, err := imdb.GetJoinedGroupIDListByUserID(req.FromUserID)
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-27 21:08:42 +08:00
log.NewError(req.OperationID, "GetJoinedGroupIDListByUserID failed ", err.Error(), req.FromUserID)
2021-12-26 18:47:11 +08:00
return &pbGroup.GetJoinedGroupListResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
2021-06-28 15:36:09 +08:00
}
var resp pbGroup.GetJoinedGroupListResp
for _, v := range joinedGroupList {
2021-12-23 17:22:49 +08:00
var groupNode open_im_sdk.GroupInfo
2022-01-14 13:44:46 +08:00
num, err := imdb.GetGroupMemberNumByGroupID(v)
2021-12-27 21:08:42 +08:00
owner, err2 := imdb.GetGroupOwnerInfoByGroupID(v)
group, err := imdb.GetGroupInfoByGroupID(v)
2021-12-23 17:22:49 +08:00
if num > 0 && owner != nil && err2 == nil && group != nil && err == nil {
utils.CopyStructFields(&groupNode, group)
2022-01-13 11:20:21 +08:00
groupNode.CreateTime = uint32(group.CreateTime.Unix())
2021-12-23 17:22:49 +08:00
groupNode.MemberCount = uint32(num)
2021-12-28 11:57:12 +08:00
groupNode.OwnerUserID = owner.UserID
2021-06-28 15:36:09 +08:00
resp.GroupList = append(resp.GroupList, &groupNode)
2021-12-23 17:22:49 +08:00
} else {
log.NewError(req.OperationID, "check nil ", num, owner, err, group)
continue
2021-06-28 15:36:09 +08:00
}
2021-12-23 17:22:49 +08:00
log.NewDebug(req.OperationID, "joinedGroup ", groupNode)
2021-06-28 15:36:09 +08:00
}
2021-12-28 11:57:12 +08:00
log.NewInfo(req.OperationID, "GetJoinedGroupList rpc return ", resp.String())
2021-06-28 15:36:09 +08:00
return &resp, nil
}
func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.InviteUserToGroupReq) (*pbGroup.InviteUserToGroupResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String())
2021-12-24 15:02:47 +08:00
if !imdb.IsExistGroupMember(req.GroupID, req.OpUserID) && !token_verify.IsMangerUserID(req.OpUserID) {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "no permission InviteUserToGroup ", req.GroupID, req.OpUserID)
2021-12-22 15:24:49 +08:00
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
2021-07-15 11:16:24 +08:00
}
2021-12-28 11:57:12 +08:00
_, err := imdb.GetGroupInfoByGroupID(req.GroupID)
if err != nil {
2021-12-29 18:04:24 +08:00
log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", req.GroupID, err)
2021-12-22 15:24:49 +08:00
return &pbGroup.InviteUserToGroupResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
}
2021-06-28 15:36:09 +08:00
//
//from User: invite: applicant
//to user: invite: invited
var resp pbGroup.InviteUserToGroupResp
2021-12-24 15:02:47 +08:00
var okUserIDList []string
2021-12-23 17:22:49 +08:00
for _, v := range req.InvitedUserIDList {
2021-06-28 15:36:09 +08:00
var resultNode pbGroup.Id2Result
2021-12-23 17:22:49 +08:00
resultNode.UserID = v
2021-06-28 15:36:09 +08:00
resultNode.Result = 0
2021-12-27 21:08:42 +08:00
toUserInfo, err := imdb.GetUserByUserID(v)
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-29 18:04:24 +08:00
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), v)
2021-06-28 15:36:09 +08:00
resultNode.Result = -1
2021-12-23 17:22:49 +08:00
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
2021-06-28 15:36:09 +08:00
continue
}
2021-07-15 11:16:24 +08:00
if imdb.IsExistGroupMember(req.GroupID, v) {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "IsExistGroupMember ", req.GroupID, v)
2021-06-28 15:36:09 +08:00
resultNode.Result = -1
2021-12-23 17:22:49 +08:00
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
2021-06-28 15:36:09 +08:00
continue
}
2021-12-31 10:57:45 +08:00
var toInsertInfo db.GroupMember
2021-12-27 21:08:42 +08:00
utils.CopyStructFields(&toInsertInfo, toUserInfo)
toInsertInfo.GroupID = req.GroupID
2021-12-28 21:17:41 +08:00
toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers
2021-12-30 16:24:37 +08:00
toInsertInfo.OperatorUserID = req.OpUserID
2021-12-27 21:08:42 +08:00
err = imdb.InsertIntoGroupMember(toInsertInfo)
2021-06-28 15:36:09 +08:00
if err != nil {
2022-01-18 10:43:30 +08:00
log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL)
2021-06-28 15:36:09 +08:00
resultNode.Result = -1
2021-12-23 17:22:49 +08:00
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
2021-06-28 15:36:09 +08:00
continue
}
2021-12-24 15:02:47 +08:00
okUserIDList = append(okUserIDList, v)
2021-12-22 15:24:49 +08:00
err = db.DB.AddGroupMember(req.GroupID, toUserInfo.UserID)
2021-07-15 11:16:24 +08:00
if err != nil {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "AddGroupMember failed ", err.Error(), req.GroupID, toUserInfo.UserID)
2021-07-15 11:16:24 +08:00
}
2021-12-23 17:22:49 +08:00
resp.Id2ResultList = append(resp.Id2ResultList, &resultNode)
2021-06-28 15:36:09 +08:00
}
2021-12-24 15:02:47 +08:00
chat.MemberInvitedNotification(req.OperationID, req.GroupID, req.OpUserID, req.Reason, okUserIDList)
2021-12-22 15:24:49 +08:00
resp.ErrCode = 0
2021-12-24 15:02:47 +08:00
log.NewInfo(req.OperationID, "InviteUserToGroup rpc return ", resp.String())
2021-06-28 15:36:09 +08:00
return &resp, nil
}
func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "GetGroupAllMember, args ", req.String())
2021-06-28 15:36:09 +08:00
var resp pbGroup.GetGroupAllMemberResp
2021-12-27 21:08:42 +08:00
memberList, err := imdb.GetGroupMemberListByGroupID(req.GroupID)
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-26 18:47:11 +08:00
resp.ErrCode = constant.ErrDB.ErrCode
resp.ErrMsg = constant.ErrDB.ErrMsg
2021-12-29 18:04:24 +08:00
log.NewError(req.OperationID, "GetGroupMemberListByGroupID failed,", err.Error(), req.GroupID)
2021-06-28 15:36:09 +08:00
return &resp, nil
}
2021-12-28 11:57:12 +08:00
2021-06-28 15:36:09 +08:00
for _, v := range memberList {
2022-03-29 17:24:46 +08:00
log.Debug(req.OperationID, v)
2021-12-23 17:22:49 +08:00
var node open_im_sdk.GroupMemberFullInfo
2022-03-10 12:01:28 +08:00
cp.GroupMemberDBCopyOpenIM(&node, &v)
2022-03-29 18:24:10 +08:00
log.Debug(req.OperationID, "db value:", v.MuteEndTime, "seconds: ", v.MuteEndTime.Unix())
2022-03-29 17:24:46 +08:00
log.Debug(req.OperationID, "cp value: ", node)
2021-06-28 15:36:09 +08:00
resp.MemberList = append(resp.MemberList, &node)
2021-12-23 17:22:49 +08:00
}
2021-12-28 11:57:12 +08:00
log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String())
2021-06-28 15:36:09 +08:00
return &resp, nil
}
func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGroupMemberListReq) (*pbGroup.GetGroupMemberListResp, error) {
2021-12-30 16:30:13 +08:00
log.NewInfo(req.OperationID, "GetGroupMemberList args ", req.String())
2021-06-28 15:36:09 +08:00
var resp pbGroup.GetGroupMemberListResp
2021-12-27 21:08:42 +08:00
memberList, err := imdb.GetGroupMemberByGroupID(req.GroupID, req.Filter, req.NextSeq, 30)
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-26 18:47:11 +08:00
resp.ErrCode = constant.ErrDB.ErrCode
2021-12-28 11:57:12 +08:00
resp.ErrMsg = constant.ErrDB.ErrMsg
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "GetGroupMemberByGroupId failed,", req.GroupID, req.Filter, req.NextSeq, 30)
2021-06-28 15:36:09 +08:00
return &resp, nil
}
for _, v := range memberList {
2021-12-23 17:22:49 +08:00
var node open_im_sdk.GroupMemberFullInfo
2021-12-30 16:30:13 +08:00
utils.CopyStructFields(&node, &v)
2021-06-28 15:36:09 +08:00
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))
}
2021-12-22 15:24:49 +08:00
resp.ErrCode = 0
2021-12-24 16:02:21 +08:00
log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String())
2021-06-28 15:36:09 +08:00
return &resp, nil
}
func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "KickGroupMember args ", req.String())
2021-12-27 21:08:42 +08:00
ownerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID)
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-22 15:24:49 +08:00
log.NewError(req.OperationID, "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID)
2021-12-30 14:03:55 +08:00
return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
2021-06-28 15:36:09 +08:00
}
//op is group owner?
var flag = 0
for _, v := range ownerList {
2021-12-22 15:24:49 +08:00
if v.UserID == req.OpUserID {
2021-06-28 15:36:09 +08:00
flag = 1
2021-12-23 17:22:49 +08:00
log.NewDebug(req.OperationID, "is group owner ", req.OpUserID, req.GroupID)
2021-06-28 15:36:09 +08:00
break
}
}
2021-12-22 15:24:49 +08:00
2021-12-24 15:02:47 +08:00
//op is app manager
2021-09-22 20:10:38 +08:00
if flag != 1 {
2021-12-23 17:22:49 +08:00
if token_verify.IsMangerUserID(req.OpUserID) {
2021-09-22 20:10:38 +08:00
flag = 1
2021-12-23 17:22:49 +08:00
log.NewDebug(req.OperationID, "is app manager ", req.OpUserID)
2021-09-22 20:10:38 +08:00
}
}
2021-06-28 15:36:09 +08:00
if flag != 1 {
2021-12-28 11:57:12 +08:00
log.NewError(req.OperationID, "failed, no access kick ", req.OpUserID)
2021-12-22 15:24:49 +08:00
return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
2021-06-28 15:36:09 +08:00
}
2021-12-23 17:22:49 +08:00
if len(req.KickedUserIDList) == 0 {
2021-12-22 15:24:49 +08:00
log.NewError(req.OperationID, "failed, kick list 0")
2021-12-26 18:47:11 +08:00
return &pbGroup.KickGroupMemberResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}, nil
2021-06-28 15:36:09 +08:00
}
2021-12-22 15:24:49 +08:00
2021-12-23 17:22:49 +08:00
groupOwnerUserID := ""
for _, v := range ownerList {
2021-12-28 21:17:41 +08:00
if v.RoleLevel == constant.GroupOwner {
2021-12-23 17:22:49 +08:00
groupOwnerUserID = v.UserID
}
}
2021-12-24 15:02:47 +08:00
var okUserIDList []string
2021-06-28 15:36:09 +08:00
//remove
var resp pbGroup.KickGroupMemberResp
2021-12-23 17:22:49 +08:00
for _, v := range req.KickedUserIDList {
2022-03-29 11:48:17 +08:00
//owner cant kicked
2021-12-23 17:22:49 +08:00
if v == groupOwnerUserID {
log.NewError(req.OperationID, "failed, can't kick owner ", v)
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
2021-06-28 15:36:09 +08:00
continue
}
2021-12-23 17:22:49 +08:00
err := imdb.RemoveGroupMember(req.GroupID, v)
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "RemoveGroupMember failed ", err.Error(), req.GroupID, v)
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: -1})
2021-06-28 15:36:09 +08:00
} else {
2021-12-30 14:03:55 +08:00
log.NewDebug(req.OperationID, "kicked ", v)
2021-12-23 17:22:49 +08:00
resp.Id2ResultList = append(resp.Id2ResultList, &pbGroup.Id2Result{UserID: v, Result: 0})
2021-12-24 15:02:47 +08:00
okUserIDList = append(okUserIDList, v)
2021-06-28 15:36:09 +08:00
}
2021-12-24 15:02:47 +08:00
2021-12-23 17:22:49 +08:00
err = db.DB.DelGroupMember(req.GroupID, v)
2021-07-15 11:16:24 +08:00
if err != nil {
2021-12-24 15:02:47 +08:00
log.NewError(req.OperationID, "DelGroupMember failed ", err.Error(), req.GroupID, v)
2021-07-15 11:16:24 +08:00
}
2021-06-28 15:36:09 +08:00
}
2021-12-24 15:02:47 +08:00
chat.MemberKickedNotification(req, okUserIDList)
log.NewInfo(req.OperationID, "GetGroupMemberList rpc return ", resp.String())
2021-06-28 15:36:09 +08:00
return &resp, nil
}
func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetGroupMembersInfoReq) (*pbGroup.GetGroupMembersInfoResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String())
2021-06-28 15:36:09 +08:00
var resp pbGroup.GetGroupMembersInfoResp
for _, v := range req.MemberList {
2021-12-23 17:22:49 +08:00
var memberNode open_im_sdk.GroupMemberFullInfo
2021-12-27 21:08:42 +08:00
memberInfo, err := imdb.GetMemberInfoByID(req.GroupID, v)
2021-12-23 17:22:49 +08:00
memberNode.UserID = v
2021-06-28 15:36:09 +08:00
if err != nil {
2021-12-23 17:22:49 +08:00
log.NewError(req.OperationID, "GetMemberInfoById failed ", err.Error(), req.GroupID, v)
2021-06-28 15:36:09 +08:00
continue
2021-12-23 17:22:49 +08:00
} else {
utils.CopyStructFields(&memberNode, memberInfo)
2022-03-11 18:09:28 +08:00
memberNode.JoinTime = int32(memberInfo.JoinTime.Unix())
2021-12-23 17:22:49 +08:00
resp.MemberList = append(resp.MemberList, &memberNode)
2021-06-28 15:36:09 +08:00
}
}
2021-12-22 15:24:49 +08:00
resp.ErrCode = 0
2021-12-24 15:02:47 +08:00
log.NewInfo(req.OperationID, "GetGroupMembersInfo rpc return ", resp.String())
2021-06-28 15:36:09 +08:00
return &resp, nil
}
2021-12-22 15:24:49 +08:00
2021-12-23 17:22:49 +08:00
func (s *groupServer) GetGroupApplicationList(_ context.Context, req *pbGroup.GetGroupApplicationListReq) (*pbGroup.GetGroupApplicationListResp, error) {
log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String())
2021-12-31 10:57:45 +08:00
reply, err := imdb.GetGroupApplicationList(req.FromUserID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-30 10:49:09 +08:00
log.NewError(req.OperationID, "GetGroupApplicationList failed ", err.Error(), req.FromUserID)
2021-12-22 15:24:49 +08:00
return &pbGroup.GetGroupApplicationListResp{ErrCode: 701, ErrMsg: "GetGroupApplicationList failed"}, nil
}
2021-12-27 21:08:42 +08:00
2021-12-30 10:56:17 +08:00
log.NewDebug(req.OperationID, "GetGroupApplicationList reply ", reply)
2021-12-27 21:08:42 +08:00
resp := pbGroup.GetGroupApplicationListResp{}
for _, v := range reply {
2022-01-15 15:25:12 +08:00
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
}
2021-12-30 10:56:17 +08:00
cp.GroupRequestDBCopyOpenIM(&node, &v)
2022-01-16 16:31:28 +08:00
cp.UserDBCopyOpenIMPublicUser(node.UserInfo, user)
2022-01-15 15:25:12 +08:00
cp.GroupDBCopyOpenIM(node.GroupInfo, group)
2021-12-30 10:36:37 +08:00
log.NewDebug(req.OperationID, "node ", node, "v ", v)
2021-12-30 11:13:19 +08:00
resp.GroupRequestList = append(resp.GroupRequestList, &node)
2021-12-27 21:08:42 +08:00
}
log.NewInfo(req.OperationID, "GetGroupMembersInfo rpc return ", resp)
return &resp, nil
2021-12-22 15:24:49 +08:00
}
func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbGroup.GetGroupsInfoReq) (*pbGroup.GetGroupsInfoResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String())
groupsInfoList := make([]*open_im_sdk.GroupInfo, 0)
2021-12-22 15:24:49 +08:00
for _, groupID := range req.GroupIDList {
2021-12-31 10:57:45 +08:00
groupInfoFromMysql, err := imdb.GetGroupInfoByGroupID(groupID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-29 18:04:24 +08:00
log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupID)
2021-12-22 15:24:49 +08:00
continue
}
2021-12-23 17:22:49 +08:00
var groupInfo open_im_sdk.GroupInfo
2021-12-30 11:07:12 +08:00
cp.GroupDBCopyOpenIM(&groupInfo, groupInfoFromMysql)
2021-12-22 15:24:49 +08:00
groupsInfoList = append(groupsInfoList, &groupInfo)
}
2021-12-23 17:22:49 +08:00
resp := pbGroup.GetGroupsInfoResp{GroupInfoList: groupsInfoList}
log.NewInfo(req.OperationID, "GetGroupsInfo rpc return ", resp)
return &resp, nil
2021-12-22 15:24:49 +08:00
}
2021-12-26 18:47:11 +08:00
func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.GroupApplicationResponseReq) (*pbGroup.GroupApplicationResponseResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "GroupApplicationResponse args ", req.String())
2021-12-27 16:48:05 +08:00
2021-12-31 10:57:45 +08:00
groupRequest := db.GroupRequest{}
2021-12-30 11:42:10 +08:00
utils.CopyStructFields(&groupRequest, req)
2021-12-27 16:48:05 +08:00
groupRequest.UserID = req.FromUserID
groupRequest.HandleUserID = req.OpUserID
2021-12-30 13:29:32 +08:00
groupRequest.HandledTime = time.Now()
2021-12-30 12:05:10 +08:00
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
}
2021-12-27 16:48:05 +08:00
err := imdb.UpdateGroupRequest(groupRequest)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-30 13:29:32 +08:00
//{openIM002 7836e478bc43ce1d3b8889cac983f59b 1 ok 0001-01-01 00:00:00 +0000 UTC openIM001 0001-01-01 00:00:00 +0000 UTC }
2021-12-30 13:26:07 +08:00
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), groupRequest)
2021-12-27 16:48:05 +08:00
return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-30 12:27:26 +08:00
2022-01-16 16:31:28 +08:00
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
2021-12-30 12:27:26 +08:00
}
2022-01-16 16:31:28 +08:00
member := db.GroupMember{}
member.GroupID = req.GroupID
member.UserID = req.FromUserID
member.RoleLevel = constant.GroupOrdinaryUsers
member.OperatorUserID = req.OpUserID
2022-02-09 15:07:31 +08:00
member.FaceURL = user.FaceURL
2022-01-16 16:31:28 +08:00
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)
2021-12-27 16:48:05 +08:00
chat.MemberEnterNotification(req)
2022-01-16 16:31:28 +08:00
} 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
2021-12-22 15:24:49 +08:00
}
2021-12-30 11:42:10 +08:00
log.NewInfo(req.OperationID, "rpc GroupApplicationResponse return ", pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{}})
2021-12-27 16:48:05 +08:00
return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-26 18:47:11 +08:00
func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) {
2021-12-23 17:22:49 +08:00
log.NewInfo(req.OperationID, "JoinGroup args ", req.String())
2021-12-28 15:33:47 +08:00
_, err := imdb.GetUserByUserID(req.OpUserID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-30 09:38:07 +08:00
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.OpUserID)
2021-12-26 18:47:11 +08:00
return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-31 10:57:45 +08:00
var groupRequest db.GroupRequest
2021-12-30 10:14:30 +08:00
groupRequest.UserID = req.OpUserID
groupRequest.ReqMsg = req.ReqMessage
groupRequest.GroupID = req.GroupID
2021-12-30 13:53:05 +08:00
err = imdb.InsertIntoGroupRequest(groupRequest)
2021-12-27 21:08:42 +08:00
if err != nil {
log.NewError(req.OperationID, "UpdateGroupRequest ", err.Error(), groupRequest)
2021-12-26 18:47:11 +08:00
return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-27 21:08:42 +08:00
_, err = imdb.GetGroupMemberListByGroupIDAndRoleLevel(req.GroupID, constant.GroupOwner)
if err != nil {
log.NewError(req.OperationID, "GetGroupMemberListByGroupIDAndRoleLevel failed ", err.Error(), req.GroupID, constant.GroupOwner)
2021-12-26 18:47:11 +08:00
return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-24 15:02:47 +08:00
2022-01-16 16:31:28 +08:00
chat.JoinGroupApplicationNotification(req)
2021-12-22 15:24:49 +08:00
2021-12-24 16:02:21 +08:00
log.NewInfo(req.OperationID, "ReceiveJoinApplicationNotification rpc return ")
2021-12-26 18:47:11 +08:00
return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-26 18:47:11 +08:00
func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) (*pbGroup.QuitGroupResp, error) {
2021-12-30 09:26:40 +08:00
log.NewError(req.OperationID, "QuitGroup args ", req.String())
2021-12-27 21:08:42 +08:00
_, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupID, req.OpUserID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-30 09:26:40 +08:00
log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), req.GroupID, req.OpUserID)
2021-12-26 18:47:11 +08:00
return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-27 21:08:42 +08:00
err = imdb.DeleteGroupMemberByGroupIDAndUserID(req.GroupID, req.OpUserID)
2021-12-22 15:24:49 +08:00
if err != nil {
log.NewError(req.OperationID, "DeleteGroupMemberByGroupIdAndUserId failed ", err.Error(), req.GroupID, req.OpUserID)
2021-12-26 18:47:11 +08:00
return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
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
}
2022-01-16 16:31:28 +08:00
chat.MemberQuitNotification(req)
2021-12-30 09:26:40 +08:00
log.NewInfo(req.OperationID, "rpc QuitGroup return ", pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}})
2021-12-26 18:47:11 +08:00
return &pbGroup.QuitGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
2021-12-22 15:24:49 +08:00
}
func hasAccess(req *pbGroup.SetGroupInfoReq) bool {
if utils.IsContain(req.OpUserID, config.Config.Manager.AppManagerUid) {
return true
}
2021-12-31 10:57:45 +08:00
groupUserInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(req.GroupInfo.GroupID, req.OpUserID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-29 18:04:24 +08:00
log.NewError(req.OperationID, "GetGroupMemberInfoByGroupIDAndUserID failed, ", err.Error(), req.GroupInfo.GroupID, req.OpUserID)
2021-12-22 15:24:49 +08:00
return false
}
2021-12-29 22:06:27 +08:00
if groupUserInfo.RoleLevel == constant.GroupOwner || groupUserInfo.RoleLevel == constant.GroupAdmin {
2021-12-22 15:24:49 +08:00
return true
}
2021-12-28 15:33:47 +08:00
return false
2021-12-22 15:24:49 +08:00
}
2021-12-26 18:47:11 +08:00
func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInfoReq) (*pbGroup.SetGroupInfoResp, error) {
2021-12-22 15:24:49 +08:00
log.NewInfo(req.OperationID, "SetGroupInfo args ", req.String())
if !hasAccess(req) {
2021-12-29 22:06:27 +08:00
log.NewError(req.OperationID, "no access ", req)
2021-12-26 18:47:11 +08:00
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-31 10:57:45 +08:00
group, err := imdb.GetGroupInfoByGroupID(req.GroupInfo.GroupID)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-29 18:04:24 +08:00
log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), req.GroupInfo.GroupID)
2022-02-14 15:16:59 +08:00
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, http.WrapError(constant.ErrDB)
2021-12-22 15:24:49 +08:00
}
2021-12-24 16:02:21 +08:00
////bitwise operators: 0001:groupName; 0010:Notification 0100:Introduction; 1000:FaceUrl; 10000:owner
2021-12-22 15:24:49 +08:00
var changedType int32
2021-12-23 17:22:49 +08:00
if group.GroupName != req.GroupInfo.GroupName && req.GroupInfo.GroupName != "" {
2021-12-22 15:24:49 +08:00
changedType = 1
}
2021-12-23 17:22:49 +08:00
if group.Notification != req.GroupInfo.Notification && req.GroupInfo.Notification != "" {
2021-12-22 15:24:49 +08:00
changedType = changedType | (1 << 1)
}
2021-12-23 17:22:49 +08:00
if group.Introduction != req.GroupInfo.Introduction && req.GroupInfo.Introduction != "" {
2021-12-22 15:24:49 +08:00
changedType = changedType | (1 << 2)
}
2022-02-09 15:07:31 +08:00
if group.FaceURL != req.GroupInfo.FaceURL && req.GroupInfo.FaceURL != "" {
2021-12-22 15:24:49 +08:00
changedType = changedType | (1 << 3)
}
//only administrators can set group information
2021-12-31 10:57:45 +08:00
var groupInfo db.Group
2021-12-27 21:08:42 +08:00
utils.CopyStructFields(&groupInfo, req.GroupInfo)
err = imdb.SetGroupInfo(groupInfo)
if err != nil {
2021-12-30 09:10:31 +08:00
log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), groupInfo)
2022-02-14 15:16:59 +08:00
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
2021-12-22 15:24:49 +08:00
}
2022-01-16 16:31:28 +08:00
log.NewInfo(req.OperationID, "SetGroupInfo rpc return ", pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}})
2021-12-22 15:24:49 +08:00
if changedType != 0 {
2022-01-16 16:31:28 +08:00
chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID)
2021-12-22 15:24:49 +08:00
}
2021-12-27 21:08:42 +08:00
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil
2021-12-22 15:24:49 +08:00
}
2021-12-26 18:47:11 +08:00
func (s *groupServer) TransferGroupOwner(_ context.Context, req *pbGroup.TransferGroupOwnerReq) (*pbGroup.TransferGroupOwnerResp, error) {
2021-12-24 16:02:21 +08:00
log.NewInfo(req.OperationID, "TransferGroupOwner ", req.String())
2021-12-22 15:24:49 +08:00
2021-12-27 16:48:05 +08:00
if req.OldOwnerUserID == req.NewOwnerUserID {
2021-12-30 13:39:36 +08:00
log.NewError(req.OperationID, "same owner ", req.OldOwnerUserID, req.NewOwnerUserID)
2021-12-27 16:48:05 +08:00
return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil
}
2021-12-31 10:57:45 +08:00
groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.OldOwnerUserID, RoleLevel: constant.GroupOrdinaryUsers}
2021-12-27 16:48:05 +08:00
err := imdb.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil {
2021-12-30 13:39:36 +08:00
log.NewError(req.OperationID, "UpdateGroupMemberInfo failed ", groupMemberInfo)
2021-12-27 16:48:05 +08:00
return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
2021-12-31 10:57:45 +08:00
groupMemberInfo = db.GroupMember{GroupID: req.GroupID, UserID: req.NewOwnerUserID, RoleLevel: constant.GroupOwner}
2021-12-27 16:48:05 +08:00
err = imdb.UpdateGroupMemberInfo(groupMemberInfo)
2021-12-22 15:24:49 +08:00
if err != nil {
2021-12-30 13:39:36 +08:00
log.NewError(req.OperationID, "UpdateGroupMemberInfo failed ", groupMemberInfo)
2021-12-26 18:47:11 +08:00
return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-22 15:24:49 +08:00
}
2022-01-16 16:31:28 +08:00
chat.GroupOwnerTransferredNotification(req)
2021-12-27 16:48:05 +08:00
return &pbGroup.TransferGroupOwnerResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
2021-12-22 15:24:49 +08:00
}
2022-01-25 19:18:04 +08:00
2022-01-27 18:31:31 +08:00
func (s *groupServer) GetGroupById(_ context.Context, req *pbGroup.GetGroupByIdReq) (*pbGroup.GetGroupByIdResp, error) {
2022-03-10 12:01:28 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-02-07 19:42:09 +08:00
resp := &pbGroup.GetGroupByIdResp{CMSGroup: &pbGroup.CMSGroup{
2022-03-10 12:01:28 +08:00
GroupInfo: &open_im_sdk.GroupInfo{},
2022-02-07 19:42:09 +08:00
}}
2022-02-09 16:22:58 +08:00
group, err := imdb.GetGroupById(req.GroupId)
2022-01-27 18:31:31 +08:00
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "GetGroupById error", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-01-27 18:31:31 +08:00
}
2022-02-07 19:42:09 +08:00
resp.CMSGroup.GroupInfo = &open_im_sdk.GroupInfo{
2022-02-07 08:44:21 +08:00
GroupID: group.GroupID,
GroupName: group.GroupName,
2022-02-14 15:16:59 +08:00
FaceURL: group.FaceURL,
2022-02-07 08:44:21 +08:00
OwnerUserID: group.CreatorUserID,
2022-01-27 18:31:31 +08:00
MemberCount: 0,
Status: group.Status,
CreatorUserID: group.CreatorUserID,
2022-02-07 08:44:21 +08:00
GroupType: group.GroupType,
2022-01-27 18:31:31 +08:00
}
2022-02-07 19:42:09 +08:00
groupMember, err := imdb.GetGroupMaster(group.GroupID)
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMaster", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-02-07 19:42:09 +08:00
}
resp.CMSGroup.GroupMasterName = groupMember.Nickname
resp.CMSGroup.GroupMasterId = groupMember.UserID
resp.CMSGroup.GroupInfo.CreatorUserID = group.CreatorUserID
2022-01-27 18:31:31 +08:00
return resp, nil
}
2022-01-25 19:18:04 +08:00
func (s *groupServer) GetGroup(_ context.Context, req *pbGroup.GetGroupReq) (*pbGroup.GetGroupResp, error) {
2022-02-14 15:16:59 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-26 18:43:01 +08:00
resp := &pbGroup.GetGroupResp{
2022-02-07 19:42:09 +08:00
CMSGroups: []*pbGroup.CMSGroup{},
2022-01-26 18:43:01 +08:00
}
groups, err := imdb.GetGroupsByName(req.GroupName, req.Pagination.PageNumber, req.Pagination.ShowNumber)
2022-01-25 19:18:04 +08:00
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupsByName error", req.String())
return resp, http.WrapError(constant.ErrDB)
2022-01-25 19:18:04 +08:00
}
2022-03-10 12:01:28 +08:00
nums, err := imdb.GetGroupsCountNum(db.Group{GroupName: req.GroupName})
2022-02-08 20:24:59 +08:00
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupsCountNum error", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-02-08 20:24:59 +08:00
}
resp.GroupNums = nums
2022-01-27 18:31:31 +08:00
resp.Pagination = &open_im_sdk.RequestPagination{
PageNumber: req.Pagination.PageNumber,
ShowNumber: req.Pagination.ShowNumber,
}
2022-01-27 01:08:02 +08:00
for _, v := range groups {
2022-02-07 19:42:09 +08:00
groupMember, err := imdb.GetGroupMaster(v.GroupID)
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMaster error", err.Error())
2022-02-07 19:42:09 +08:00
}
resp.CMSGroups = append(resp.CMSGroups, &pbGroup.CMSGroup{
GroupInfo: &open_im_sdk.GroupInfo{
GroupID: v.GroupID,
GroupName: v.GroupName,
2022-02-14 15:16:59 +08:00
FaceURL: v.FaceURL,
2022-02-07 19:42:09 +08:00
OwnerUserID: v.CreatorUserID,
Status: v.Status,
CreatorUserID: v.CreatorUserID,
},
GroupMasterName: groupMember.Nickname,
2022-03-10 12:01:28 +08:00
GroupMasterId: groupMember.UserID,
2022-01-26 18:43:01 +08:00
})
2022-01-25 19:18:04 +08:00
}
return resp, nil
}
func (s *groupServer) GetGroups(_ context.Context, req *pbGroup.GetGroupsReq) (*pbGroup.GetGroupsResp, error) {
2022-02-08 20:24:59 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "GetGroups ", req.String())
2022-01-27 01:08:02 +08:00
resp := &pbGroup.GetGroupsResp{
2022-02-07 19:42:09 +08:00
CMSGroups: []*pbGroup.CMSGroup{},
2022-01-27 01:08:02 +08:00
Pagination: &open_im_sdk.RequestPagination{},
}
2022-01-25 19:18:04 +08:00
groups, err := imdb.GetGroups(int(req.Pagination.PageNumber), int(req.Pagination.ShowNumber))
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroups error", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-01-25 19:18:04 +08:00
}
2022-02-08 20:24:59 +08:00
groupsCountNum, err := imdb.GetGroupsCountNum(db.Group{})
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "groupsCountNum ", groupsCountNum)
2022-01-27 01:08:02 +08:00
if err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupsCountNum", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-01-26 18:43:01 +08:00
}
2022-01-27 01:08:02 +08:00
resp.GroupNum = int32(groupsCountNum)
resp.Pagination.PageNumber = req.Pagination.PageNumber
resp.Pagination.ShowNumber = req.Pagination.ShowNumber
for _, v := range groups {
2022-02-07 19:42:09 +08:00
groupMember, err := imdb.GetGroupMaster(v.GroupID)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
}
resp.CMSGroups = append(resp.CMSGroups, &pbGroup.CMSGroup{
GroupInfo: &open_im_sdk.GroupInfo{
GroupID: v.GroupID,
GroupName: v.GroupName,
2022-02-14 15:16:59 +08:00
FaceURL: v.FaceURL,
2022-02-07 19:42:09 +08:00
OwnerUserID: v.CreatorUserID,
Status: v.Status,
CreatorUserID: v.CreatorUserID,
2022-02-24 14:47:21 +08:00
CreateTime: uint32(v.CreateTime.Unix()),
2022-02-07 19:42:09 +08:00
},
2022-03-10 12:01:28 +08:00
GroupMasterId: groupMember.UserID,
2022-02-07 19:42:09 +08:00
GroupMasterName: groupMember.Nickname,
2022-01-26 18:43:01 +08:00
})
2022-01-25 19:18:04 +08:00
}
2022-01-27 01:08:02 +08:00
2022-01-25 19:18:04 +08:00
return resp, nil
}
2022-01-27 18:31:31 +08:00
func (s *groupServer) OperateGroupStatus(_ context.Context, req *pbGroup.OperateGroupStatusReq) (*pbGroup.OperateGroupStatusResp, error) {
2022-02-07 08:44:21 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
2022-01-27 18:31:31 +08:00
resp := &pbGroup.OperateGroupStatusResp{}
if err := imdb.OperateGroupStatus(req.GroupId, req.Status); err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "OperateGroupStatus", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-01-26 18:43:01 +08:00
}
return resp, nil
}
func (s *groupServer) DeleteGroup(_ context.Context, req *pbGroup.DeleteGroupReq) (*pbGroup.DeleteGroupResp, error) {
2022-01-27 18:31:31 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
2022-01-26 18:43:01 +08:00
resp := &pbGroup.DeleteGroupResp{}
if err := imdb.DeleteGroup(req.GroupId); err != nil {
2022-02-14 15:16:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "DeleteGroup error", err.Error())
return resp, http.WrapError(constant.ErrDB)
2022-01-26 18:43:01 +08:00
}
return resp, nil
}
2022-01-27 18:31:31 +08:00
func (s *groupServer) OperateUserRole(_ context.Context, req *pbGroup.OperateUserRoleReq) (*pbGroup.OperateUserRoleResp, error) {
2022-02-07 19:42:09 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "args:", req.String())
2022-01-27 18:31:31 +08:00
resp := &pbGroup.OperateUserRoleResp{}
2022-02-21 21:02:37 +08:00
oldOwnerUserID, err := imdb.GetGroupMaster(req.GroupId)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMaster failed", err.Error())
2022-02-14 15:16:59 +08:00
return resp, http.WrapError(constant.ErrDB)
2022-02-07 19:42:09 +08:00
}
2022-02-21 21:02:37 +08:00
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName)
client := pbGroup.NewGroupClient(etcdConn)
var reqPb pbGroup.TransferGroupOwnerReq
reqPb.OperationID = req.OperationID
reqPb.NewOwnerUserID = req.UserId
reqPb.GroupID = req.GroupId
reqPb.OpUserID = "cms admin"
reqPb.OldOwnerUserID = oldOwnerUserID.UserID
reply, err := client.TransferGroupOwner(context.Background(), &reqPb)
if reply.CommonResp.ErrCode != 0 || err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "TransferGroupOwner rpc failed")
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
}
}
2022-02-07 19:42:09 +08:00
return resp, nil
}
func (s *groupServer) GetGroupMembersCMS(_ context.Context, req *pbGroup.GetGroupMembersCMSReq) (*pbGroup.GetGroupMembersCMSResp, error) {
2022-03-10 12:01:28 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "args:", req.String())
2022-02-07 19:42:09 +08:00
resp := &pbGroup.GetGroupMembersCMSResp{}
2022-02-08 20:24:59 +08:00
groupMembers, err := imdb.GetGroupMembersByGroupIdCMS(req.GroupId, req.UserName, req.Pagination.ShowNumber, req.Pagination.PageNumber)
2022-02-07 19:42:09 +08:00
if err != nil {
2022-03-10 12:01:28 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMembersByGroupIdCMS Error", err.Error())
2022-02-14 15:16:59 +08:00
return resp, http.WrapError(constant.ErrDB)
2022-02-08 20:24:59 +08:00
}
groupMembersCount, err := imdb.GetGroupMembersCount(req.GroupId, req.UserName)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMembersCMS Error", err.Error())
2022-02-14 15:16:59 +08:00
return resp, http.WrapError(constant.ErrDB)
2022-01-26 18:43:01 +08:00
}
2022-02-08 20:24:59 +08:00
log.NewInfo(req.OperationID, groupMembersCount)
resp.MemberNums = groupMembersCount
2022-02-07 19:42:09 +08:00
for _, groupMember := range groupMembers {
resp.Members = append(resp.Members, &open_im_sdk.GroupMemberFullInfo{
2022-03-10 12:01:28 +08:00
GroupID: req.GroupId,
UserID: groupMember.UserID,
RoleLevel: groupMember.RoleLevel,
2022-03-11 18:09:28 +08:00
JoinTime: int32(groupMember.JoinTime.Unix()),
2022-03-10 12:01:28 +08:00
Nickname: groupMember.Nickname,
FaceURL: groupMember.FaceURL,
JoinSource: groupMember.JoinSource,
2022-02-07 19:42:09 +08:00
})
}
2022-02-08 20:24:59 +08:00
resp.Pagination = &open_im_sdk.ResponsePagination{
CurrentPage: req.Pagination.PageNumber,
ShowNumber: req.Pagination.ShowNumber,
}
2022-02-07 19:42:09 +08:00
return resp, nil
}
func (s *groupServer) RemoveGroupMembersCMS(_ context.Context, req *pbGroup.RemoveGroupMembersCMSReq) (*pbGroup.RemoveGroupMembersCMSResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "args:", req.String())
resp := &pbGroup.RemoveGroupMembersCMSResp{}
for _, userId := range req.UserIds {
err := imdb.RemoveGroupMember(req.GroupId, userId)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
resp.Failed = append(resp.Failed, userId)
} else {
resp.Success = append(resp.Success, userId)
}
}
2022-02-17 19:35:17 +08:00
reqKick := &pbGroup.KickGroupMemberReq{
GroupID: req.GroupId,
KickedUserIDList: resp.Success,
Reason: "admin kick",
OperationID: req.OperationID,
OpUserID: req.OpUserId,
}
chat.MemberKickedNotification(reqKick, resp.Success)
2022-02-22 12:27:39 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "success: ", resp.Success)
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "failed: ", resp.Failed)
2022-02-07 19:42:09 +08:00
return resp, nil
}
func (s *groupServer) AddGroupMembersCMS(_ context.Context, req *pbGroup.AddGroupMembersCMSReq) (*pbGroup.AddGroupMembersCMSResp, error) {
2022-02-08 20:24:59 +08:00
log.NewInfo(req.OperationId, utils.GetSelfFuncName(), "args:", req.String())
2022-02-07 19:42:09 +08:00
resp := &pbGroup.AddGroupMembersCMSResp{}
2022-02-12 17:13:31 +08:00
for _, userId := range req.UserIds {
if isExist := imdb.IsExistGroupMember(req.GroupId, userId); isExist {
log.NewError(req.OperationId, utils.GetSelfFuncName(), "user is exist in group", userId, req.GroupId)
resp.Failed = append(resp.Failed, userId)
continue
}
user, err := imdb.GetUserByUserID(userId)
if err != nil {
log.NewError(req.OperationId, utils.GetSelfFuncName(), "GetUserByUserID", err.Error())
resp.Failed = append(resp.Failed, userId)
continue
}
2022-02-07 19:42:09 +08:00
groupMember := db.GroupMember{
GroupID: req.GroupId,
2022-02-12 17:13:31 +08:00
UserID: userId,
Nickname: user.Nickname,
2022-02-14 15:16:59 +08:00
FaceURL: "",
2022-02-07 19:42:09 +08:00
RoleLevel: 1,
JoinTime: time.Time{},
JoinSource: constant.JoinByAdmin,
OperatorUserID: "CmsAdmin",
Ex: "",
}
if err := imdb.InsertIntoGroupMember(groupMember); err != nil {
2022-02-08 20:24:59 +08:00
log.NewError(req.OperationId, utils.GetSelfFuncName(), "InsertIntoGroupMember failed", req.String())
2022-02-12 17:13:31 +08:00
resp.Failed = append(resp.Failed, userId)
2022-03-10 12:01:28 +08:00
} else {
2022-02-12 17:13:31 +08:00
resp.Success = append(resp.Success, userId)
2022-02-07 19:42:09 +08:00
}
}
2022-02-23 15:46:02 +08:00
chat.MemberInvitedNotification(req.OperationId, req.GroupId, req.OpUserId, "admin add you to group", resp.Success)
2022-01-26 18:43:01 +08:00
return resp, nil
}
2022-02-08 20:24:59 +08:00
2022-02-09 19:20:46 +08:00
func (s *groupServer) GetUserReqApplicationList(_ context.Context, req *pbGroup.GetUserReqApplicationListReq) (*pbGroup.GetUserReqApplicationListResp, error) {
2022-03-10 12:01:28 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-02-09 19:20:46 +08:00
resp := &pbGroup.GetUserReqApplicationListResp{}
groupRequests, err := imdb.GetUserReqGroupByUserID(req.UserID)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserReqGroupByUserID failed ", err.Error())
resp.CommonResp = &pbGroup.CommonResp{
ErrCode: constant.ErrDB.ErrCode,
ErrMsg: constant.ErrDB.ErrMsg,
}
return resp, nil
}
for _, groupReq := range groupRequests {
node := open_im_sdk.GroupRequest{UserInfo: &open_im_sdk.PublicUserInfo{}, GroupInfo: &open_im_sdk.GroupInfo{}}
group, err := imdb.GetGroupInfoByGroupID(groupReq.GroupID)
if err != nil {
log.Error(req.OperationID, "GetGroupInfoByGroupID failed ", err.Error(), groupReq.GroupID)
continue
}
user, err := imdb.GetUserByUserID(groupReq.UserID)
if err != nil {
log.Error(req.OperationID, "GetUserByUserID failed ", err.Error(), groupReq.UserID)
continue
}
cp.GroupRequestDBCopyOpenIM(&node, &groupReq)
cp.UserDBCopyOpenIMPublicUser(node.UserInfo, user)
cp.GroupDBCopyOpenIM(node.GroupInfo, group)
resp.GroupRequestList = append(resp.GroupRequestList, &node)
}
resp.CommonResp = &pbGroup.CommonResp{
ErrCode: 0,
ErrMsg: "",
}
return resp, nil
2022-02-14 10:46:32 +08:00
}
2022-03-24 15:33:30 +08:00
func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGroupReq) (*pbGroup.DismissGroupResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String())
if !token_verify.IsMangerUserID(req.OpUserID) && !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) {
log.NewError(req.OperationID, "verify failed ", req.OpUserID, req.GroupID)
return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
err := imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusDismissed)
if err != nil {
log.NewError(req.OperationID, "OperateGroupStatus failed ", req.GroupID, constant.GroupStatusDismissed)
return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
chat.GroupDismissedNotification(req)
err = imdb.DeleteGroupMemberByGroupID(req.GroupID)
if err != nil {
log.NewError(req.OperationID, "DeleteGroupMemberByGroupID failed ", req.GroupID)
return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""})
return &pbGroup.DismissGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
}
2022-03-29 09:34:45 +08:00
// rpc MuteGroupMember(MuteGroupMemberReq) returns(MuteGroupMemberResp);
// rpc CancelMuteGroupMember(CancelMuteGroupMemberReq) returns(CancelMuteGroupMemberResp);
// rpc MuteGroup(MuteGroupReq) returns(MuteGroupResp);
// rpc CancelMuteGroup(CancelMuteGroupReq) returns(CancelMuteGroupResp);
func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String())
2022-03-29 16:32:25 +08:00
if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsMangerUserID(req.OpUserID) {
2022-03-29 11:48:17 +08:00
log.Error(req.OperationID, "verify failed ", req.GroupID, req.UserID)
2022-03-29 09:34:45 +08:00
return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.UserID}
2022-03-29 17:03:06 +08:00
groupMemberInfo.MuteEndTime = time.Unix(int64(time.Now().Second())+int64(req.MutedSeconds), time.Now().UnixNano())
2022-03-29 09:34:45 +08:00
err := imdb.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil {
log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo)
return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
2022-03-29 16:04:15 +08:00
chat.GroupMemberMutedNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID, req.MutedSeconds)
2022-03-29 09:34:45 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""})
return &pbGroup.MuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
}
func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String())
2022-03-29 16:32:25 +08:00
if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsMangerUserID(req.OpUserID) {
2022-03-29 09:34:45 +08:00
log.Error(req.OperationID, "verify failed ", req.OpUserID, req.GroupID)
return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
groupMemberInfo := db.GroupMember{GroupID: req.GroupID, UserID: req.UserID}
groupMemberInfo.MuteEndTime = time.Unix(0, 0)
err := imdb.UpdateGroupMemberInfo(groupMemberInfo)
if err != nil {
log.Error(req.OperationID, "UpdateGroupMemberInfo failed ", err.Error(), groupMemberInfo)
return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
2022-03-29 16:04:15 +08:00
chat.GroupMemberCancelMutedNotification(req.OperationID, req.OpUserID, req.GroupID, req.UserID)
2022-03-29 09:34:45 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""})
return &pbGroup.CancelMuteGroupMemberResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
}
func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq) (*pbGroup.MuteGroupResp, error) {
2022-03-29 11:48:17 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String())
if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsMangerUserID(req.OpUserID) {
log.Error(req.OperationID, "verify failed ", req.GroupID, req.GroupID)
return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
err := imdb.OperateGroupStatus(req.GroupID, constant.GroupStatusMuted)
if err != nil {
log.Error(req.OperationID, "OperateGroupStatus failed ", err.Error(), req.GroupID, constant.GroupStatusMuted)
return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
2022-03-29 16:04:15 +08:00
chat.GroupMutedNotification(req.OperationID, req.OpUserID, req.GroupID)
2022-03-29 11:48:17 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""})
return &pbGroup.MuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
2022-03-29 09:34:45 +08:00
}
func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMuteGroupReq) (*pbGroup.CancelMuteGroupResp, error) {
2022-03-29 11:48:17 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc args ", req.String())
if !imdb.IsGroupOwnerAdmin(req.GroupID, req.OpUserID) && !token_verify.IsMangerUserID(req.OpUserID) {
log.Error(req.OperationID, "verify failed ", req.OpUserID, req.GroupID)
return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
2022-03-29 18:36:24 +08:00
err := imdb.UpdateGroupInfoDefaultZero(req.GroupID, map[string]interface{}{"status": constant.GroupOk})
2022-03-29 11:48:17 +08:00
if err != nil {
2022-03-29 18:36:24 +08:00
log.Error(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), req.GroupID)
2022-03-29 11:48:17 +08:00
return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
2022-03-29 16:04:15 +08:00
chat.GroupCancelMutedNotification(req.OperationID, req.OpUserID, req.GroupID)
2022-03-29 11:48:17 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return ", pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""})
return &pbGroup.CancelMuteGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: 0, ErrMsg: ""}}, nil
2022-03-29 09:34:45 +08:00
}