mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-05-05 09:46:49 +08:00
group
This commit is contained in:
parent
8f51749786
commit
198cae5ade
@ -15,7 +15,9 @@ import (
|
|||||||
cp "Open_IM/pkg/common/utils"
|
cp "Open_IM/pkg/common/utils"
|
||||||
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
"github.com/OpenIMSDK/getcdv3"
|
"github.com/OpenIMSDK/getcdv3"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
"path"
|
"path"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
|
|
||||||
@ -75,10 +77,18 @@ func UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.Una
|
|||||||
trace_log.SetContextInfo(ctx, funcName, err, "rpc req", req.(interface{ String() string }).String())
|
trace_log.SetContextInfo(ctx, funcName, err, "rpc req", req.(interface{ String() string }).String())
|
||||||
resp, err = handler(ctx, req)
|
resp, err = handler(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
constant.SetErrorForResp(err, resp.(interface {
|
errInfo := constant.ToAPIErrWithErr(err)
|
||||||
GetCommonResp() *open_im_sdk.CommonResp
|
var code codes.Code
|
||||||
}).GetCommonResp())
|
if errInfo.ErrCode == 0 {
|
||||||
err = nil
|
code = codes.Unknown
|
||||||
|
} else {
|
||||||
|
code = codes.Code(errInfo.ErrCode)
|
||||||
|
}
|
||||||
|
sta, err := status.New(code, errInfo.ErrMsg).WithDetails(wrapperspb.String(errInfo.DetailErrMsg))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sta.Err()
|
||||||
}
|
}
|
||||||
trace_log.SetContextInfo(ctx, funcName, err, "rpc resp", resp.(interface{ String() string }).String())
|
trace_log.SetContextInfo(ctx, funcName, err, "rpc resp", resp.(interface{ String() string }).String())
|
||||||
return
|
return
|
||||||
@ -147,9 +157,9 @@ func (s *groupServer) Run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
|
func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
|
||||||
resp := &pbGroup.CreateGroupResp{CommonResp: &open_im_sdk.CommonResp{}, GroupInfo: &open_im_sdk.GroupInfo{}}
|
resp := &pbGroup.CreateGroupResp{GroupInfo: &open_im_sdk.GroupInfo{}}
|
||||||
if err := token_verify.CheckAccessV2(ctx, req.OpUserID, req.OwnerUserID); err != nil {
|
if err := token_verify.CheckAccessV2(ctx, req.OpUserID, req.OwnerUserID); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var groupOwnerNum int
|
var groupOwnerNum int
|
||||||
var userIDs []string
|
var userIDs []string
|
||||||
@ -164,27 +174,27 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
|
|||||||
userIDs = append(userIDs, req.OwnerUserID)
|
userIDs = append(userIDs, req.OwnerUserID)
|
||||||
}
|
}
|
||||||
if groupOwnerNum != 1 {
|
if groupOwnerNum != 1 {
|
||||||
return resp, utils.Wrap(constant.ErrArgs, "")
|
return nil, utils.Wrap(constant.ErrArgs, "")
|
||||||
}
|
}
|
||||||
if utils.IsRepeatStringSlice(userIDs) {
|
if utils.IsRepeatStringSlice(userIDs) {
|
||||||
return resp, utils.Wrap(constant.ErrArgs, "")
|
return nil, utils.Wrap(constant.ErrArgs, "")
|
||||||
}
|
}
|
||||||
users, err := rocksCache.GetUserInfoFromCacheBatch(ctx, userIDs)
|
users, err := rocksCache.GetUserInfoFromCacheBatch(ctx, userIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(users) != len(userIDs) {
|
if len(users) != len(userIDs) {
|
||||||
return resp, utils.Wrap(constant.ErrArgs, "")
|
return nil, utils.Wrap(constant.ErrArgs, "")
|
||||||
}
|
}
|
||||||
userMap := make(map[string]*imdb.User)
|
userMap := make(map[string]*imdb.User)
|
||||||
for i, user := range users {
|
for i, user := range users {
|
||||||
userMap[user.UserID] = users[i]
|
userMap[user.UserID] = users[i]
|
||||||
}
|
}
|
||||||
if err := s.DelGroupAndUserCache(ctx, "", userIDs); err != nil {
|
if err := s.DelGroupAndUserCache(ctx, "", userIDs); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := callbackBeforeCreateGroup(ctx, req); err != nil {
|
if err := callbackBeforeCreateGroup(ctx, req); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
groupId := req.GroupInfo.GroupID
|
groupId := req.GroupInfo.GroupID
|
||||||
if groupId == "" {
|
if groupId == "" {
|
||||||
@ -215,24 +225,24 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
|
|||||||
}
|
}
|
||||||
if req.OwnerUserID == "" {
|
if req.OwnerUserID == "" {
|
||||||
if err := joinGroup(req.OwnerUserID, constant.GroupOwner); err != nil {
|
if err := joinGroup(req.OwnerUserID, constant.GroupOwner); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, info := range req.InitMemberList {
|
for _, info := range req.InitMemberList {
|
||||||
if err := joinGroup(info.UserID, info.RoleLevel); err != nil {
|
if err := joinGroup(info.UserID, info.RoleLevel); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := (*imdb.GroupMember)(nil).Create(ctx, groupMembers); err != nil {
|
if err := (*imdb.GroupMember)(nil).Create(ctx, groupMembers); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := db.DB.CreateSuperGroup(groupId, userIDs, len(userIDs)); err != nil {
|
if err := db.DB.CreateSuperGroup(groupId, userIDs, len(userIDs)); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := (*imdb.Group)(nil).Create(ctx, []*imdb.Group{&groupInfo}); err != nil {
|
if err := (*imdb.Group)(nil).Create(ctx, []*imdb.Group{&groupInfo}); err != nil {
|
||||||
return resp, err
|
return nil, err
|
||||||
}
|
}
|
||||||
utils.CopyStructFields(resp.GroupInfo, groupInfo)
|
utils.CopyStructFields(resp.GroupInfo, groupInfo)
|
||||||
resp.GroupInfo.MemberCount = uint32(len(userIDs))
|
resp.GroupInfo.MemberCount = uint32(len(userIDs))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user