This commit is contained in:
withchao 2023-01-10 18:05:13 +08:00
parent 8f51749786
commit 198cae5ade

View File

@ -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))