diff --git a/.golangci.yml b/.golangci.yml index 9c7960642..7dbb642a8 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -169,12 +169,12 @@ linters-settings: - '*.Embedded' - '*.External' - # forbidigo: + forbidigo: # # Forbid the following identifiers (identifiers are written using regexp): - # forbid: - # - ^print.*$ - # - 'fmt\.Print.*' - # - fmt.Println.* # too much log noise + forbid: + # - ^print.*$ + - 'fmt\.Print.*' + - fmt.Println.* # too much log noise # - ginkgo\\.F.* # these are used just for local development # # Exclude godoc examples from forbidigo checks. Default is true. # exclude_godoc_examples: false @@ -454,7 +454,6 @@ linters-settings: # # specify an error message to output when a blacklisted package is used # - github.com/Sirupsen/logrus: "logging is allowed only by logutils.Log" - importas: # if set to `true`, force to use alias. no-unaliased: true @@ -672,6 +671,7 @@ linters-settings: - errors.New( - errors.Unwrap( - .Wrap( + - .WrapMsg( - .Wrapf( - .WithMessage( - .WithMessagef( @@ -679,6 +679,7 @@ linters-settings: ignorePackageGlobs: - encoding/* - github.com/pkg/* + - github.com/openimsdk/* wsl: # If true append is only allowed to be cuddled if appending value is @@ -705,7 +706,6 @@ linters-settings: # Allow only slices initialized with a length of zero. Default is false. always: false - # The custom section can be used to define linter plugins to be loaded at runtime. See README doc # for more info. #custom: @@ -731,6 +731,7 @@ linters: - errcheck - decorder - ineffassign + - forbidigo - revive - reassign - tparallel diff --git a/internal/rpc/friend/friend.go b/internal/rpc/friend/friend.go index 25b8ea22c..7b5ed55ed 100644 --- a/internal/rpc/friend/friend.go +++ b/internal/rpc/friend/friend.go @@ -86,6 +86,7 @@ func Start(config *config.GlobalConfig, client registry.SvcDiscoveryRegistry, se &msgRpcClient, notification.WithRpcFunc(userRpcClient.GetUsersInfo), ) + // Register Friend server with refactored MongoDB and Redis integrations pbfriend.RegisterFriendServer(server, &friendServer{ friendDatabase: controller.NewFriendDatabase( @@ -128,7 +129,7 @@ func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbfriend.Apply return nil, err } if in1 && in2 { - return nil, errs.ErrRelationshipAlready.WrapMsg("has f") + return nil, errs.ErrRelationshipAlready.WrapMsg("already friends has f") } if err = s.friendDatabase.AddFriendRequest(ctx, req.FromUserID, req.ToUserID, req.ReqMsg, req.Ex); err != nil { return nil, err diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index 8cbc6b47a..7405b2780 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -298,6 +298,7 @@ func CallbackAfterTransferGroupOwner(ctx context.Context, cfg *GroupEventCallbac } return nil } + func CallbackBeforeInviteUserToGroup(ctx context.Context, cfg *GroupEventCallbackConfig, req *group.InviteUserToGroupReq) (err error) { if !cfg.BeforeCreateGroup.Enable { return nil diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 75ca4445c..13ab05aad 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -70,18 +70,22 @@ func Start(config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryReg if err != nil { return err } + groupDB, err := mgo.NewGroupMongo(mongo.GetDatabase(config.Mongo.Database)) if err != nil { return err } + groupMemberDB, err := mgo.NewGroupMember(mongo.GetDatabase(config.Mongo.Database)) if err != nil { return err } + groupRequestDB, err := mgo.NewGroupRequestMgo(mongo.GetDatabase(config.Mongo.Database)) if err != nil { return err } + userRpcClient := rpcclient.NewUserRpcClient(client, config.RpcRegisterName.OpenImUserName, &config.Manager, &config.IMAdmin) msgRpcClient := rpcclient.NewMessageRpcClient(client, config.RpcRegisterName.OpenImMsgName) conversationRpcClient := rpcclient.NewConversationRpcClient(client, config.RpcRegisterName.OpenImConversationName) @@ -206,13 +210,16 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbgroup.CreateGroupR if !utils.Contain(opUserID, userIDs...) { userIDs = append(userIDs, opUserID) } + if utils.Duplicate(userIDs) { return nil, errs.ErrArgs.WrapMsg("group member repeated") } + userMap, err := s.User.GetUsersInfoMap(ctx, userIDs) if err != nil { return nil, err } + if len(userMap) != len(userIDs) { return nil, errs.ErrUserIDNotFound.WrapMsg("user not found") } @@ -397,9 +404,11 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite if err != nil { return nil, err } + if len(userMap) != len(req.InvitedUserIDs) { return nil, errs.ErrRecordNotFound.WrapMsg("user not found") } + var groupMember *relationtb.GroupMemberModel var opUserID string if !authverify.IsAppManagerUid(ctx, &s.config.Manager, &s.config.IMAdmin) { diff --git a/internal/rpc/group/super_group.go b/internal/rpc/group/super_group.go index b3c32168c..1d3fd85a6 100644 --- a/internal/rpc/group/super_group.go +++ b/internal/rpc/group/super_group.go @@ -23,9 +23,9 @@ import ( ) func (s *groupServer) GetJoinedSuperGroupList(context.Context, *pbgroup.GetJoinedSuperGroupListReq) (*pbgroup.GetJoinedSuperGroupListResp, error) { - return nil, errs.Wrap(errors.New("GetJoinedSuperGroupList is deprecated"), "This feature is deprecated and no longer supported.") + return nil, errs.WrapMsg(errors.New("GetJoinedSuperGroupList is deprecated"), "This feature is deprecated and no longer supported.") } func (s *groupServer) GetSuperGroupsInfo(context.Context, *pbgroup.GetSuperGroupsInfoReq) (resp *pbgroup.GetSuperGroupsInfoResp, err error) { - return nil, errs.Wrap(errors.New("GetSuperGroupsInfo is deprecated"), "This feature is deprecated and no longer supported.") + return nil, errs.WrapMsg(errors.New("GetSuperGroupsInfo is deprecated"), "This feature is deprecated and no longer supported.") } diff --git a/internal/rpc/msg/as_read.go b/internal/rpc/msg/as_read.go index faa1ad411..61e1b4714 100644 --- a/internal/rpc/msg/as_read.go +++ b/internal/rpc/msg/as_read.go @@ -114,6 +114,7 @@ func (m *msgServer) MarkMsgsAsRead(ctx context.Context, req *msg.MarkMsgsAsReadR if err != nil && errs.Unwrap(err) != redis.Nil { return } + if hasReadSeq > currentHasReadSeq { err = m.MsgDatabase.SetHasReadSeq(ctx, req.UserID, req.ConversationID, hasReadSeq) if err != nil { diff --git a/internal/rpc/msg/delete.go b/internal/rpc/msg/delete.go index 66798c12e..6bca3ad19 100644 --- a/internal/rpc/msg/delete.go +++ b/internal/rpc/msg/delete.go @@ -42,11 +42,8 @@ func (m *msgServer) validateDeleteSyncOpt(opt *msg.DeleteSyncOpt) (isSyncSelf, i return opt.IsSyncSelf, opt.IsSyncOther } -func (m *msgServer) ClearConversationsMsg( - ctx context.Context, - req *msg.ClearConversationsMsgReq, -) (*msg.ClearConversationsMsgResp, error) { - if err := authverify.CheckAccessV3(ctx, req.UserID, m.config); err != nil { +func (m *msgServer) ClearConversationsMsg(ctx context.Context, req *msg.ClearConversationsMsgReq) (*msg.ClearConversationsMsgResp, error) { + if err := authverify.CheckAccessV3(ctx, req.UserID, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } if err := m.clearConversation(ctx, req.ConversationIDs, req.UserID, req.DeleteSyncOpt); err != nil { @@ -55,11 +52,8 @@ func (m *msgServer) ClearConversationsMsg( return &msg.ClearConversationsMsgResp{}, nil } -func (m *msgServer) UserClearAllMsg( - ctx context.Context, - req *msg.UserClearAllMsgReq, -) (*msg.UserClearAllMsgResp, error) { - if err := authverify.CheckAccessV3(ctx, req.UserID, m.config); err != nil { +func (m *msgServer) UserClearAllMsg(ctx context.Context, req *msg.UserClearAllMsgReq) (*msg.UserClearAllMsgResp, error) { + if err := authverify.CheckAccessV3(ctx, req.UserID, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } conversationIDs, err := m.ConversationLocalCache.GetConversationIDs(ctx, req.UserID) @@ -74,7 +68,7 @@ func (m *msgServer) UserClearAllMsg( } func (m *msgServer) DeleteMsgs(ctx context.Context, req *msg.DeleteMsgsReq) (*msg.DeleteMsgsResp, error) { - if err := authverify.CheckAccessV3(ctx, req.UserID, m.config); err != nil { + if err := authverify.CheckAccessV3(ctx, req.UserID, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } isSyncSelf, isSyncOther := m.validateDeleteSyncOpt(req.DeleteSyncOpt) @@ -107,10 +101,7 @@ func (m *msgServer) DeleteMsgs(ctx context.Context, req *msg.DeleteMsgsReq) (*ms return &msg.DeleteMsgsResp{}, nil } -func (m *msgServer) DeleteMsgPhysicalBySeq( - ctx context.Context, - req *msg.DeleteMsgPhysicalBySeqReq, -) (*msg.DeleteMsgPhysicalBySeqResp, error) { +func (m *msgServer) DeleteMsgPhysicalBySeq(ctx context.Context, req *msg.DeleteMsgPhysicalBySeqReq) (*msg.DeleteMsgPhysicalBySeqResp, error) { err := m.MsgDatabase.DeleteMsgsPhysicalBySeqs(ctx, req.ConversationID, req.Seqs) if err != nil { return nil, err @@ -118,11 +109,8 @@ func (m *msgServer) DeleteMsgPhysicalBySeq( return &msg.DeleteMsgPhysicalBySeqResp{}, nil } -func (m *msgServer) DeleteMsgPhysical( - ctx context.Context, - req *msg.DeleteMsgPhysicalReq, -) (*msg.DeleteMsgPhysicalResp, error) { - if err := authverify.CheckAdmin(ctx, m.config); err != nil { +func (m *msgServer) DeleteMsgPhysical(ctx context.Context, req *msg.DeleteMsgPhysicalReq) (*msg.DeleteMsgPhysicalResp, error) { + if err := authverify.CheckAdmin(ctx, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } remainTime := utils.GetCurrentTimestampBySecond() - req.Timestamp diff --git a/internal/rpc/msg/revoke.go b/internal/rpc/msg/revoke.go index 6a3e73b62..b43d4b1e0 100644 --- a/internal/rpc/msg/revoke.go +++ b/internal/rpc/msg/revoke.go @@ -42,7 +42,7 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. if req.Seq < 0 { return nil, errs.ErrArgs.WrapMsg("seq is invalid") } - if err := authverify.CheckAccessV3(ctx, req.UserID, m.config); err != nil { + if err := authverify.CheckAccessV3(ctx, req.UserID, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } user, err := m.UserLocalCache.GetUserInfo(ctx, req.UserID) @@ -63,10 +63,10 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. data, _ := json.Marshal(msgs[0]) log.ZInfo(ctx, "GetMsgBySeqs", "conversationID", req.ConversationID, "seq", req.Seq, "msg", string(data)) var role int32 - if !authverify.IsAppManagerUid(ctx, m.config) { + if !authverify.IsAppManagerUid(ctx, &m.config.Manager, &m.config.IMAdmin) { switch msgs[0].SessionType { case constant.SingleChatType: - if err := authverify.CheckAccessV3(ctx, msgs[0].SendID, m.config); err != nil { + if err := authverify.CheckAccessV3(ctx, msgs[0].SendID, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } role = user.AppMangerLevel diff --git a/internal/rpc/msg/send.go b/internal/rpc/msg/send.go index 5f1a631fb..3202308f4 100644 --- a/internal/rpc/msg/send.go +++ b/internal/rpc/msg/send.go @@ -49,15 +49,11 @@ func (m *msgServer) SendMsg(ctx context.Context, req *pbmsg.SendMsgReq) (resp *p default: return nil, errs.ErrArgs.WrapMsg("unknown sessionType") } - } else { - return nil, errs.ErrArgs.WrapMsg("msgData is nil") } + return nil, errs.ErrArgs.WrapMsg("msgData is nil") } -func (m *msgServer) sendMsgSuperGroupChat( - ctx context.Context, - req *pbmsg.SendMsgReq, -) (resp *pbmsg.SendMsgResp, err error) { +func (m *msgServer) sendMsgSuperGroupChat(ctx context.Context, req *pbmsg.SendMsgReq) (resp *pbmsg.SendMsgResp, err error) { if err = m.messageVerification(ctx, req); err != nil { prommetrics.GroupChatMsgProcessFailedCounter.Inc() return nil, err @@ -119,19 +115,15 @@ func (m *msgServer) setConversationAtInfo(nctx context.Context, msg *sdkws.MsgDa if err != nil { log.ZWarn(ctx, "SetConversations", err, "userID", memberUserIDList, "conversation", conversation) } - } else { - conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtMe} - err := m.Conversation.SetConversations(ctx, msg.AtUserIDList, conversation) - if err != nil { - log.ZWarn(ctx, "SetConversations", err, msg.AtUserIDList, conversation) - } + } + conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtMe} + err := m.Conversation.SetConversations(ctx, msg.AtUserIDList, conversation) + if err != nil { + log.ZWarn(ctx, "SetConversations", err, msg.AtUserIDList, conversation) } } -func (m *msgServer) sendMsgNotification( - ctx context.Context, - req *pbmsg.SendMsgReq, -) (resp *pbmsg.SendMsgResp, err error) { +func (m *msgServer) sendMsgNotification(ctx context.Context, req *pbmsg.SendMsgReq) (resp *pbmsg.SendMsgResp, err error) { if err := m.MsgDatabase.MsgToMQ(ctx, utils.GenConversationUniqueKeyForSingle(req.MsgData.SendID, req.MsgData.RecvID), req.MsgData); err != nil { return nil, err } diff --git a/pkg/apistruct/msg.go b/pkg/apistruct/msg.go index d1ce427fc..f4a9f884c 100644 --- a/pkg/apistruct/msg.go +++ b/pkg/apistruct/msg.go @@ -29,6 +29,7 @@ type PictureElem struct { BigPicture PictureBaseInfo `mapstructure:"bigPicture" validate:"required"` SnapshotPicture PictureBaseInfo `mapstructure:"snapshotPicture" validate:"required"` } + type SoundElem struct { UUID string `mapstructure:"uuid"` SoundPath string `mapstructure:"soundPath"` @@ -36,6 +37,7 @@ type SoundElem struct { DataSize int64 `mapstructure:"dataSize"` Duration int64 `mapstructure:"duration" validate:"required,min=1"` } + type VideoElem struct { VideoPath string `mapstructure:"videoPath"` VideoUUID string `mapstructure:"videoUUID"` @@ -50,6 +52,7 @@ type VideoElem struct { SnapshotWidth int32 `mapstructure:"snapshotWidth" validate:"required"` SnapshotHeight int32 `mapstructure:"snapshotHeight" validate:"required"` } + type FileElem struct { FilePath string `mapstructure:"filePath"` UUID string `mapstructure:"uuid"` diff --git a/pkg/authverify/token.go b/pkg/authverify/token.go index f3241eb3b..4a5d9b237 100644 --- a/pkg/authverify/token.go +++ b/pkg/authverify/token.go @@ -23,7 +23,6 @@ import ( "github.com/OpenIMSDK/tools/tokenverify" "github.com/OpenIMSDK/tools/utils" "github.com/golang-jwt/jwt/v4" - "github.com/openimsdk/open-im-server/v3/pkg/common/config" ) diff --git a/pkg/callbackstruct/group.go b/pkg/callbackstruct/group.go index 5968f1e55..467061a4a 100644 --- a/pkg/callbackstruct/group.go +++ b/pkg/callbackstruct/group.go @@ -16,7 +16,6 @@ package callbackstruct import ( common "github.com/OpenIMSDK/protocol/sdkws" - "github.com/openimsdk/open-im-server/v3/pkg/apistruct" ) diff --git a/pkg/callbackstruct/revoke.go b/pkg/callbackstruct/revoke.go index 1f5e0b0c1..b36985ed3 100644 --- a/pkg/callbackstruct/revoke.go +++ b/pkg/callbackstruct/revoke.go @@ -20,6 +20,7 @@ type CallbackAfterRevokeMsgReq struct { Seq int64 `json:"seq"` UserID string `json:"userID"` } + type CallbackAfterRevokeMsgResp struct { CommonCallbackResp } diff --git a/pkg/callbackstruct/user.go b/pkg/callbackstruct/user.go index 98536882d..96663a2ee 100644 --- a/pkg/callbackstruct/user.go +++ b/pkg/callbackstruct/user.go @@ -26,6 +26,7 @@ type CallbackBeforeUpdateUserInfoReq struct { FaceURL *string `json:"faceURL"` Ex *string `json:"ex"` } + type CallbackBeforeUpdateUserInfoResp struct { CommonCallbackResp Nickname *string `json:"nickName"` diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 46f046750..5c17e08b6 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -153,5 +153,5 @@ func (a *RpcCmd) GetRpcRegisterNameFromConfig() (string, error) { case RpcUserServer: return a.config.RpcRegisterName.OpenImUserName, nil } - return "", errs.Wrap(errors.New("can not get rpc register name"), a.Name) + return "", errs.WrapMsg(errors.New("unrecognized RPC server name"), "providedName", a.Name, "hint", "Check if the server name is correctly configured") } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 723825224..5ef211728 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -19,9 +19,8 @@ import ( "time" "github.com/OpenIMSDK/tools/discoveryregistry" - "gopkg.in/yaml.v3" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "gopkg.in/yaml.v3" ) var Config GlobalConfig diff --git a/pkg/common/config/parse.go b/pkg/common/config/parse.go index bfbf6daf7..c3936e1ba 100644 --- a/pkg/common/config/parse.go +++ b/pkg/common/config/parse.go @@ -21,10 +21,10 @@ import ( "path/filepath" "github.com/OpenIMSDK/protocol/constant" - "gopkg.in/yaml.v3" - + "github.com/OpenIMSDK/tools/errs" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "gopkg.in/yaml.v3" ) //go:embed version @@ -37,11 +37,11 @@ const ( ) // return absolude path join ../config/, this is k8s container config path. -func GetDefaultConfigPath() string { +func GetDefaultConfigPath() (string, error) { executablePath, err := os.Executable() if err != nil { fmt.Println("GetDefaultConfigPath error:", err.Error()) - return "" + return "", nil } configPath, err := genutil.OutDir(filepath.Join(filepath.Dir(executablePath), "../config/")) @@ -49,7 +49,7 @@ func GetDefaultConfigPath() string { fmt.Fprintf(os.Stderr, "failed to get output directory: %v\n", err) os.Exit(1) } - return configPath + return configPath, nil } // getProjectRoot returns the absolute path of the project root directory. @@ -91,31 +91,31 @@ func initConfig(config any, configName, configFolderPath string) error { _, err := os.Stat(configFolderPath) if err != nil { if !os.IsNotExist(err) { - fmt.Println("stat config path error:", err.Error()) - return fmt.Errorf("stat config path error: %w", err) + return errs.WrapMsg(err, "stat config path error", "config Folder Path", configFolderPath) } configFolderPath = filepath.Join(GetProjectRoot(), "config", configName) - fmt.Println("flag's path,enviment's path,default path all is not exist,using project path:", configFolderPath) } data, err := os.ReadFile(configFolderPath) if err != nil { - return fmt.Errorf("read file error: %w", err) + return errs.WrapMsg(err, "read file error", "config Folder Path", configFolderPath) } if err = yaml.Unmarshal(data, config); err != nil { - return fmt.Errorf("unmarshal yaml error: %w", err) + return errs.WrapMsg(err, "unmarshal yaml error", "config Folder Path", configFolderPath) } - fmt.Println("The path of the configuration file to start the process:", configFolderPath) return nil } -func InitConfig(config *GlobalConfig, configFolderPath string) error { +func InitConfig(config *GlobalConfig, configFolderPath string) (err error) { if configFolderPath == "" { envConfigPath := os.Getenv("OPENIMCONFIG") if envConfigPath != "" { configFolderPath = envConfigPath } else { - configFolderPath = GetDefaultConfigPath() + configFolderPath, err = GetDefaultConfigPath() + if err != nil { + return err + } } } diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index b1c1ddc12..5b9a63164 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -101,23 +101,8 @@ type CommonMsgDatabase interface { MsgToPushMQ(ctx context.Context, key, conversarionID string, msg2mq *sdkws.MsgData) (int32, int64, error) MsgToMongoMQ(ctx context.Context, key, conversarionID string, msgs []*sdkws.MsgData, lastSeq int64) error - RangeUserSendCount( - ctx context.Context, - start time.Time, - end time.Time, - group bool, - ase bool, - pageNumber int32, - showNumber int32, - ) (msgCount int64, userCount int64, users []*unrelationtb.UserCount, dateCount map[string]int64, err error) - RangeGroupSendCount( - ctx context.Context, - start time.Time, - end time.Time, - ase bool, - pageNumber int32, - showNumber int32, - ) (msgCount int64, userCount int64, groups []*unrelationtb.GroupCount, dateCount map[string]int64, err error) + RangeUserSendCount(ctx context.Context, start time.Time, end time.Time, group bool, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, users []*unrelationtb.UserCount, dateCount map[string]int64, err error) + RangeGroupSendCount(ctx context.Context, start time.Time, end time.Time, ase bool, pageNumber int32, showNumber int32) (msgCount int64, userCount int64, groups []*unrelationtb.GroupCount, dateCount map[string]int64, err error) ConvertMsgsDocLen(ctx context.Context, conversationIDs []string) } @@ -388,10 +373,10 @@ func (db *commonMsgDatabase) BatchInsertChat2Cache(ctx context.Context, conversa } lenList := len(msgs) if int64(lenList) > db.msg.GetSingleGocMsgNum() { - return 0, false, errors.New("too large") + return 0, false, errs.WrapMsg(errors.New("message count exceeds limit"), "limit", db.msg.GetSingleGocMsgNum()) } if lenList < 1 { - return 0, false, errors.New("too short as 0") + return 0, false, errs.WrapMsg(errors.New("no messages to insert"), "minCount", 1) } if errs.Unwrap(err) == redis.Nil { isNew = true @@ -403,6 +388,7 @@ func (db *commonMsgDatabase) BatchInsertChat2Cache(ctx context.Context, conversa m.Seq = currentMaxSeq userSeqMap[m.SendID] = m.Seq } + failedNum, err := db.cache.SetMessageToCache(ctx, conversationID, msgs) if err != nil { prommetrics.MsgInsertRedisFailedCounter.Add(float64(failedNum)) @@ -410,11 +396,13 @@ func (db *commonMsgDatabase) BatchInsertChat2Cache(ctx context.Context, conversa } else { prommetrics.MsgInsertRedisSuccessCounter.Inc() } + err = db.cache.SetMaxSeq(ctx, conversationID, currentMaxSeq) if err != nil { log.ZError(ctx, "db.cache.SetMaxSeq error", err, "conversationID", conversationID) prommetrics.SeqSetFailedCounter.Inc() } + err = db.cache.SetHasReadSeqs(ctx, conversationID, userSeqMap) if err != nil { log.ZError(ctx, "SetHasReadSeqs error", err, "userSeqMap", userSeqMap, "conversationID", conversationID) diff --git a/pkg/common/db/mgo/black.go b/pkg/common/db/mgo/black.go index 1047e5c30..c555e0b77 100644 --- a/pkg/common/db/mgo/black.go +++ b/pkg/common/db/mgo/black.go @@ -19,11 +19,10 @@ import ( "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewBlackMongo(db *mongo.Database) (relation.BlackModelInterface, error) { diff --git a/pkg/common/db/mgo/conversation.go b/pkg/common/db/mgo/conversation.go index 5e5b8965c..bc37ed759 100644 --- a/pkg/common/db/mgo/conversation.go +++ b/pkg/common/db/mgo/conversation.go @@ -22,11 +22,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewConversationMongo(db *mongo.Database) (*ConversationMgo, error) { diff --git a/pkg/common/db/mgo/friend.go b/pkg/common/db/mgo/friend.go index 01719822d..aa7775ce0 100644 --- a/pkg/common/db/mgo/friend.go +++ b/pkg/common/db/mgo/friend.go @@ -19,11 +19,10 @@ import ( "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) // FriendMgo implements FriendModelInterface using MongoDB as the storage backend. diff --git a/pkg/common/db/mgo/friend_request.go b/pkg/common/db/mgo/friend_request.go index a05ca1018..3e0588a0b 100644 --- a/pkg/common/db/mgo/friend_request.go +++ b/pkg/common/db/mgo/friend_request.go @@ -19,11 +19,10 @@ import ( "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewFriendRequestMongo(db *mongo.Database) (relation.FriendRequestModelInterface, error) { diff --git a/pkg/common/db/mgo/group.go b/pkg/common/db/mgo/group.go index dd5a1f7ba..07c5394e2 100644 --- a/pkg/common/db/mgo/group.go +++ b/pkg/common/db/mgo/group.go @@ -22,11 +22,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewGroupMongo(db *mongo.Database) (relation.GroupModelInterface, error) { diff --git a/pkg/common/db/mgo/group_member.go b/pkg/common/db/mgo/group_member.go index 5d3331baa..e1af34f7c 100644 --- a/pkg/common/db/mgo/group_member.go +++ b/pkg/common/db/mgo/group_member.go @@ -21,11 +21,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewGroupMember(db *mongo.Database) (relation.GroupMemberModelInterface, error) { diff --git a/pkg/common/db/mgo/group_request.go b/pkg/common/db/mgo/group_request.go index 87fba1636..9aee0e960 100644 --- a/pkg/common/db/mgo/group_request.go +++ b/pkg/common/db/mgo/group_request.go @@ -20,11 +20,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewGroupRequestMgo(db *mongo.Database) (relation.GroupRequestModelInterface, error) { diff --git a/pkg/common/db/mgo/log.go b/pkg/common/db/mgo/log.go index 09f002ee3..ca28d5964 100644 --- a/pkg/common/db/mgo/log.go +++ b/pkg/common/db/mgo/log.go @@ -20,11 +20,10 @@ import ( "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewLogMongo(db *mongo.Database) (relation.LogInterface, error) { diff --git a/pkg/common/db/mgo/object.go b/pkg/common/db/mgo/object.go index d0b1ce00b..e9d639f19 100644 --- a/pkg/common/db/mgo/object.go +++ b/pkg/common/db/mgo/object.go @@ -19,11 +19,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/mgoutil" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewS3Mongo(db *mongo.Database) (relation.ObjectInfoModelInterface, error) { diff --git a/pkg/common/db/mgo/user.go b/pkg/common/db/mgo/user.go index c99fcebb8..9ca2eb178 100644 --- a/pkg/common/db/mgo/user.go +++ b/pkg/common/db/mgo/user.go @@ -22,12 +22,11 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/mgoutil" "github.com/OpenIMSDK/tools/pagination" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" - - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" ) func NewUserMongo(db *mongo.Database) (relation.UserModelInterface, error) { diff --git a/pkg/common/db/s3/cos/cos.go b/pkg/common/db/s3/cos/cos.go index c59ef9068..9852d2a98 100644 --- a/pkg/common/db/s3/cos/cos.go +++ b/pkg/common/db/s3/cos/cos.go @@ -30,9 +30,8 @@ import ( "time" "github.com/OpenIMSDK/tools/errs" - "github.com/tencentyun/cos-go-sdk-v5" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/s3" + "github.com/tencentyun/cos-go-sdk-v5" ) const ( diff --git a/pkg/common/db/s3/oss/oss.go b/pkg/common/db/s3/oss/oss.go index b99ee26a9..a43897b0d 100644 --- a/pkg/common/db/s3/oss/oss.go +++ b/pkg/common/db/s3/oss/oss.go @@ -32,7 +32,6 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/aliyun/aliyun-oss-go-sdk/oss" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/s3" ) diff --git a/pkg/rpccache/conversation.go b/pkg/rpccache/conversation.go index ae76ff115..027ef42fa 100644 --- a/pkg/rpccache/conversation.go +++ b/pkg/rpccache/conversation.go @@ -21,11 +21,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" "github.com/openimsdk/localcache" - "github.com/redis/go-redis/v9" - "github.com/openimsdk/open-im-server/v3/pkg/common/cachekey" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" + "github.com/redis/go-redis/v9" ) func NewConversationLocalCache(client rpcclient.ConversationRpcClient, cli redis.UniversalClient) *ConversationLocalCache { diff --git a/pkg/rpccache/friend.go b/pkg/rpccache/friend.go index 9d09413fe..35122fff5 100644 --- a/pkg/rpccache/friend.go +++ b/pkg/rpccache/friend.go @@ -19,11 +19,10 @@ import ( "github.com/OpenIMSDK/tools/log" "github.com/openimsdk/localcache" - "github.com/redis/go-redis/v9" - "github.com/openimsdk/open-im-server/v3/pkg/common/cachekey" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" + "github.com/redis/go-redis/v9" ) func NewFriendLocalCache(client rpcclient.FriendRpcClient, cli redis.UniversalClient) *FriendLocalCache { diff --git a/pkg/rpccache/group.go b/pkg/rpccache/group.go index 69a8265c8..402f63185 100644 --- a/pkg/rpccache/group.go +++ b/pkg/rpccache/group.go @@ -21,11 +21,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" "github.com/openimsdk/localcache" - "github.com/redis/go-redis/v9" - "github.com/openimsdk/open-im-server/v3/pkg/common/cachekey" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" + "github.com/redis/go-redis/v9" ) func NewGroupLocalCache(client rpcclient.GroupRpcClient, cli redis.UniversalClient) *GroupLocalCache { diff --git a/pkg/rpccache/user.go b/pkg/rpccache/user.go index 19edbec39..c48b05821 100644 --- a/pkg/rpccache/user.go +++ b/pkg/rpccache/user.go @@ -21,11 +21,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" "github.com/openimsdk/localcache" - "github.com/redis/go-redis/v9" - "github.com/openimsdk/open-im-server/v3/pkg/common/cachekey" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" + "github.com/redis/go-redis/v9" ) func NewUserLocalCache(client rpcclient.UserRpcClient, cli redis.UniversalClient) *UserLocalCache { diff --git a/pkg/rpcclient/auth.go b/pkg/rpcclient/auth.go index 3894043ec..3fceb6123 100644 --- a/pkg/rpcclient/auth.go +++ b/pkg/rpcclient/auth.go @@ -19,9 +19,8 @@ import ( "github.com/OpenIMSDK/protocol/auth" "github.com/OpenIMSDK/tools/discoveryregistry" - "google.golang.org/grpc" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" ) func NewAuth(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Auth { diff --git a/pkg/rpcclient/conversation.go b/pkg/rpcclient/conversation.go index 1802c0a0a..627388998 100644 --- a/pkg/rpcclient/conversation.go +++ b/pkg/rpcclient/conversation.go @@ -21,10 +21,9 @@ import ( pbconversation "github.com/OpenIMSDK/protocol/conversation" "github.com/OpenIMSDK/tools/discoveryregistry" "github.com/OpenIMSDK/tools/errs" - "google.golang.org/grpc" - "github.com/openimsdk/open-im-server/v3/pkg/common/config" util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" ) type Conversation struct { diff --git a/pkg/rpcclient/friend.go b/pkg/rpcclient/friend.go index 647999493..066766e89 100644 --- a/pkg/rpcclient/friend.go +++ b/pkg/rpcclient/friend.go @@ -20,9 +20,8 @@ import ( "github.com/OpenIMSDK/protocol/friend" sdkws "github.com/OpenIMSDK/protocol/sdkws" "github.com/OpenIMSDK/tools/discoveryregistry" - "google.golang.org/grpc" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" ) type Friend struct { diff --git a/pkg/rpcclient/group.go b/pkg/rpcclient/group.go index a0684cbe5..e5ae794cf 100644 --- a/pkg/rpcclient/group.go +++ b/pkg/rpcclient/group.go @@ -24,7 +24,6 @@ import ( "github.com/OpenIMSDK/tools/discoveryregistry" "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/utils" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" ) diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go index a1b915d91..f9c3ded7f 100644 --- a/pkg/rpcclient/msg.go +++ b/pkg/rpcclient/msg.go @@ -26,11 +26,10 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" "github.com/OpenIMSDK/tools/utils" - "google.golang.org/grpc" - "google.golang.org/protobuf/proto" - "github.com/openimsdk/open-im-server/v3/pkg/common/config" util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" ) func newContentTypeConf(conf *config.Notification) map[int32]config.NotificationConf { diff --git a/pkg/rpcclient/push.go b/pkg/rpcclient/push.go index 3e7c7194a..27afb533c 100644 --- a/pkg/rpcclient/push.go +++ b/pkg/rpcclient/push.go @@ -19,9 +19,8 @@ import ( "github.com/OpenIMSDK/protocol/push" "github.com/OpenIMSDK/tools/discoveryregistry" - "google.golang.org/grpc" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" ) type Push struct { diff --git a/pkg/rpcclient/third.go b/pkg/rpcclient/third.go index 3ff37692e..3bfd0ab82 100644 --- a/pkg/rpcclient/third.go +++ b/pkg/rpcclient/third.go @@ -19,9 +19,8 @@ import ( "github.com/OpenIMSDK/protocol/third" "github.com/OpenIMSDK/tools/discoveryregistry" - "google.golang.org/grpc" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" ) type Third struct { diff --git a/pkg/rpcclient/user.go b/pkg/rpcclient/user.go index 339e72761..0fd2b3003 100644 --- a/pkg/rpcclient/user.go +++ b/pkg/rpcclient/user.go @@ -18,17 +18,15 @@ import ( "context" "strings" - "github.com/openimsdk/open-im-server/v3/pkg/authverify" - "github.com/openimsdk/open-im-server/v3/pkg/common/config" - "github.com/OpenIMSDK/protocol/sdkws" "github.com/OpenIMSDK/protocol/user" "github.com/OpenIMSDK/tools/discoveryregistry" "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/utils" - "google.golang.org/grpc" - + "github.com/openimsdk/open-im-server/v3/pkg/authverify" + "github.com/openimsdk/open-im-server/v3/pkg/common/config" util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "google.golang.org/grpc" ) // User represents a structure holding connection details for the User RPC client. diff --git a/test/e2e/framework/helpers/chat/chat.go b/test/e2e/framework/helpers/chat/chat.go index aa37c34b5..aa280fe1d 100644 --- a/test/e2e/framework/helpers/chat/chat.go +++ b/test/e2e/framework/helpers/chat/chat.go @@ -38,7 +38,6 @@ func main() { // } latestVersion := defaultTemplateVersion - // getLatestVersion // getLatestVersion // Construct the download URL @@ -101,7 +100,6 @@ func main() { select {} } -// getLatestVersion fetches the latest version number from a given URL. /* func getLatestVersion(url string) (string, error) { resp, err := http.Get(url) if err != nil {