Merge remote-tracking branch 'origin/errcode' into errcode

This commit is contained in:
Gordon 2023-03-24 16:40:13 +08:00
commit 7e7d5fc41b
10 changed files with 971 additions and 1004 deletions

View File

@ -2,6 +2,7 @@ package user
import ( import (
"context" "context"
"time"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
@ -153,18 +154,24 @@ func (s *userServer) GetPaginationUsers(ctx context.Context, req *pbuser.GetPagi
} }
resp.Total = int32(total) resp.Total = int32(total)
resp.Users, err = (*convert.DBUser)(nil).DB2PB(usersDB) resp.Users, err = (*convert.DBUser)(nil).DB2PB(usersDB)
return resp, nil return resp, err
} }
// ok // ok
func (s *userServer) UserRegister(ctx context.Context, req *pbuser.UserRegisterReq) (resp *pbuser.UserRegisterResp, err error) { func (s *userServer) UserRegister(ctx context.Context, req *pbuser.UserRegisterReq) (resp *pbuser.UserRegisterResp, err error) {
resp = &pbuser.UserRegisterResp{} resp = &pbuser.UserRegisterResp{}
if len(req.Users) == 0 {
return nil, errs.ErrArgs.Wrap("users is empty")
}
if utils.DuplicateAny(req.Users, func(e *sdkws.UserInfo) string { return e.UserID }) { if utils.DuplicateAny(req.Users, func(e *sdkws.UserInfo) string { return e.UserID }) {
return nil, errs.ErrArgs.Wrap("userID repeated") return nil, errs.ErrArgs.Wrap("userID repeated")
} }
userIDs := make([]string, 0) userIDs := make([]string, 0)
for _, v := range req.Users { for _, user := range req.Users {
userIDs = append(userIDs, v.UserID) if user.UserID == "" {
return nil, errs.ErrArgs.Wrap("userID is empty")
}
userIDs = append(userIDs, user.UserID)
} }
exist, err := s.IsExist(ctx, userIDs) exist, err := s.IsExist(ctx, userIDs)
if err != nil { if err != nil {
@ -173,12 +180,20 @@ func (s *userServer) UserRegister(ctx context.Context, req *pbuser.UserRegisterR
if exist { if exist {
return nil, errs.ErrRegisteredAlready.Wrap("userID registered already") return nil, errs.ErrRegisteredAlready.Wrap("userID registered already")
} }
users, err := (*convert.PBUser)(nil).PB2DB(req.Users) now := time.Now()
if err != nil { users := make([]*tablerelation.UserModel, 0, len(req.Users))
return nil, err for _, user := range req.Users {
users = append(users, &tablerelation.UserModel{
UserID: user.UserID,
Nickname: user.Nickname,
FaceURL: user.FaceURL,
Ex: user.Ex,
CreateTime: now,
AppMangerLevel: user.AppMangerLevel,
GlobalRecvMsgOpt: user.GlobalRecvMsgOpt,
})
} }
err = s.Create(ctx, users) if err := s.Create(ctx, users); err != nil {
if err != nil {
return nil, err return nil, err
} }
return resp, nil return resp, nil

View File

@ -168,11 +168,6 @@ const (
MinioDurationTimes = 3600 MinioDurationTimes = 3600
//Aws //Aws
AwsDurationTimes = 3600 AwsDurationTimes = 3600
// verificationCode used for
VerificationCodeForRegister = 1
VerificationCodeForReset = 2
VerificationCodeForRegisterSuffix = "_forRegister"
VerificationCodeForResetSuffix = "_forReset"
//callbackCommand //callbackCommand
CallbackBeforeSendSingleMsgCommand = "callbackBeforeSendSingleMsgCommand" CallbackBeforeSendSingleMsgCommand = "callbackBeforeSendSingleMsgCommand"

View File

@ -13,8 +13,9 @@ import (
pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg"
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
"github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
"github.com/golang/protobuf/jsonpb" "github.com/gogo/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
"google.golang.org/protobuf/proto"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
) )
@ -212,28 +213,30 @@ func (c *cache) DeleteTokenByUidPid(ctx context.Context, userID string, platform
return utils.Wrap1(c.rdb.HDel(ctx, key, fields...).Err()) return utils.Wrap1(c.rdb.HDel(ctx, key, fields...).Err())
} }
func (c *cache) GetMessagesBySeq(ctx context.Context, userID string, seqList []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error) { func (c *cache) GetMessagesBySeq(ctx context.Context, userID string, seqs []int64) (seqMsgs []*sdkws.MsgData, failedSeqs []int64, err error) {
var errResult error pipe := c.rdb.Pipeline()
for _, v := range seqList { for _, v := range seqs {
//MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1
key := messageCache + userID + "_" + strconv.Itoa(int(v)) key := messageCache + userID + "_" + strconv.Itoa(int(v))
result, err := c.rdb.Get(ctx, key).Result() if err := pipe.Get(ctx, key).Err(); err != nil && err != redis.Nil {
if err != nil { return nil, nil, err
errResult = err }
failedSeqList = append(failedSeqList, v) }
result, err := pipe.Exec(ctx)
for i, v := range result {
if v.Err() != nil {
failedSeqs = append(failedSeqs, seqs[i])
} else { } else {
msg := sdkws.MsgData{} msg := sdkws.MsgData{}
err = jsonpb.UnmarshalString(result, &msg) err = jsonpb.UnmarshalString(v.String(), &msg)
if err != nil { if err != nil {
errResult = err failedSeqs = append(failedSeqs, seqs[i])
failedSeqList = append(failedSeqList, v)
} else { } else {
seqMsg = append(seqMsg, &msg) seqMsgs = append(seqMsgs, &msg)
}
} }
} }
return seqMsg, failedSeqList, errResult }
return seqMsgs, failedSeqs, err
} }
func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) (int, error) { func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) (int, error) {
@ -258,12 +261,14 @@ func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []
} }
func (c *cache) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error { func (c *cache) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error {
pipe := c.rdb.Pipeline()
for _, v := range msgList { for _, v := range msgList {
if err := c.rdb.Del(ctx, messageCache+userID+"_"+strconv.Itoa(int(v.MsgData.Seq))).Err(); err != nil { if err := pipe.Del(ctx, messageCache+userID+"_"+strconv.Itoa(int(v.MsgData.Seq))).Err(); err != nil {
return utils.Wrap1(err) return utils.Wrap1(err)
} }
} }
return nil _, err := pipe.Exec(ctx)
return utils.Wrap1(err)
} }
func (c *cache) CleanUpOneUserAllMsg(ctx context.Context, userID string) error { func (c *cache) CleanUpOneUserAllMsg(ctx context.Context, userID string) error {
@ -275,12 +280,14 @@ func (c *cache) CleanUpOneUserAllMsg(ctx context.Context, userID string) error {
if err != nil { if err != nil {
return utils.Wrap1(err) return utils.Wrap1(err)
} }
pipe := c.rdb.Pipeline()
for _, v := range vals { for _, v := range vals {
if err := c.rdb.Del(ctx, v).Err(); err != nil { if err := pipe.Del(ctx, v).Err(); err != nil {
return utils.Wrap1(err) return utils.Wrap1(err)
} }
} }
return nil _, err = pipe.Exec(ctx)
return utils.Wrap1(err)
} }
func (c *cache) HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) { func (c *cache) HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) {
@ -306,26 +313,31 @@ func (c *cache) HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, push
return false, nil return false, nil
} }
if isInviteSignal { if isInviteSignal {
pipe := c.rdb.Pipeline()
for _, userID := range inviteeUserIDs { for _, userID := range inviteeUserIDs {
timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout)
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
keyList := signalListCache + userID keys := signalListCache + userID
err = c.rdb.LPush(ctx, keyList, msg.ClientMsgID).Err() err = pipe.LPush(ctx, keys, msg.ClientMsgID).Err()
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
err = c.rdb.Expire(ctx, keyList, time.Duration(timeout)*time.Second).Err() err = pipe.Expire(ctx, keys, time.Duration(timeout)*time.Second).Err()
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
key := signalCache + msg.ClientMsgID key := signalCache + msg.ClientMsgID
err = c.rdb.Set(ctx, key, msg.Content, time.Duration(timeout)*time.Second).Err() err = pipe.Set(ctx, key, msg.Content, time.Duration(timeout)*time.Second).Err()
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
} }
_, err := pipe.Exec(ctx)
if err != nil {
return false, utils.Wrap1(err)
}
} }
return true, nil return true, nil
} }
@ -367,8 +379,8 @@ func (c *cache) DelUserSignalList(ctx context.Context, userID string) error {
return utils.Wrap1(c.rdb.Del(ctx, signalListCache+userID).Err()) return utils.Wrap1(c.rdb.Del(ctx, signalListCache+userID).Err())
} }
func (c *cache) DelMsgFromCache(ctx context.Context, userID string, seqList []int64) error { func (c *cache) DelMsgFromCache(ctx context.Context, userID string, seqs []int64) error {
for _, seq := range seqList { for _, seq := range seqs {
key := messageCache + userID + "_" + strconv.Itoa(int(seq)) key := messageCache + userID + "_" + strconv.Itoa(int(seq))
result, err := c.rdb.Get(ctx, key).Result() result, err := c.rdb.Get(ctx, key).Result()
if err != nil { if err != nil {

View File

@ -17,7 +17,7 @@ var errIndex = errors.New("err index")
type metaCache interface { type metaCache interface {
ExecDel(ctx context.Context) error ExecDel(ctx context.Context) error
// delete key rapid // delete key rapid
DeleteKey(ctx context.Context, key string) error DelKey(ctx context.Context, key string) error
AddKeys(keys ...string) AddKeys(keys ...string)
GetPreDeleteKeys() []string GetPreDeleteKeys() []string
} }
@ -38,7 +38,7 @@ func (m *metaCacheRedis) ExecDel(ctx context.Context) error {
return nil return nil
} }
func (m *metaCacheRedis) DeleteKey(ctx context.Context, key string) error { func (m *metaCacheRedis) DelKey(ctx context.Context, key string) error {
return m.rcClient.TagAsDeleted2(ctx, key) return m.rcClient.TagAsDeleted2(ctx, key)
} }
@ -110,6 +110,7 @@ func batchGetCache[T any](ctx context.Context, rcClient *rockscache.Client, keys
return nil, err return nil, err
} }
for _, v := range batchMap { for _, v := range batchMap {
if v != "" {
var t T var t T
err = json.Unmarshal([]byte(v), &t) err = json.Unmarshal([]byte(v), &t)
if err != nil { if err != nil {
@ -117,5 +118,6 @@ func batchGetCache[T any](ctx context.Context, rcClient *rockscache.Client, keys
} }
tArrays = append(tArrays, t) tArrays = append(tArrays, t)
} }
}
return tArrays, nil return tArrays, nil
} }

View File

@ -3,11 +3,12 @@ package log
import ( import (
"context" "context"
"fmt" "fmt"
"time"
"github.com/pkg/errors" "github.com/pkg/errors"
"gorm.io/gorm" "gorm.io/gorm"
gormLogger "gorm.io/gorm/logger" gormLogger "gorm.io/gorm/logger"
gormUtils "gorm.io/gorm/utils" gormUtils "gorm.io/gorm/utils"
"time"
) )
type SqlLogger struct { type SqlLogger struct {
@ -42,7 +43,7 @@ func (SqlLogger) Error(ctx context.Context, msg string, args ...interface{}) {
ZError(ctx, msg, nil, args) ZError(ctx, msg, nil, args)
} }
func (l SqlLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { func (l *SqlLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
if l.LogLevel <= gormLogger.Silent { if l.LogLevel <= gormLogger.Silent {
return return
} }

File diff suppressed because it is too large Load Diff

View File

@ -65,15 +65,10 @@ message UserInfo{
string userID = 1; string userID = 1;
string nickname = 2; string nickname = 2;
string faceURL = 3; string faceURL = 3;
int32 gender = 4; string ex = 4;
string phoneNumber = 5; int64 createTime = 5;
uint32 birth = 6; int32 appMangerLevel = 6;
string email = 7; int32 globalRecvMsgOpt = 7;
string ex = 8;
int64 createTime = 9;
int32 appMangerLevel = 10;
int32 globalRecvMsgOpt = 11;
int64 birthday = 13;
} }
message FriendInfo{ message FriendInfo{

View File

@ -2,6 +2,8 @@ package check
import ( import (
"context" "context"
"strings"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
"github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry"
@ -10,7 +12,6 @@ import (
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/user" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/user"
"github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
"google.golang.org/grpc" "google.golang.org/grpc"
"strings"
) )
func NewUserCheck(client discoveryregistry.SvcDiscoveryRegistry) *UserCheck { func NewUserCheck(client discoveryregistry.SvcDiscoveryRegistry) *UserCheck {
@ -78,7 +79,6 @@ func (u *UserCheck) GetPublicUserInfos(ctx context.Context, userIDs []string, co
UserID: e.UserID, UserID: e.UserID,
Nickname: e.Nickname, Nickname: e.Nickname,
FaceURL: e.FaceURL, FaceURL: e.FaceURL,
Gender: e.Gender,
Ex: e.Ex, Ex: e.Ex,
} }
}), nil }), nil

View File

@ -129,11 +129,9 @@ func (db *DBFriendRequest) DB2PB(ctx context.Context, friendRequests []*relation
pbFriendRequest.FromUserID = users[v.FromUserID].UserID pbFriendRequest.FromUserID = users[v.FromUserID].UserID
pbFriendRequest.FromNickname = users[v.FromUserID].Nickname pbFriendRequest.FromNickname = users[v.FromUserID].Nickname
pbFriendRequest.FromFaceURL = users[v.FromUserID].FaceURL pbFriendRequest.FromFaceURL = users[v.FromUserID].FaceURL
pbFriendRequest.FromGender = users[v.FromUserID].Gender
pbFriendRequest.ToUserID = users[v.ToUserID].UserID pbFriendRequest.ToUserID = users[v.ToUserID].UserID
pbFriendRequest.ToNickname = users[v.ToUserID].Nickname pbFriendRequest.ToNickname = users[v.ToUserID].Nickname
pbFriendRequest.ToFaceURL = users[v.ToUserID].FaceURL pbFriendRequest.ToFaceURL = users[v.ToUserID].FaceURL
pbFriendRequest.ToGender = users[v.ToUserID].Gender
pbFriendRequest.CreateTime = v.CreateTime.Unix() pbFriendRequest.CreateTime = v.CreateTime.Unix()
pbFriendRequest.HandleTime = v.HandleTime.Unix() pbFriendRequest.HandleTime = v.HandleTime.Unix()
pbFriendRequest.HandlerUserID = v.HandlerUserID pbFriendRequest.HandlerUserID = v.HandlerUserID
@ -162,14 +160,12 @@ func (db *DBFriendRequest) Convert(ctx context.Context) (*sdk.FriendRequest, err
} }
pbFriendRequest.FromNickname = user.Nickname pbFriendRequest.FromNickname = user.Nickname
pbFriendRequest.FromFaceURL = user.FaceURL pbFriendRequest.FromFaceURL = user.FaceURL
pbFriendRequest.FromGender = user.Gender
user, err = db.userCheck.GetUserInfo(ctx, db.ToUserID) user, err = db.userCheck.GetUserInfo(ctx, db.ToUserID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
pbFriendRequest.ToNickname = user.Nickname pbFriendRequest.ToNickname = user.Nickname
pbFriendRequest.ToFaceURL = user.FaceURL pbFriendRequest.ToFaceURL = user.FaceURL
pbFriendRequest.ToGender = user.Gender
pbFriendRequest.CreateTime = db.CreateTime.Unix() pbFriendRequest.CreateTime = db.CreateTime.Unix()
pbFriendRequest.HandleTime = db.HandleTime.Unix() pbFriendRequest.HandleTime = db.HandleTime.Unix()
return pbFriendRequest, nil return pbFriendRequest, nil
@ -474,7 +470,6 @@ func (*DBUser) DB2PB(users []*relation.UserModel) (PBUsers []*sdk.UserInfo, err
func (pb *PBUser) Convert() (*relation.UserModel, error) { func (pb *PBUser) Convert() (*relation.UserModel, error) {
dst := &relation.UserModel{} dst := &relation.UserModel{}
utils.CopyStructFields(dst, pb) utils.CopyStructFields(dst, pb)
dst.Birth = utils.UnixSecondToTime(pb.Birthday)
dst.CreateTime = utils.UnixSecondToTime(pb.CreateTime) dst.CreateTime = utils.UnixSecondToTime(pb.CreateTime)
return dst, nil return dst, nil
} }
@ -483,7 +478,6 @@ func (db *DBUser) Convert() (*sdk.UserInfo, error) {
dst := &sdk.UserInfo{} dst := &sdk.UserInfo{}
utils.CopyStructFields(dst, db) utils.CopyStructFields(dst, db)
dst.CreateTime = db.CreateTime.Unix() dst.CreateTime = db.CreateTime.Unix()
dst.Birthday = db.Birth.Unix()
return dst, nil return dst, nil
} }

View File

@ -2,6 +2,7 @@ package notification
import ( import (
"context" "context"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
@ -196,7 +197,7 @@ func (c *Check) groupNotification(ctx context.Context, contentType int32, m prot
} }
// 创建群后调用 // 创建群后调用
func (c *Check) GroupCreatedNotification(ctx context.Context, groupID string, initMemberList []string) { func (c *Check) GroupCreatedNotification(ctx context.Context, groupID string, initMembers []string) {
GroupCreatedTips := sdkws.GroupCreatedTips{Group: &sdkws.GroupInfo{}, GroupCreatedTips := sdkws.GroupCreatedTips{Group: &sdkws.GroupInfo{},
OpUser: &sdkws.GroupMemberFullInfo{}, GroupOwnerUser: &sdkws.GroupMemberFullInfo{}} OpUser: &sdkws.GroupMemberFullInfo{}, GroupOwnerUser: &sdkws.GroupMemberFullInfo{}}
if err := c.setOpUserInfo(ctx, groupID, GroupCreatedTips.OpUser); err != nil { if err := c.setOpUserInfo(ctx, groupID, GroupCreatedTips.OpUser); err != nil {
@ -210,7 +211,7 @@ func (c *Check) GroupCreatedNotification(ctx context.Context, groupID string, in
if err := c.setGroupOwnerInfo(ctx, groupID, GroupCreatedTips.GroupOwnerUser); err != nil { if err := c.setGroupOwnerInfo(ctx, groupID, GroupCreatedTips.GroupOwnerUser); err != nil {
return return
} }
for _, v := range initMemberList { for _, v := range initMembers {
var groupMemberInfo sdkws.GroupMemberFullInfo var groupMemberInfo sdkws.GroupMemberFullInfo
if err := c.setGroupMemberInfo(ctx, groupID, v, &groupMemberInfo); err != nil { if err := c.setGroupMemberInfo(ctx, groupID, v, &groupMemberInfo); err != nil {
continue continue