From e0ad9847c56262e6c387a98ebf1f290c00e6ecb3 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Wed, 27 Mar 2024 15:43:12 +0800 Subject: [PATCH 01/14] feat: config build --- pkg/common/config/config.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 46a9f03ea..b042a2d50 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -16,6 +16,8 @@ package config import ( "bytes" + "github.com/openimsdk/tools/db/mongoutil" + "github.com/openimsdk/tools/db/redisutil" "github.com/openimsdk/tools/mq/kafka" "gopkg.in/yaml.v3" "time" @@ -76,6 +78,18 @@ type Mongo struct { MaxRetry int `yaml:"maxRetry"` } +func (m *Mongo) Build() *mongoutil.Config { + return &mongoutil.Config{ + Uri: m.Uri, + Address: m.Address, + Database: m.Database, + Username: m.Username, + Password: m.Password, + MaxPoolSize: m.MaxPoolSize, + MaxRetry: m.MaxRetry, + } +} + type Redis struct { ClusterMode bool `yaml:"clusterMode"` Address []string `yaml:"address"` @@ -86,6 +100,17 @@ type Redis struct { MaxRetry int `yaml:"maxRetry"` } +func (r *Redis) Build() *redisutil.Config { + return &redisutil.Config{ + ClusterMode: r.ClusterMode, + Address: r.Address, + Username: r.Username, + Password: r.Password, + DB: r.DB, + MaxRetry: r.MaxRetry, + } +} + type Kafka struct { kafka.Config LatestMsgToRedis struct { From 25e71d6b3c2517e9238a4c1a2629f771047a7c16 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 16:10:58 +0800 Subject: [PATCH 02/14] fix: pkg update. --- internal/api/route.go | 4 ++-- internal/msggateway/user_map.go | 14 +++++++------- .../discoveryregister/kubernetes/kubernetes.go | 4 ++-- .../discoveryregister/zookeeper/zookeeper.go | 17 ++++++++--------- pkg/rpcclient/conversation.go | 12 ++++++------ 5 files changed, 25 insertions(+), 26 deletions(-) diff --git a/internal/api/route.go b/internal/api/route.go index 202c8f18d..04414a5d0 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/system/program" "net" "net/http" "os" @@ -41,7 +42,6 @@ import ( ginprom "github.com/openimsdk/open-im-server/v3/pkg/common/ginprometheus" "github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/tools/apiresp" "github.com/openimsdk/tools/errs" @@ -122,7 +122,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, port int, proPort i defer cancel() select { case <-sigs: - util.SIGTERMExit() + program.SIGTERMExit() err := server.Shutdown(ctx) if err != nil { return errs.WrapMsg(err, "shutdown err") diff --git a/internal/msggateway/user_map.go b/internal/msggateway/user_map.go index ffaff75d9..7b30f8a8a 100644 --- a/internal/msggateway/user_map.go +++ b/internal/msggateway/user_map.go @@ -62,13 +62,13 @@ func (u *UserMap) Set(key string, v *Client) { oldClients := allClients.([]*Client) oldClients = append(oldClients, v) u.m.Store(key, oldClients) - } - - log.ZDebug(context.Background(), "Set not existed", "user_id", key, "client_user_id", v.UserID) + } else { + log.ZDebug(context.Background(), "Set not existed", "user_id", key, "client_user_id", v.UserID) - var clients []*Client - clients = append(clients, v) - u.m.Store(key, clients) + var clients []*Client + clients = append(clients, v) + u.m.Store(key, clients) + } } func (u *UserMap) delete(key string, connRemoteAddr string) (isDeleteUser bool) { @@ -114,7 +114,7 @@ func (u *UserMap) deleteClients(key string, clients []*Client) (isDeleteUser boo oldClients := allClients.([]*Client) var remainingClients []*Client for _, client := range oldClients { - if _, shouldBeDeleted := deleteMap[client.ctx.GetRemoteAddr()]; !shouldBeDeleted { + if _, shouldBeDeleted := m[client.ctx.GetRemoteAddr()]; !shouldBeDeleted { remainingClients = append(remainingClients, client) } } diff --git a/pkg/common/discoveryregister/kubernetes/kubernetes.go b/pkg/common/discoveryregister/kubernetes/kubernetes.go index b789bc48e..721928238 100644 --- a/pkg/common/discoveryregister/kubernetes/kubernetes.go +++ b/pkg/common/discoveryregister/kubernetes/kubernetes.go @@ -22,7 +22,7 @@ import ( "strconv" "strings" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/log" "github.com/stathat/consistent" "google.golang.org/grpc" @@ -36,7 +36,7 @@ type K8sDR struct { gatewayName string } -func NewK8sDiscoveryRegister(gatewayName string) (discoveryregistry.SvcDiscoveryRegistry, error) { +func NewK8sDiscoveryRegister(gatewayName string) (discovery.SvcDiscoveryRegistry, error) { gatewayConsistent := consistent.New() gatewayHosts := getMsgGatewayHost(context.Background(), gatewayName) for _, v := range gatewayHosts { diff --git a/pkg/common/discoveryregister/zookeeper/zookeeper.go b/pkg/common/discoveryregister/zookeeper/zookeeper.go index b36b2327d..ec7076661 100644 --- a/pkg/common/discoveryregister/zookeeper/zookeeper.go +++ b/pkg/common/discoveryregister/zookeeper/zookeeper.go @@ -15,30 +15,29 @@ package zookeeper import ( + "github.com/openimsdk/tools/discovery" "os" "strings" "time" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - "github.com/openimsdk/tools/discoveryregistry" - openkeeper "github.com/openimsdk/tools/discoveryregistry/zookeeper" + "github.com/openimsdk/tools/discovery/zookeeper" ) // NewZookeeperDiscoveryRegister creates a new instance of ZookeeperDR for Zookeeper service discovery and registration. -func NewZookeeperDiscoveryRegister(zkConf *config.Zookeeper) (discoveryregistry.SvcDiscoveryRegistry, error) { +func NewZookeeperDiscoveryRegister(zkConf *config.Zookeeper) (discovery.SvcDiscoveryRegistry, error) { schema := getEnv("ZOOKEEPER_SCHEMA", zkConf.Schema) zkAddr := getZkAddrFromEnv(zkConf.ZkAddr) username := getEnv("ZOOKEEPER_USERNAME", zkConf.Username) password := getEnv("ZOOKEEPER_PASSWORD", zkConf.Password) - zk, err := openkeeper.NewClient( + zk, err := zookeeper.NewZkClient( zkAddr, schema, - openkeeper.WithFreq(time.Hour), - openkeeper.WithUserNameAndPassword(username, password), - openkeeper.WithRoundRobin(), - openkeeper.WithTimeout(10), - // openkeeper.WithLogger(log.NewZkLogger()), + zookeeper.WithFreq(time.Hour), + zookeeper.WithUserNameAndPassword(username, password), + zookeeper.WithRoundRobin(), + zookeeper.WithTimeout(10), ) if err != nil { return nil, err diff --git a/pkg/rpcclient/conversation.go b/pkg/rpcclient/conversation.go index ecbfa2f73..9c15b78ff 100644 --- a/pkg/rpcclient/conversation.go +++ b/pkg/rpcclient/conversation.go @@ -17,11 +17,11 @@ package rpcclient import ( "context" "fmt" + "github.com/openimsdk/tools/system/program" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" pbconversation "github.com/openimsdk/protocol/conversation" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" "google.golang.org/grpc" ) @@ -29,14 +29,14 @@ import ( type Conversation struct { Client pbconversation.ConversationClient conn grpc.ClientConnInterface - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry Config *config.GlobalConfig } -func NewConversation(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Conversation { +func NewConversation(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Conversation { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := pbconversation.NewConversationClient(conn) return &Conversation{discov: discov, conn: conn, Client: client} @@ -44,7 +44,7 @@ func NewConversation(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterN type ConversationRpcClient Conversation -func NewConversationRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) ConversationRpcClient { +func NewConversationRpcClient(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) ConversationRpcClient { return ConversationRpcClient(*NewConversation(discov, rpcRegisterName)) } From 9f982b22fb6ac82d979c0f4eef089b0d6f86b56a Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 16:41:58 +0800 Subject: [PATCH 03/14] fix: pkg update. --- pkg/common/cmd/api.go | 4 ++-- pkg/common/cmd/cron_task.go | 4 ++-- pkg/common/cmd/msg_gateway.go | 4 ++-- pkg/common/cmd/msg_transfer.go | 4 ++-- pkg/common/cmd/msg_utils.go | 4 ++-- pkg/common/cmd/rpc.go | 4 ++-- pkg/common/config/parse.go | 6 +++--- pkg/rpcclient/auth.go | 11 +++++------ pkg/rpcclient/friend.go | 12 ++++++------ pkg/rpcclient/group.go | 28 ++++++++++++++-------------- pkg/rpcclient/grouphash/grouphash.go | 6 +++--- pkg/rpcclient/msg.go | 24 +++++++++++++----------- pkg/rpcclient/push.go | 12 ++++++------ pkg/rpcclient/third.go | 13 +++++++------ pkg/rpcclient/user.go | 4 ++-- 15 files changed, 71 insertions(+), 69 deletions(-) diff --git a/pkg/common/cmd/api.go b/pkg/common/cmd/api.go index dc64b639b..701cc05c1 100644 --- a/pkg/common/cmd/api.go +++ b/pkg/common/cmd/api.go @@ -18,8 +18,8 @@ import ( "context" "github.com/openimsdk/open-im-server/v3/internal/api" config2 "github.com/openimsdk/open-im-server/v3/pkg/common/config" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" + "github.com/openimsdk/tools/system/program" "github.com/spf13/cobra" ) @@ -29,7 +29,7 @@ type ApiCmd struct { } func NewApiCmd(name string) *ApiCmd { - ret := &ApiCmd{RootCmd: NewRootCmd(genutil.GetProcessName(), name)} + ret := &ApiCmd{RootCmd: NewRootCmd(program.GetProcessName(), name)} ret.ctx = context.WithValue(context.Background(), "version", config2.Version) ret.SetRootCmdPt(ret) ret.addPreRun() diff --git a/pkg/common/cmd/cron_task.go b/pkg/common/cmd/cron_task.go index ffe85ef4a..9183c0d8f 100644 --- a/pkg/common/cmd/cron_task.go +++ b/pkg/common/cmd/cron_task.go @@ -18,7 +18,7 @@ import ( "context" "github.com/openimsdk/open-im-server/v3/internal/tools" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" "github.com/spf13/cobra" ) @@ -29,7 +29,7 @@ type CronTaskCmd struct { } func NewCronTaskCmd(name string) *CronTaskCmd { - ret := &CronTaskCmd{RootCmd: NewRootCmd(genutil.GetProcessName(), name, WithCronTaskLogName()), + ret := &CronTaskCmd{RootCmd: NewRootCmd(program.GetProcessName(), name, WithCronTaskLogName()), initFunc: tools.StartTask} ret.ctx = context.WithValue(context.Background(), "version", config.Version) ret.addRunE() diff --git a/pkg/common/cmd/msg_gateway.go b/pkg/common/cmd/msg_gateway.go index 06a5862b2..2ad88bc1a 100644 --- a/pkg/common/cmd/msg_gateway.go +++ b/pkg/common/cmd/msg_gateway.go @@ -17,10 +17,10 @@ package cmd import ( "context" config2 "github.com/openimsdk/open-im-server/v3/pkg/common/config" + "github.com/openimsdk/tools/system/program" "log" "github.com/openimsdk/open-im-server/v3/internal/msggateway" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/spf13/cobra" ) @@ -31,7 +31,7 @@ type MsgGatewayCmd struct { } func NewMsgGatewayCmd(name string) *MsgGatewayCmd { - ret := &MsgGatewayCmd{RootCmd: NewRootCmd(genutil.GetProcessName(), name)} + ret := &MsgGatewayCmd{RootCmd: NewRootCmd(program.GetProcessName(), name)} ret.ctx = context.WithValue(context.Background(), "version", config2.Version) ret.addRunE() ret.SetRootCmdPt(ret) diff --git a/pkg/common/cmd/msg_transfer.go b/pkg/common/cmd/msg_transfer.go index e2243b0eb..e5cc55cc4 100644 --- a/pkg/common/cmd/msg_transfer.go +++ b/pkg/common/cmd/msg_transfer.go @@ -17,9 +17,9 @@ package cmd import ( "context" config2 "github.com/openimsdk/open-im-server/v3/pkg/common/config" + "github.com/openimsdk/tools/system/program" "github.com/openimsdk/open-im-server/v3/internal/msgtransfer" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/spf13/cobra" ) @@ -30,7 +30,7 @@ type MsgTransferCmd struct { } func NewMsgTransferCmd(name string) *MsgTransferCmd { - ret := &MsgTransferCmd{RootCmd: NewRootCmd(genutil.GetProcessName(), name)} + ret := &MsgTransferCmd{RootCmd: NewRootCmd(program.GetProcessName(), name)} ret.ctx = context.WithValue(context.Background(), "version", config2.Version) ret.addRunE() ret.SetRootCmdPt(ret) diff --git a/pkg/common/cmd/msg_utils.go b/pkg/common/cmd/msg_utils.go index b14218724..5e2a67343 100644 --- a/pkg/common/cmd/msg_utils.go +++ b/pkg/common/cmd/msg_utils.go @@ -17,7 +17,7 @@ package cmd import ( "context" "github.com/openimsdk/open-im-server/v3/internal/tools" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" "github.com/spf13/cobra" ) @@ -139,7 +139,7 @@ func (s *SeqCmd) GetSeqCmd() *cobra.Command { s.Command.Run = func(cmdLines *cobra.Command, args []string) { _, err := tools.InitMsgTool(context.Background(), s.MsgTool.Config) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } userID := s.getUserIDFlag(cmdLines) superGroupID := s.getSuperGroupIDFlag(cmdLines) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 577070d12..8d511a7d5 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -17,10 +17,10 @@ package cmd import ( "context" "errors" + "github.com/openimsdk/tools/system/program" config2 "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/startrpc" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" @@ -38,7 +38,7 @@ type RpcCmd struct { } func NewRpcCmd(name string, initFunc rpcInitFuc) *RpcCmd { - ret := &RpcCmd{RootCmd: NewRootCmd(genutil.GetProcessName(), name), initFunc: initFunc} + ret := &RpcCmd{RootCmd: NewRootCmd(program.GetProcessName(), name), initFunc: initFunc} ret.ctx = context.WithValue(context.Background(), "version", config2.Version) ret.addPreRun() ret.addRunE() diff --git a/pkg/common/config/parse.go b/pkg/common/config/parse.go index eda322858..9860644a1 100644 --- a/pkg/common/config/parse.go +++ b/pkg/common/config/parse.go @@ -16,12 +16,12 @@ package config import ( _ "embed" + "github.com/openimsdk/tools/field" "gopkg.in/yaml.v3" "os" "path/filepath" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/tools/errs" ) @@ -42,7 +42,7 @@ func GetDefaultConfigPath() (string, error) { return "", errs.WrapMsg(err, "failed to get executable path") } - configPath, err := genutil.OutDir(filepath.Join(filepath.Dir(executablePath), "../config/")) + configPath, err := field.OutDir(filepath.Join(filepath.Dir(executablePath), "../config/")) if err != nil { return "", errs.WrapMsg(err, "failed to get output directory", "outDir", filepath.Join(filepath.Dir(executablePath), "../config/")) } @@ -55,7 +55,7 @@ func GetProjectRoot() (string, error) { if err != nil { return "", errs.Wrap(err) } - projectRoot, err := genutil.OutDir(filepath.Join(filepath.Dir(executablePath), "../../../../..")) + projectRoot, err := field.OutDir(filepath.Join(filepath.Dir(executablePath), "../../../../..")) if err != nil { return "", errs.Wrap(err) } diff --git a/pkg/rpcclient/auth.go b/pkg/rpcclient/auth.go index 6fdd78ef6..97ace08f9 100644 --- a/pkg/rpcclient/auth.go +++ b/pkg/rpcclient/auth.go @@ -16,17 +16,16 @@ package rpcclient import ( "context" - - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/auth" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/system/program" "google.golang.org/grpc" ) -func NewAuth(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Auth { +func NewAuth(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Auth { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := auth.NewAuthClient(conn) return &Auth{discov: discov, conn: conn, Client: client} @@ -35,5 +34,5 @@ func NewAuth(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName stri type Auth struct { conn grpc.ClientConnInterface Client auth.AuthClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry } diff --git a/pkg/rpcclient/friend.go b/pkg/rpcclient/friend.go index a348401ed..404e8d427 100644 --- a/pkg/rpcclient/friend.go +++ b/pkg/rpcclient/friend.go @@ -16,24 +16,24 @@ package rpcclient import ( "context" + "github.com/openimsdk/tools/system/program" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/friend" sdkws "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "google.golang.org/grpc" ) type Friend struct { conn grpc.ClientConnInterface Client friend.FriendClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry } -func NewFriend(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Friend { +func NewFriend(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Friend { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := friend.NewFriendClient(conn) return &Friend{discov: discov, conn: conn, Client: client} @@ -41,7 +41,7 @@ func NewFriend(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName st type FriendRpcClient Friend -func NewFriendRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) FriendRpcClient { +func NewFriendRpcClient(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) FriendRpcClient { return FriendRpcClient(*NewFriend(discov, rpcRegisterName)) } diff --git a/pkg/rpcclient/group.go b/pkg/rpcclient/group.go index 1756211db..ed5a4ee57 100644 --- a/pkg/rpcclient/group.go +++ b/pkg/rpcclient/group.go @@ -16,26 +16,26 @@ package rpcclient import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/system/program" + "github.com/openimsdk/tools/utils/datautil" "strings" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/group" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/discoveryregistry" - "github.com/openimsdk/tools/errs" - "github.com/openimsdk/tools/utils" + "github.com/openimsdk/tools/discovery" ) type Group struct { Client group.GroupClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry } -func NewGroup(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Group { +func NewGroup(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Group { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := group.NewGroupClient(conn) return &Group{discov: discov, Client: client} @@ -43,7 +43,7 @@ func NewGroup(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName str type GroupRpcClient Group -func NewGroupRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) GroupRpcClient { +func NewGroupRpcClient(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) GroupRpcClient { return GroupRpcClient(*NewGroup(discov, rpcRegisterName)) } @@ -55,10 +55,10 @@ func (g *GroupRpcClient) GetGroupInfos(ctx context.Context, groupIDs []string, c return nil, err } if complete { - if ids := utils.Single(groupIDs, utils.Slice(resp.GroupInfos, func(e *sdkws.GroupInfo) string { + if ids := datautil.Single(groupIDs, datautil.Slice(resp.GroupInfos, func(e *sdkws.GroupInfo) string { return e.GroupID })); len(ids) > 0 { - return nil, errs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) + return nil, servererrs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) } } return resp.GroupInfos, nil @@ -81,7 +81,7 @@ func (g *GroupRpcClient) GetGroupInfoMap( if err != nil { return nil, err } - return utils.SliceToMap(groups, func(e *sdkws.GroupInfo) string { + return datautil.SliceToMap(groups, func(e *sdkws.GroupInfo) string { return e.GroupID }), nil } @@ -100,10 +100,10 @@ func (g *GroupRpcClient) GetGroupMemberInfos( return nil, err } if complete { - if ids := utils.Single(userIDs, utils.Slice(resp.Members, func(e *sdkws.GroupMemberFullInfo) string { + if ids := datautil.Single(userIDs, datautil.Slice(resp.Members, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID })); len(ids) > 0 { - return nil, errs.ErrNotInGroupYet.WrapMsg(strings.Join(ids, ",")) + return nil, servererrs.ErrNotInGroupYet.WrapMsg(strings.Join(ids, ",")) } } return resp.Members, nil @@ -131,7 +131,7 @@ func (g *GroupRpcClient) GetGroupMemberInfoMap( if err != nil { return nil, err } - return utils.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { + return datautil.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }), nil } diff --git a/pkg/rpcclient/grouphash/grouphash.go b/pkg/rpcclient/grouphash/grouphash.go index c518550dc..6fda8e063 100644 --- a/pkg/rpcclient/grouphash/grouphash.go +++ b/pkg/rpcclient/grouphash/grouphash.go @@ -19,10 +19,10 @@ import ( "crypto/md5" "encoding/binary" "encoding/json" + "github.com/openimsdk/tools/utils/datautil" "github.com/openimsdk/protocol/group" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/utils" ) func NewGroupHashFromGroupClient(x group.GroupClient) *GroupHash { @@ -79,9 +79,9 @@ func (gh *GroupHash) GetGroupHash(ctx context.Context, groupID string) (uint64, if err != nil { return 0, err } - utils.Sort(userIDs, true) + datautil.Sort(userIDs, true) } - memberMap := utils.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { + memberMap := datautil.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }) res := make([]*sdkws.GroupMemberFullInfo, 0, len(members)) diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go index 4f6d1f0c3..f3a017c68 100644 --- a/pkg/rpcclient/msg.go +++ b/pkg/rpcclient/msg.go @@ -18,16 +18,18 @@ import ( "context" "encoding/json" "fmt" + "github.com/openimsdk/tools/system/program" + "github.com/openimsdk/tools/utils/idutil" + "github.com/openimsdk/tools/utils/jsonutil" + "github.com/openimsdk/tools/utils/timeutil" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/msg" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" - "github.com/openimsdk/tools/utils" "google.golang.org/grpc" "google.golang.org/protobuf/proto" ) @@ -129,13 +131,13 @@ func newSessionTypeConf() map[int32]int32 { type Message struct { conn grpc.ClientConnInterface Client msg.MsgClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry } -func NewMessage(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Message { +func NewMessage(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Message { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := msg.NewMsgClient(conn) return &Message{discov: discov, conn: conn, Client: client} @@ -143,7 +145,7 @@ func NewMessage(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName s type MessageRpcClient Message -func NewMessageRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) MessageRpcClient { +func NewMessageRpcClient(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) MessageRpcClient { return MessageRpcClient(*NewMessage(discov, rpcRegisterName)) } @@ -258,10 +260,10 @@ func WithRpcGetUserName() NotificationOptions { } func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, sendID, recvID string, contentType, sesstionType int32, m proto.Message, opts ...NotificationOptions) (err error) { - n := sdkws.NotificationElem{Detail: utils.StructToJsonString(m)} + n := sdkws.NotificationElem{Detail: jsonutil.StructToJsonString(m)} content, err := json.Marshal(&n) if err != nil { - return errs.WrapMsg(err, "json.Marshal failed", "sendID", sendID, "recvID", recvID, "contentType", contentType, "msg", utils.StructToJsonString(m)) + return errs.WrapMsg(err, "json.Marshal failed", "sendID", sendID, "recvID", recvID, "contentType", contentType, "msg", jsonutil.StructToJsonString(m)) } notificationOpt := ¬ificationOpt{} for _, opt := range opts { @@ -288,8 +290,8 @@ func (s *NotificationSender) NotificationWithSesstionType(ctx context.Context, s if msg.SessionType == constant.SuperGroupChatType { msg.GroupID = recvID } - msg.CreateTime = utils.GetCurrentTimestampByMill() - msg.ClientMsgID = utils.GetMsgID(sendID) + msg.CreateTime = timeutil.GetCurrentTimestampByMill() + msg.ClientMsgID = idutil.GetMsgIDByMD5(sendID) optionsConfig := s.contentTypeConf[contentType] if sendID == recvID && contentType == constant.HasReadReceipt { optionsConfig.ReliabilityLevel = constant.UnreliableNotification diff --git a/pkg/rpcclient/push.go b/pkg/rpcclient/push.go index 1e77264ad..0cac9db98 100644 --- a/pkg/rpcclient/push.go +++ b/pkg/rpcclient/push.go @@ -16,23 +16,23 @@ package rpcclient import ( "context" + "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/system/program" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/push" - "github.com/openimsdk/tools/discoveryregistry" "google.golang.org/grpc" ) type Push struct { conn grpc.ClientConnInterface Client push.PushMsgServiceClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry } -func NewPush(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Push { +func NewPush(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Push { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } return &Push{ discov: discov, @@ -43,7 +43,7 @@ func NewPush(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName stri type PushRpcClient Push -func NewPushRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) PushRpcClient { +func NewPushRpcClient(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) PushRpcClient { return PushRpcClient(*NewPush(discov, rpcRegisterName)) } diff --git a/pkg/rpcclient/third.go b/pkg/rpcclient/third.go index 7995e452f..6c28aa443 100644 --- a/pkg/rpcclient/third.go +++ b/pkg/rpcclient/third.go @@ -17,27 +17,28 @@ package rpcclient import ( "context" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" + "github.com/openimsdk/protocol/third" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "google.golang.org/grpc" ) type Third struct { conn grpc.ClientConnInterface Client third.ThirdClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry GrafanaUrl string } -func NewThird(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName, grafanaUrl string) *Third { +func NewThird(discov discovery.SvcDiscoveryRegistry, rpcRegisterName, grafanaUrl string) *Third { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := third.NewThirdClient(conn) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } return &Third{discov: discov, Client: client, conn: conn, GrafanaUrl: grafanaUrl} } diff --git a/pkg/rpcclient/user.go b/pkg/rpcclient/user.go index 2ef0a49de..1c0e6289a 100644 --- a/pkg/rpcclient/user.go +++ b/pkg/rpcclient/user.go @@ -17,12 +17,12 @@ package rpcclient import ( "context" "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/system/program" "github.com/openimsdk/tools/utils/datautil" "strings" "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" "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/protocol/user" "github.com/openimsdk/tools/discovery" @@ -44,7 +44,7 @@ func NewUser(discov discovery.SvcDiscoveryRegistry, rpcRegisterName, messageGate manager *config.Manager, imAdmin *config.IMAdmin) *User { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := user.NewUserClient(conn) return &User{Discov: discov, Client: client, From 7ddcd086857b74d0c80afae7adac2dd784d3a270 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 16:54:05 +0800 Subject: [PATCH 04/14] fix: pkg update. --- pkg/common/db/table/relation/black.go | 2 +- pkg/common/db/table/relation/conversation.go | 2 +- pkg/common/db/table/relation/friend.go | 2 +- pkg/common/db/table/relation/friend_request.go | 2 +- pkg/common/db/table/relation/group.go | 2 +- pkg/common/db/table/relation/group_member.go | 2 +- pkg/common/db/table/relation/group_request.go | 2 +- pkg/common/db/table/relation/log.go | 2 +- pkg/common/db/table/relation/user.go | 2 +- pkg/common/db/table/relation/utils.go | 4 ++-- pkg/common/discoveryregister/discoveryregister_test.go | 4 ++-- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/common/db/table/relation/black.go b/pkg/common/db/table/relation/black.go index ce890a7e3..f5d1cb236 100644 --- a/pkg/common/db/table/relation/black.go +++ b/pkg/common/db/table/relation/black.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type BlackModel struct { diff --git a/pkg/common/db/table/relation/conversation.go b/pkg/common/db/table/relation/conversation.go index 455ab4663..4990c96c6 100644 --- a/pkg/common/db/table/relation/conversation.go +++ b/pkg/common/db/table/relation/conversation.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type ConversationModel struct { diff --git a/pkg/common/db/table/relation/friend.go b/pkg/common/db/table/relation/friend.go index af9e59b09..4c84e773d 100644 --- a/pkg/common/db/table/relation/friend.go +++ b/pkg/common/db/table/relation/friend.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) // FriendModel represents the data structure for a friend relationship in MongoDB. diff --git a/pkg/common/db/table/relation/friend_request.go b/pkg/common/db/table/relation/friend_request.go index 0959a5127..d59e3bb0b 100644 --- a/pkg/common/db/table/relation/friend_request.go +++ b/pkg/common/db/table/relation/friend_request.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type FriendRequestModel struct { diff --git a/pkg/common/db/table/relation/group.go b/pkg/common/db/table/relation/group.go index 0d31c427f..f479a4745 100644 --- a/pkg/common/db/table/relation/group.go +++ b/pkg/common/db/table/relation/group.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type GroupModel struct { diff --git a/pkg/common/db/table/relation/group_member.go b/pkg/common/db/table/relation/group_member.go index 108de7c01..37f1cfc03 100644 --- a/pkg/common/db/table/relation/group_member.go +++ b/pkg/common/db/table/relation/group_member.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type GroupMemberModel struct { diff --git a/pkg/common/db/table/relation/group_request.go b/pkg/common/db/table/relation/group_request.go index 0ef09bcfe..7e9b258de 100644 --- a/pkg/common/db/table/relation/group_request.go +++ b/pkg/common/db/table/relation/group_request.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type GroupRequestModel struct { diff --git a/pkg/common/db/table/relation/log.go b/pkg/common/db/table/relation/log.go index 1b7f430ec..afc32c68e 100644 --- a/pkg/common/db/table/relation/log.go +++ b/pkg/common/db/table/relation/log.go @@ -18,7 +18,7 @@ import ( "context" "time" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type LogModel struct { diff --git a/pkg/common/db/table/relation/user.go b/pkg/common/db/table/relation/user.go index 2e1344ac5..938a8a77d 100644 --- a/pkg/common/db/table/relation/user.go +++ b/pkg/common/db/table/relation/user.go @@ -19,7 +19,7 @@ import ( "time" "github.com/openimsdk/protocol/user" - "github.com/openimsdk/tools/pagination" + "github.com/openimsdk/tools/db/pagination" ) type UserModel struct { diff --git a/pkg/common/db/table/relation/utils.go b/pkg/common/db/table/relation/utils.go index 4599d6a98..006da4808 100644 --- a/pkg/common/db/table/relation/utils.go +++ b/pkg/common/db/table/relation/utils.go @@ -15,7 +15,7 @@ package relation import ( - "github.com/openimsdk/tools/utils" + "github.com/openimsdk/tools/errs" "go.mongodb.org/mongo-driver/mongo" ) @@ -31,5 +31,5 @@ type GroupSimpleUserID struct { } func IsNotFound(err error) bool { - return utils.Unwrap(err) == mongo.ErrNoDocuments + return errs.Unwrap(err) == mongo.ErrNoDocuments } diff --git a/pkg/common/discoveryregister/discoveryregister_test.go b/pkg/common/discoveryregister/discoveryregister_test.go index d9306331e..3b21c7b5d 100644 --- a/pkg/common/discoveryregister/discoveryregister_test.go +++ b/pkg/common/discoveryregister/discoveryregister_test.go @@ -15,12 +15,12 @@ package discoveryregister import ( + "github.com/openimsdk/tools/discovery" "os" "testing" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - "github.com/openimsdk/tools/discoveryregistry" "github.com/stretchr/testify/assert" ) @@ -57,7 +57,7 @@ func TestNewDiscoveryRegister(t *testing.T) { } else { assert.NoError(t, err) if test.expectedResult { - assert.Implements(t, (*discoveryregistry.SvcDiscoveryRegistry)(nil), client) + assert.Implements(t, (*discovery.SvcDiscoveryRegistry)(nil), client) } else { assert.Nil(t, client) } From 9146b947a2eb753d8030b7e451f353f996065ce6 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:07:48 +0800 Subject: [PATCH 05/14] fix: pkg update. --- pkg/common/db/s3/minio/thumbnail.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/s3/minio/thumbnail.go b/pkg/common/db/s3/minio/thumbnail.go index 828f0483c..d12418451 100644 --- a/pkg/common/db/s3/minio/thumbnail.go +++ b/pkg/common/db/s3/minio/thumbnail.go @@ -19,6 +19,7 @@ import ( "context" "errors" "fmt" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" "image" "image/gif" "image/jpeg" @@ -31,7 +32,6 @@ import ( "github.com/minio/minio-go/v7" "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" "github.com/openimsdk/open-im-server/v3/pkg/common/db/s3" - "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" ) @@ -45,7 +45,7 @@ func (m *Minio) getImageThumbnailURL(ctx context.Context, name string, expire ti return "", err } if !info.IsImg { - return "", errs.ErrData.WrapMsg("object not image") + return "", servererrs.ErrData.WrapMsg("object not image") } if opt.Width > info.Width || opt.Width <= 0 { opt.Width = info.Width From 7468ab7d6c097132a59ccfad404cace644074ea2 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:12:44 +0800 Subject: [PATCH 06/14] fix: pkg update. --- pkg/rpcclient/notification/group.go | 50 +++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index 97fd4a77b..70c1223f0 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -17,6 +17,9 @@ package notification import ( "context" "fmt" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/utils/datautil" + "github.com/openimsdk/tools/utils/stringutil" "github.com/openimsdk/open-im-server/v3/pkg/authverify" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -29,7 +32,6 @@ import ( "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" ) func NewGroupNotificationSender(db controller.GroupDatabase, msgRpcClient *rpcclient.MessageRpcClient, userRpcClient *rpcclient.UserRpcClient, config *config.GlobalConfig, fn func(ctx context.Context, userIDs []string) ([]CommonUser, error)) *GroupNotificationSender { @@ -59,7 +61,7 @@ func (g *GroupNotificationSender) PopulateGroupMember(ctx context.Context, membe } } if len(emptyUserIDs) > 0 { - users, err := g.getUsersInfo(ctx, utils.Keys(emptyUserIDs)) + users, err := g.getUsersInfo(ctx, datautil.Keys(emptyUserIDs)) if err != nil { return err } @@ -89,7 +91,7 @@ func (g *GroupNotificationSender) getUser(ctx context.Context, userID string) (* return nil, err } if len(users) == 0 { - return nil, errs.ErrUserIDNotFound.WrapMsg(fmt.Sprintf("user %s not found", userID)) + return nil, servererrs.ErrUserIDNotFound.WrapMsg(fmt.Sprintf("user %s not found", userID)) } return &sdkws.PublicUserInfo{ UserID: users[0].GetUserID(), @@ -185,7 +187,7 @@ func (g *GroupNotificationSender) getGroupOwnerAndAdminUserID(ctx context.Contex return nil, err } fn := func(e *relation.GroupMemberModel) string { return e.UserID } - return utils.Slice(members, fn), nil + return datautil.Slice(members, fn), nil } //nolint:unused @@ -289,7 +291,7 @@ func (g *GroupNotificationSender) GroupCreatedNotification(ctx context.Context, defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { @@ -302,7 +304,7 @@ func (g *GroupNotificationSender) GroupInfoSetNotification(ctx context.Context, defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { @@ -315,7 +317,7 @@ func (g *GroupNotificationSender) GroupInfoSetNameNotification(ctx context.Conte defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { @@ -328,7 +330,7 @@ func (g *GroupNotificationSender) GroupInfoSetAnnouncementNotification(ctx conte defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { @@ -341,7 +343,7 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, req.GroupID) @@ -358,7 +360,7 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C } userIDs = append(userIDs, req.InviterUserID, mcontext.GetOpUserID(ctx)) tips := &sdkws.JoinGroupApplicationTips{Group: group, Applicant: user, ReqMsg: req.ReqMessage} - for _, userID := range utils.Distinct(userIDs) { + for _, userID := range datautil.Distinct(userIDs) { err = g.Notification(ctx, mcontext.GetOpUserID(ctx), userID, constant.JoinGroupApplicationNotification, tips) if err != nil { log.ZError(ctx, "JoinGroupApplicationNotification failed", err, "group", req.GroupID, "userID", userID) @@ -371,7 +373,7 @@ func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, me defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, member.GroupID) @@ -386,7 +388,7 @@ func (g *GroupNotificationSender) GroupApplicationAcceptedNotification(ctx conte defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, req.GroupID) @@ -419,7 +421,7 @@ func (g *GroupNotificationSender) GroupApplicationRejectedNotification(ctx conte defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, req.GroupID) @@ -452,7 +454,7 @@ func (g *GroupNotificationSender) GroupOwnerTransferredNotification(ctx context. defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, req.GroupID) @@ -475,7 +477,7 @@ func (g *GroupNotificationSender) MemberKickedNotification(ctx context.Context, defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { @@ -488,7 +490,7 @@ func (g *GroupNotificationSender) MemberInvitedNotification(ctx context.Context, defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -513,7 +515,7 @@ func (g *GroupNotificationSender) MemberEnterNotification(ctx context.Context, g defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -532,7 +534,7 @@ func (g *GroupNotificationSender) GroupDismissedNotification(ctx context.Context defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { @@ -545,7 +547,7 @@ func (g *GroupNotificationSender) GroupMemberMutedNotification(ctx context.Conte defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -570,7 +572,7 @@ func (g *GroupNotificationSender) GroupMemberCancelMutedNotification(ctx context defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -592,7 +594,7 @@ func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, gr defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -617,7 +619,7 @@ func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Conte defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -674,7 +676,7 @@ func (g *GroupNotificationSender) GroupMemberSetToOrdinaryUserNotification(ctx c defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() group, err := g.getGroupInfo(ctx, groupID) @@ -696,7 +698,7 @@ func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, se defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + log.ZError(ctx, stringutil.GetFuncName(1)+" failed", err) } }() err = g.Notification(ctx, sendID, recvID, constant.SuperGroupUpdateNotification, nil) From 8b3e8ff54909c9147fd3dc2bb0d75bb1dbe8f4cc Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Wed, 27 Mar 2024 17:24:39 +0800 Subject: [PATCH 07/14] feat: kafka group third --- .../msgtransfer/online_history_msg_handler.go | 2 +- .../online_msg_to_mongo_handler.go | 2 +- internal/push/push_handler.go | 2 +- internal/rpc/group/group.go | 153 +++++++++--------- internal/rpc/third/log.go | 13 +- internal/rpc/third/third.go | 15 +- pkg/common/db/controller/group.go | 6 +- pkg/common/kafka/consumer_group.go | 8 +- pkg/common/kafka/producer.go | 14 +- pkg/common/kafka/util.go | 77 --------- pkg/rpcclient/group.go | 28 ++-- pkg/rpcclient/third.go | 12 +- tools/component/component.go | 67 +------- 13 files changed, 132 insertions(+), 267 deletions(-) delete mode 100644 pkg/common/kafka/util.go diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index 0e06c9624..4e9d66bcc 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -82,7 +82,7 @@ type OnlineHistoryRedisConsumerHandler struct { } func NewOnlineHistoryRedisConsumerHandler(kafkaConf *config.Kafka, database controller.CommonMsgDatabase, conversationRpcClient *rpcclient.ConversationRpcClient, groupRpcClient *rpcclient.GroupRpcClient) (*OnlineHistoryRedisConsumerHandler, error) { - historyConsumerGroup, err := kafka.NewMConsumerGroup(kafkaConf.Config, kafkaConf.ConsumerGroupID.MsgToRedis, []string{kafkaConf.LatestMsgToRedis.Topic}) + historyConsumerGroup, err := kafka.NewMConsumerGroup(&kafkaConf.Config, kafkaConf.ConsumerGroupID.MsgToRedis, []string{kafkaConf.LatestMsgToRedis.Topic}) if err != nil { return nil, err } diff --git a/internal/msgtransfer/online_msg_to_mongo_handler.go b/internal/msgtransfer/online_msg_to_mongo_handler.go index 39a6a4906..699211545 100644 --- a/internal/msgtransfer/online_msg_to_mongo_handler.go +++ b/internal/msgtransfer/online_msg_to_mongo_handler.go @@ -33,7 +33,7 @@ type OnlineHistoryMongoConsumerHandler struct { } func NewOnlineHistoryMongoConsumerHandler(kafkaConf *config.Kafka, database controller.CommonMsgDatabase) (*OnlineHistoryMongoConsumerHandler, error) { - historyConsumerGroup, err := kfk.NewMConsumerGroup(kafkaConf.Config, kafkaConf.ConsumerGroupID.MsgToMongo, []string{kafkaConf.MsgToMongo.Topic}) + historyConsumerGroup, err := kfk.NewMConsumerGroup(&kafkaConf.Config, kafkaConf.ConsumerGroupID.MsgToMongo, []string{kafkaConf.MsgToMongo.Topic}) if err != nil { return nil, err } diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index 647082966..abdb7ba89 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -35,7 +35,7 @@ type ConsumerHandler struct { } func NewConsumerHandler(kafkaConf *config.Kafka, pusher *Pusher) (*ConsumerHandler, error) { - pushConsumerGroup, err := kfk.NewMConsumerGroup(kafkaConf.Config, kafkaConf.ConsumerGroupID.MsgToPush, []string{kafkaConf.MsgToPush.Topic}) + pushConsumerGroup, err := kfk.NewMConsumerGroup(&kafkaConf.Config, kafkaConf.ConsumerGroupID.MsgToPush, []string{kafkaConf.MsgToPush.Topic}) if err != nil { return nil, err } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index e01ff6fad..ff0c27576 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -17,6 +17,12 @@ package group import ( "context" "fmt" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/db/mongoutil" + "github.com/openimsdk/tools/db/redisutil" + "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/utils/datautil" + "github.com/openimsdk/tools/utils/encrypt" "math/big" "math/rand" "strconv" @@ -27,11 +33,9 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/convert" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" "github.com/openimsdk/open-im-server/v3/pkg/common/db/controller" "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient/grouphash" @@ -40,13 +44,10 @@ import ( pbconversation "github.com/openimsdk/protocol/conversation" pbgroup "github.com/openimsdk/protocol/group" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/discoveryregistry" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" "github.com/openimsdk/tools/mw/specialerror" - "github.com/openimsdk/tools/tx" - "github.com/openimsdk/tools/utils" "google.golang.org/grpc" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -60,36 +61,32 @@ type groupServer struct { config *config.GlobalConfig } -func Start(ctx context.Context, config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { - mongo, err := unrelation.NewMongoDB(ctx, &config.Mongo) +func Start(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { + mgocli, err := mongoutil.NewMongoDB(ctx, config.Mongo.Build()) if err != nil { return err } - rdb, err := cache.NewRedis(ctx, &config.Redis) + rdb, err := redisutil.NewRedisClient(ctx, config.Redis.Build()) if err != nil { return err } - - groupDB, err := mgo.NewGroupMongo(mongo.GetDatabase(config.Mongo.Database)) + groupDB, err := mgo.NewGroupMongo(mgocli.GetDB()) if err != nil { return err } - - groupMemberDB, err := mgo.NewGroupMember(mongo.GetDatabase(config.Mongo.Database)) + groupMemberDB, err := mgo.NewGroupMember(mgocli.GetDB()) if err != nil { return err } - - groupRequestDB, err := mgo.NewGroupRequestMgo(mongo.GetDatabase(config.Mongo.Database)) + groupRequestDB, err := mgo.NewGroupRequestMgo(mgocli.GetDB()) 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) var gs groupServer - database := controller.NewGroupDatabase(rdb, groupDB, groupMemberDB, groupRequestDB, tx.NewMongo(mongo.GetClient()), grouphash.NewGroupHashFromGroupServer(&gs)) + database := controller.NewGroupDatabase(rdb, groupDB, groupMemberDB, groupRequestDB, mgocli.GetTx(), grouphash.NewGroupHashFromGroupServer(&gs)) gs.db = database gs.User = userRpcClient gs.Notification = notification.NewGroupNotificationSender(database, &msgRpcClient, &userRpcClient, config, func(ctx context.Context, userIDs []string) ([]notification.CommonUser, error) { @@ -97,7 +94,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, client discoveryreg if err != nil { return nil, err } - return utils.Slice(users, func(e *sdkws.UserInfo) notification.CommonUser { return e }), nil + return datautil.Slice(users, func(e *sdkws.UserInfo) notification.CommonUser { return e }), nil }) gs.conversationRpcClient = conversationRpcClient gs.msgRpcClient = msgRpcClient @@ -156,7 +153,7 @@ func (s *groupServer) GetPublicUserInfoMap(ctx context.Context, userIDs []string if err != nil { return nil, err } - return utils.SliceToMapAny(users, func(e *sdkws.PublicUserInfo) (string, *sdkws.PublicUserInfo) { + return datautil.SliceToMapAny(users, func(e *sdkws.PublicUserInfo) (string, *sdkws.PublicUserInfo) { return e.UserID, e }), nil } @@ -169,7 +166,7 @@ func (s *groupServer) GenGroupID(ctx context.Context, groupID *string) error { if *groupID != "" { _, err := s.db.TakeGroup(ctx, *groupID) if err == nil { - return errs.ErrGroupIDExisted.WrapMsg("group id existed " + *groupID) + return servererrs.ErrGroupIDExisted.WrapMsg("group id existed " + *groupID) } else if s.IsNotFound(err) { return nil } else { @@ -177,7 +174,7 @@ func (s *groupServer) GenGroupID(ctx context.Context, groupID *string) error { } } for i := 0; i < 10; i++ { - id := utils.Md5(strings.Join([]string{mcontext.GetOperationID(ctx), strconv.FormatInt(time.Now().UnixNano(), 10), strconv.Itoa(rand.Int())}, ",;,")) + id := encrypt.Md5(strings.Join([]string{mcontext.GetOperationID(ctx), strconv.FormatInt(time.Now().UnixNano(), 10), strconv.Itoa(rand.Int())}, ",;,")) bi := big.NewInt(0) bi.SetString(id[0:8], 16) id = bi.String() @@ -191,7 +188,7 @@ func (s *groupServer) GenGroupID(ctx context.Context, groupID *string) error { return err } } - return errs.ErrData.WrapMsg("group id gen error") + return servererrs.ErrData.WrapMsg("group id gen error") } func (s *groupServer) CreateGroup(ctx context.Context, req *pbgroup.CreateGroupReq) (*pbgroup.CreateGroupResp, error) { @@ -206,11 +203,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbgroup.CreateGroupR } userIDs := append(append(req.MemberUserIDs, req.AdminUserIDs...), req.OwnerUserID) opUserID := mcontext.GetOpUserID(ctx) - if !utils.Contain(opUserID, userIDs...) { + if !datautil.Contain(opUserID, userIDs...) { userIDs = append(userIDs, opUserID) } - if utils.Duplicate(userIDs) { + if datautil.Duplicate(userIDs) { return nil, errs.ErrArgs.WrapMsg("group member repeated") } @@ -220,7 +217,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbgroup.CreateGroupR } if len(userMap) != len(userIDs) { - return nil, errs.ErrUserIDNotFound.WrapMsg("user not found") + return nil, servererrs.ErrUserIDNotFound.WrapMsg("user not found") } config := &GroupEventCallbackConfig{ @@ -348,7 +345,7 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbgroup.GetJo if len(members) == 0 { return resp, nil } - groupIDs := utils.Slice(members, func(e *relationtb.GroupMemberModel) string { + groupIDs := datautil.Slice(members, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) groups, err := s.db.FindGroup(ctx, groupIDs) @@ -366,10 +363,10 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbgroup.GetJo if err := s.PopulateGroupMember(ctx, members...); err != nil { return nil, err } - ownerMap := utils.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { + ownerMap := datautil.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) - resp.Groups = utils.Slice(utils.Order(groupIDs, groups, func(group *relationtb.GroupModel) string { + resp.Groups = datautil.Slice(datautil.Order(groupIDs, groups, func(group *relationtb.GroupModel) string { return group.GroupID }), func(group *relationtb.GroupModel) *sdkws.GroupInfo { var userID string @@ -387,7 +384,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite if len(req.InvitedUserIDs) == 0 { return nil, errs.ErrArgs.WrapMsg("user empty") } - if utils.Duplicate(req.InvitedUserIDs) { + if datautil.Duplicate(req.InvitedUserIDs) { return nil, errs.ErrArgs.WrapMsg("userID duplicate") } group, err := s.db.TakeGroup(ctx, req.GroupID) @@ -396,7 +393,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite } if group.Status == constant.GroupStatusDismissed { - return nil, errs.ErrDismissedAlready.WrapMsg("group dismissed checking group status found it dismissed") + return nil, servererrs.ErrDismissedAlready.WrapMsg("group dismissed checking group status found it dismissed") } userMap, err := s.User.GetUsersInfoMap(ctx, req.InvitedUserIDs) @@ -499,7 +496,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbgroup.GetGro return nil, err } resp := &pbgroup.GetGroupAllMemberResp{} - resp.Members = utils.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { + resp.Members = datautil.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { return convert.Db2PbGroupMember(e) }) return resp, nil @@ -538,13 +535,13 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbgroup.GetGr } } - GMembers := utils.Paginate(groupMembers, int(req.Pagination.GetPageNumber()), int(req.Pagination.GetShowNumber())) - resp.Members = utils.Batch(convert.Db2PbGroupMember, GMembers) + GMembers := datautil.Paginate(groupMembers, int(req.Pagination.GetPageNumber()), int(req.Pagination.GetShowNumber())) + resp.Members = datautil.Batch(convert.Db2PbGroupMember, GMembers) resp.Total = uint32(total) return resp, nil } resp.Total = uint32(total) - resp.Members = utils.Batch(convert.Db2PbGroupMember, members) + resp.Members = datautil.Batch(convert.Db2PbGroupMember, members) return resp, nil } @@ -557,11 +554,11 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbgroup.KickGrou if len(req.KickedUserIDs) == 0 { return nil, errs.ErrArgs.WrapMsg("KickedUserIDs empty") } - if utils.IsDuplicateStringSlice(req.KickedUserIDs) { + if datautil.Duplicate(req.KickedUserIDs) { return nil, errs.ErrArgs.WrapMsg("KickedUserIDs duplicate") } opUserID := mcontext.GetOpUserID(ctx) - if utils.IsContain(opUserID, req.KickedUserIDs) { + if datautil.Contain(opUserID, req.KickedUserIDs...) { return nil, errs.ErrArgs.WrapMsg("opUserID in KickedUserIDs") } members, err := s.db.FindGroupMembers(ctx, req.GroupID, append(req.KickedUserIDs, opUserID)) @@ -580,7 +577,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbgroup.KickGrou for _, userID := range req.KickedUserIDs { member, ok := memberMap[userID] if !ok { - return nil, errs.ErrUserIDNotFound.WrapMsg(userID) + return nil, servererrs.ErrUserIDNotFound.WrapMsg(userID) } if !isAppManagerUid { if opMember == nil { @@ -673,7 +670,7 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbgroup.GetG if err := s.PopulateGroupMember(ctx, members...); err != nil { return nil, err } - resp.Members = utils.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { + resp.Members = datautil.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { return convert.Db2PbGroupMember(e) }) return resp, nil @@ -702,20 +699,20 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbgroup. for _, gr := range groupRequests { userIDs = append(userIDs, gr.UserID) } - userIDs = utils.Distinct(userIDs) + userIDs = datautil.Distinct(userIDs) userMap, err := s.User.GetPublicUserInfoMap(ctx, userIDs, true) if err != nil { return nil, err } - groups, err := s.db.FindGroup(ctx, utils.Distinct(groupIDs)) + groups, err := s.db.FindGroup(ctx, datautil.Distinct(groupIDs)) if err != nil { return nil, err } - groupMap := utils.SliceToMap(groups, func(e *relationtb.GroupModel) string { + groupMap := datautil.SliceToMap(groups, func(e *relationtb.GroupModel) string { return e.GroupID }) - if ids := utils.Single(utils.Keys(groupMap), groupIDs); len(ids) > 0 { - return nil, errs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) + if ids := datautil.Single(datautil.Keys(groupMap), groupIDs); len(ids) > 0 { + return nil, servererrs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) } groupMemberNumMap, err := s.db.MapGroupMemberNum(ctx, groupIDs) if err != nil { @@ -728,10 +725,10 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbgroup. if err := s.PopulateGroupMember(ctx, owners...); err != nil { return nil, err } - ownerMap := utils.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { + ownerMap := datautil.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) - resp.GroupRequests = utils.Slice(groupRequests, func(e *relationtb.GroupRequestModel) *sdkws.GroupRequest { + resp.GroupRequests = datautil.Slice(groupRequests, func(e *relationtb.GroupRequestModel) *sdkws.GroupRequest { var ownerUserID string if owner, ok := ownerMap[e.GroupID]; ok { ownerUserID = owner.UserID @@ -761,10 +758,10 @@ func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbgroup.GetGroupsI if err := s.PopulateGroupMember(ctx, owners...); err != nil { return nil, err } - ownerMap := utils.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { + ownerMap := datautil.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) - resp.GroupInfos = utils.Slice(groups, func(e *relationtb.GroupModel) *sdkws.GroupInfo { + resp.GroupInfos = datautil.Slice(groups, func(e *relationtb.GroupModel) *sdkws.GroupInfo { var ownerUserID string if owner, ok := ownerMap[e.GroupID]; ok { ownerUserID = owner.UserID @@ -775,7 +772,7 @@ func (s *groupServer) GetGroupsInfo(ctx context.Context, req *pbgroup.GetGroupsI } func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbgroup.GroupApplicationResponseReq) (*pbgroup.GroupApplicationResponseResp, error) { - if !utils.Contain(req.HandleResult, constant.GroupResponseAgree, constant.GroupResponseRefuse) { + if !datautil.Contain(req.HandleResult, constant.GroupResponseAgree, constant.GroupResponseRefuse) { return nil, errs.ErrArgs.WrapMsg("HandleResult unknown") } if !authverify.IsAppManagerUid(ctx, &s.config.Manager, &s.config.IMAdmin) { @@ -796,7 +793,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbgroup return nil, err } if groupRequest.HandleResult != 0 { - return nil, errs.ErrGroupRequestHandled.WrapMsg("group request already processed") + return nil, servererrs.ErrGroupRequestHandled.WrapMsg("group request already processed") } var inGroup bool if _, err := s.db.TakeGroupMember(ctx, req.GroupID, req.FromUserID); err == nil { @@ -864,7 +861,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbgroup.JoinGroupReq) return nil, err } if group.Status == constant.GroupStatusDismissed { - return nil, errs.ErrDismissedAlready.Wrap() + return nil, servererrs.ErrDismissedAlready.Wrap() } reqCall := &callbackstruct.CallbackJoinGroupReq{ @@ -886,7 +883,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbgroup.JoinGroupReq) _, err = s.db.TakeGroupMember(ctx, req.GroupID, req.InviterUserID) if err == nil { return nil, errs.ErrArgs.Wrap() - } else if !s.IsNotFound(err) && utils.Unwrap(err) != errs.ErrRecordNotFound { + } else if !s.IsNotFound(err) && errs.Unwrap(err) != errs.ErrRecordNotFound { return nil, err } log.ZInfo(ctx, "JoinGroup.groupInfo", "group", group, "eq", group.NeedVerification == constant.Directly) @@ -1012,7 +1009,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbgroup.SetGroupInf return nil, err } if group.Status == constant.GroupStatusDismissed { - return nil, errs.ErrDismissedAlready.Wrap() + return nil, servererrs.ErrDismissedAlready.Wrap() } resp := &pbgroup.SetGroupInfoResp{} @@ -1089,7 +1086,7 @@ func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbgroup.Trans return nil, err } if group.Status == constant.GroupStatusDismissed { - return nil, errs.ErrDismissedAlready.Wrap() + return nil, servererrs.ErrDismissedAlready.Wrap() } if req.OldOwnerUserID == req.NewOwnerUserID { return nil, errs.ErrArgs.WrapMsg("OldOwnerUserID == NewOwnerUserID") @@ -1101,8 +1098,8 @@ func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbgroup.Trans if err := s.PopulateGroupMember(ctx, members...); err != nil { return nil, err } - memberMap := utils.SliceToMap(members, func(e *relationtb.GroupMemberModel) string { return e.UserID }) - if ids := utils.Single([]string{req.OldOwnerUserID, req.NewOwnerUserID}, utils.Keys(memberMap)); len(ids) > 0 { + memberMap := datautil.SliceToMap(members, func(e *relationtb.GroupMemberModel) string { return e.UserID }) + if ids := datautil.Single([]string{req.OldOwnerUserID, req.NewOwnerUserID}, datautil.Keys(memberMap)); len(ids) > 0 { return nil, errs.ErrArgs.WrapMsg("user not in group " + strings.Join(ids, ",")) } oldOwner := memberMap[req.OldOwnerUserID] @@ -1154,7 +1151,7 @@ func (s *groupServer) GetGroups(ctx context.Context, req *pbgroup.GetGroupsReq) return nil, err } - groupIDs := utils.Slice(group, func(e *relationtb.GroupModel) string { + groupIDs := datautil.Slice(group, func(e *relationtb.GroupModel) string { return e.GroupID }) @@ -1163,14 +1160,14 @@ func (s *groupServer) GetGroups(ctx context.Context, req *pbgroup.GetGroupsReq) return nil, err } - ownerMemberMap := utils.SliceToMap(ownerMembers, func(e *relationtb.GroupMemberModel) string { + ownerMemberMap := datautil.SliceToMap(ownerMembers, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) groupMemberNumMap, err := s.db.MapGroupMemberNum(ctx, groupIDs) if err != nil { return nil, err } - resp.Groups = utils.Slice(group, func(group *relationtb.GroupModel) *pbgroup.CMSGroup { + resp.Groups = datautil.Slice(group, func(group *relationtb.GroupModel) *pbgroup.CMSGroup { var ( userID string username string @@ -1194,7 +1191,7 @@ func (s *groupServer) GetGroupMembersCMS(ctx context.Context, req *pbgroup.GetGr if err := s.PopulateGroupMember(ctx, members...); err != nil { return nil, err } - resp.Members = utils.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { + resp.Members = datautil.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { return convert.Db2PbGroupMember(e) }) return resp, nil @@ -1214,14 +1211,14 @@ func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbgrou if len(requests) == 0 { return resp, nil } - groupIDs := utils.Distinct(utils.Slice(requests, func(e *relationtb.GroupRequestModel) string { + groupIDs := datautil.Distinct(datautil.Slice(requests, func(e *relationtb.GroupRequestModel) string { return e.GroupID })) groups, err := s.db.FindGroup(ctx, groupIDs) if err != nil { return nil, err } - groupMap := utils.SliceToMap(groups, func(e *relationtb.GroupModel) string { + groupMap := datautil.SliceToMap(groups, func(e *relationtb.GroupModel) string { return e.GroupID }) owners, err := s.db.FindGroupsOwner(ctx, groupIDs) @@ -1231,14 +1228,14 @@ func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbgrou if err := s.PopulateGroupMember(ctx, owners...); err != nil { return nil, err } - ownerMap := utils.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { + ownerMap := datautil.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) groupMemberNum, err := s.db.MapGroupMemberNum(ctx, groupIDs) if err != nil { return nil, err } - resp.GroupRequests = utils.Slice(requests, func(e *relationtb.GroupRequestModel) *sdkws.GroupRequest { + resp.GroupRequests = datautil.Slice(requests, func(e *relationtb.GroupRequestModel) *sdkws.GroupRequest { var ownerUserID string if owner, ok := ownerMap[e.GroupID]; ok { ownerUserID = owner.UserID @@ -1267,7 +1264,7 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbgroup.DismissGrou return nil, err } if !req.DeleteMember && group.Status == constant.GroupStatusDismissed { - return nil, errs.ErrDismissedAlready.WrapMsg("group status is dismissed") + return nil, servererrs.ErrDismissedAlready.WrapMsg("group status is dismissed") } if err := s.db.DismissGroup(ctx, req.GroupID, req.DeleteMember); err != nil { return nil, err @@ -1504,7 +1501,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbgroup.SetGr return nil, err } } - if err := s.db.UpdateGroupMembers(ctx, utils.Slice(req.Members, func(e *pbgroup.SetGroupMemberInfo) *relationtb.BatchUpdateGroupMember { + if err := s.db.UpdateGroupMembers(ctx, datautil.Slice(req.Members, func(e *pbgroup.SetGroupMemberInfo) *relationtb.BatchUpdateGroupMember { return &relationtb.BatchUpdateGroupMember{ GroupID: e.GroupID, UserID: e.UserID, @@ -1541,26 +1538,26 @@ func (s *groupServer) GetGroupAbstractInfo(ctx context.Context, req *pbgroup.Get if len(req.GroupIDs) == 0 { return nil, errs.ErrArgs.WrapMsg("groupIDs empty") } - if utils.Duplicate(req.GroupIDs) { + if datautil.Duplicate(req.GroupIDs) { return nil, errs.ErrArgs.WrapMsg("groupIDs duplicate") } groups, err := s.db.FindGroup(ctx, req.GroupIDs) if err != nil { return nil, err } - if ids := utils.Single(req.GroupIDs, utils.Slice(groups, func(group *relationtb.GroupModel) string { + if ids := datautil.Single(req.GroupIDs, datautil.Slice(groups, func(group *relationtb.GroupModel) string { return group.GroupID })); len(ids) > 0 { - return nil, errs.ErrGroupIDNotFound.WrapMsg("not found group " + strings.Join(ids, ",")) + return nil, servererrs.ErrGroupIDNotFound.WrapMsg("not found group " + strings.Join(ids, ",")) } groupUserMap, err := s.db.MapGroupMemberUserID(ctx, req.GroupIDs) if err != nil { return nil, err } - if ids := utils.Single(req.GroupIDs, utils.Keys(groupUserMap)); len(ids) > 0 { - return nil, errs.ErrGroupIDNotFound.WrapMsg(fmt.Sprintf("group %s not found member", strings.Join(ids, ","))) + if ids := datautil.Single(req.GroupIDs, datautil.Keys(groupUserMap)); len(ids) > 0 { + return nil, servererrs.ErrGroupIDNotFound.WrapMsg(fmt.Sprintf("group %s not found member", strings.Join(ids, ","))) } - resp.GroupAbstractInfos = utils.Slice(groups, func(group *relationtb.GroupModel) *pbgroup.GroupAbstractInfo { + resp.GroupAbstractInfos = datautil.Slice(groups, func(group *relationtb.GroupModel) *pbgroup.GroupAbstractInfo { users := groupUserMap[group.GroupID] return convert.Db2PbGroupAbstractInfo(group.GroupID, users.MemberNum, users.Hash) }) @@ -1579,7 +1576,7 @@ func (s *groupServer) GetUserInGroupMembers(ctx context.Context, req *pbgroup.Ge if err := s.PopulateGroupMember(ctx, members...); err != nil { return nil, err } - resp.Members = utils.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { + resp.Members = datautil.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { return convert.Db2PbGroupMember(e) }) return resp, nil @@ -1606,7 +1603,7 @@ func (s *groupServer) GetGroupMemberRoleLevel(ctx context.Context, req *pbgroup. if err := s.PopulateGroupMember(ctx, members...); err != nil { return nil, err } - resp.Members = utils.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { + resp.Members = datautil.Slice(members, func(e *relationtb.GroupMemberModel) *sdkws.GroupMemberFullInfo { return convert.Db2PbGroupMember(e) }) return resp, nil @@ -1621,18 +1618,18 @@ func (s *groupServer) GetGroupUsersReqApplicationList(ctx context.Context, req * if len(requests) == 0 { return resp, nil } - groupIDs := utils.Distinct(utils.Slice(requests, func(e *relationtb.GroupRequestModel) string { + groupIDs := datautil.Distinct(datautil.Slice(requests, func(e *relationtb.GroupRequestModel) string { return e.GroupID })) groups, err := s.db.FindGroup(ctx, groupIDs) if err != nil { return nil, err } - groupMap := utils.SliceToMap(groups, func(e *relationtb.GroupModel) string { + groupMap := datautil.SliceToMap(groups, func(e *relationtb.GroupModel) string { return e.GroupID }) - if ids := utils.Single(groupIDs, utils.Keys(groupMap)); len(ids) > 0 { - return nil, errs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) + if ids := datautil.Single(groupIDs, datautil.Keys(groupMap)); len(ids) > 0 { + return nil, servererrs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) } owners, err := s.db.FindGroupsOwner(ctx, groupIDs) if err != nil { @@ -1641,14 +1638,14 @@ func (s *groupServer) GetGroupUsersReqApplicationList(ctx context.Context, req * if err := s.PopulateGroupMember(ctx, owners...); err != nil { return nil, err } - ownerMap := utils.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { + ownerMap := datautil.SliceToMap(owners, func(e *relationtb.GroupMemberModel) string { return e.GroupID }) groupMemberNum, err := s.db.MapGroupMemberNum(ctx, groupIDs) if err != nil { return nil, err } - resp.GroupRequests = utils.Slice(requests, func(e *relationtb.GroupRequestModel) *sdkws.GroupRequest { + resp.GroupRequests = datautil.Slice(requests, func(e *relationtb.GroupRequestModel) *sdkws.GroupRequest { var ownerUserID string if owner, ok := ownerMap[e.GroupID]; ok { ownerUserID = owner.UserID diff --git a/internal/rpc/third/log.go b/internal/rpc/third/log.go index b6f4d359f..e9df513aa 100644 --- a/internal/rpc/third/log.go +++ b/internal/rpc/third/log.go @@ -18,6 +18,9 @@ import ( "context" "crypto/rand" "fmt" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/utils/datautil" + "github.com/openimsdk/tools/utils/stringutil" "time" "github.com/openimsdk/open-im-server/v3/pkg/authverify" @@ -25,8 +28,6 @@ import ( "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/third" "github.com/openimsdk/tools/errs" - "github.com/openimsdk/tools/utils" - utils2 "github.com/openimsdk/tools/utils" ) func genLogID() string { @@ -70,7 +71,7 @@ func (t *thirdServer) UploadLogs(ctx context.Context, req *third.UploadLogsReq) } } if log.LogID == "" { - return nil, errs.ErrData.WrapMsg("LogModel id gen error") + return nil, servererrs.ErrData.WrapMsg("LogModel id gen error") } DBlogs = append(DBlogs, &log) } @@ -94,7 +95,7 @@ func (t *thirdServer) DeleteLogs(ctx context.Context, req *third.DeleteLogsReq) for _, log := range logs { logIDs = append(logIDs, log.LogID) } - if ids := utils2.Single(req.LogIDs, logIDs); len(ids) > 0 { + if ids := datautil.Single(req.LogIDs, logIDs); len(ids) > 0 { return nil, errs.ErrRecordNotFound.WrapMsg(fmt.Sprintf("logIDs not found%#v", ids)) } err = t.thirdDatabase.DeleteLogs(ctx, req.LogIDs, userID) @@ -110,7 +111,7 @@ func dbToPbLogInfos(logs []*relationtb.LogModel) []*third.LogInfo { return &third.LogInfo{ Filename: log.FileName, UserID: log.UserID, - Platform: utils.StringToInt32(log.Platform), + Platform: stringutil.StringToInt32(log.Platform), Url: log.Url, CreateTime: log.CreateTime.UnixMilli(), LogID: log.LogID, @@ -119,7 +120,7 @@ func dbToPbLogInfos(logs []*relationtb.LogModel) []*third.LogInfo { Ex: log.Ex, } } - return utils.Slice(logs, db2pbForLogInfo) + return datautil.Slice(logs, db2pbForLogInfo) } func (t *thirdServer) SearchLogs(ctx context.Context, req *third.SearchLogsReq) (*third.SearchLogsResp, error) { diff --git a/internal/rpc/third/third.go b/internal/rpc/third/third.go index 2a5e8022b..30f83beab 100644 --- a/internal/rpc/third/third.go +++ b/internal/rpc/third/third.go @@ -17,6 +17,9 @@ package third import ( "context" "fmt" + "github.com/openimsdk/tools/db/mongoutil" + "github.com/openimsdk/tools/db/redisutil" + "github.com/openimsdk/tools/discovery" "net/url" "time" @@ -28,28 +31,26 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/common/db/s3/cos" "github.com/openimsdk/open-im-server/v3/pkg/common/db/s3/minio" "github.com/openimsdk/open-im-server/v3/pkg/common/db/s3/oss" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" "github.com/openimsdk/protocol/third" - "github.com/openimsdk/tools/discoveryregistry" "github.com/openimsdk/tools/errs" "google.golang.org/grpc" ) -func Start(ctx context.Context, config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { - rdb, err := cache.NewRedis(ctx, &config.Redis) +func Start(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { + mgocli, err := mongoutil.NewMongoDB(ctx, config.Mongo.Build()) if err != nil { return err } - mongo, err := unrelation.NewMongoDB(ctx, &config.Mongo) + rdb, err := redisutil.NewRedisClient(ctx, config.Redis.Build()) if err != nil { return err } - logdb, err := mgo.NewLogMongo(mongo.GetDatabase(config.Mongo.Database)) + logdb, err := mgo.NewLogMongo(mgocli.GetDB()) if err != nil { return err } - s3db, err := mgo.NewS3Mongo(mongo.GetDatabase(config.Mongo.Database)) + s3db, err := mgo.NewS3Mongo(mgocli.GetDB()) if err != nil { return err } diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 1a11426ad..cddc22a7e 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -17,6 +17,7 @@ package controller import ( "context" "github.com/openimsdk/tools/db/pagination" + "github.com/openimsdk/tools/db/tx" "github.com/openimsdk/tools/utils/datautil" "time" @@ -24,7 +25,6 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/protocol/constant" - "github.com/openimsdk/tools/db" "github.com/redis/go-redis/v9" ) @@ -110,7 +110,7 @@ func NewGroupDatabase( groupDB relationtb.GroupModelInterface, groupMemberDB relationtb.GroupMemberModelInterface, groupRequestDB relationtb.GroupRequestModelInterface, - ctxTx db.CtxTx, + ctxTx tx.Tx, groupHash cache.GroupHash, ) GroupDatabase { rcOptions := rockscache.NewDefaultOptions() @@ -129,7 +129,7 @@ type groupDatabase struct { groupDB relationtb.GroupModelInterface groupMemberDB relationtb.GroupMemberModelInterface groupRequestDB relationtb.GroupRequestModelInterface - ctxTx db.CtxTx + ctxTx tx.Tx cache cache.GroupCache } diff --git a/pkg/common/kafka/consumer_group.go b/pkg/common/kafka/consumer_group.go index 3741c95d4..ecb6b1f7b 100644 --- a/pkg/common/kafka/consumer_group.go +++ b/pkg/common/kafka/consumer_group.go @@ -18,8 +18,8 @@ import ( "context" "errors" "github.com/IBM/sarama" - "github.com/openimsdk/tools/db/kafka" "github.com/openimsdk/tools/log" + kfk "github.com/openimsdk/tools/mq/kafka" ) type MConsumerGroup struct { @@ -36,12 +36,12 @@ type MConsumerGroupConfig struct { Password string } -func NewMConsumerGroup(conf kafka.Config, groupID string, topics []string) (*MConsumerGroup, error) { - kfk, err := kafka.BuildConsumerGroupConfig(conf, sarama.OffsetNewest) +func NewMConsumerGroup(conf *kfk.Config, groupID string, topics []string) (*MConsumerGroup, error) { + config, err := kfk.BuildConsumerGroupConfig(conf, sarama.OffsetNewest) if err != nil { return nil, err } - group, err := kafka.NewConsumerGroup(kfk, conf.Addr, groupID) + group, err := kfk.NewConsumerGroup(config, conf.Addr, groupID) if err != nil { return nil, err } diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 42bb14b4e..eedc17202 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -19,15 +19,13 @@ import ( "errors" "github.com/IBM/sarama" "github.com/openimsdk/protocol/constant" - "github.com/openimsdk/tools/db/kafka" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" + kfk "github.com/openimsdk/tools/mq/kafka" "google.golang.org/protobuf/proto" ) -const maxRetry = 10 // number of retries - var errEmptyMsg = errors.New("kafka binary msg is empty") // Producer represents a Kafka producer. @@ -45,19 +43,19 @@ type ProducerConfig struct { Password string } -func BuildProducerConfig(conf kafka.Config) (*sarama.Config, error) { - return kafka.BuildProducerConfig(conf) +func BuildProducerConfig(conf kfk.Config) (*sarama.Config, error) { + return kfk.BuildProducerConfig(conf) } -func NewKafkaProducer(kfk *sarama.Config, addr []string, topic string) (*Producer, error) { - producer, err := kafka.NewProducer(kfk, addr) +func NewKafkaProducer(config *sarama.Config, addr []string, topic string) (*Producer, error) { + producer, err := kfk.NewProducer(config, addr) if err != nil { return nil, err } return &Producer{ addr: addr, topic: topic, - config: kfk, + config: config, producer: producer, }, nil } diff --git a/pkg/common/kafka/util.go b/pkg/common/kafka/util.go deleted file mode 100644 index 4e2a02714..000000000 --- a/pkg/common/kafka/util.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright © 2023 OpenIM. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package kafka - -import ( - "fmt" - "os" - "strings" - - "github.com/IBM/sarama" - "github.com/openimsdk/open-im-server/v3/pkg/common/tls" -) - -type TLSConfig struct { - CACrt string - ClientCrt string - ClientKey string - ClientKeyPwd string - InsecureSkipVerify bool -} - -// SetupTLSConfig set up the TLS config from config file. -func SetupTLSConfig(cfg *sarama.Config, tlsConfig *TLSConfig) error { - if tlsConfig != nil { - cfg.Net.TLS.Enable = true - tlsConfig, err := tls.NewTLSConfig( - tlsConfig.ClientCrt, - tlsConfig.ClientKey, - tlsConfig.CACrt, - []byte(tlsConfig.ClientKeyPwd), - tlsConfig.InsecureSkipVerify, - ) - if err != nil { - return err - } - cfg.Net.TLS.Config = tlsConfig - } - return nil -} - -// getEnvOrConfig returns the value of the environment variable if it exists, -// otherwise, it returns the value from the configuration file. -func getEnvOrConfig(envName string, configValue string) string { - if value, exists := os.LookupEnv(envName); exists { - return value - } - return configValue -} - -// getKafkaAddrFromEnv returns the Kafka addresses combined from the KAFKA_ADDRESS and KAFKA_PORT environment variables. -// If the environment variables are not set, it returns the fallback value. -func getKafkaAddrFromEnv(fallback []string) []string { - envAddr := os.Getenv("KAFKA_ADDRESS") - envPort := os.Getenv("KAFKA_PORT") - - if envAddr != "" && envPort != "" { - addresses := strings.Split(envAddr, ",") - for i, addr := range addresses { - addresses[i] = fmt.Sprintf("%s:%s", addr, envPort) - } - return addresses - } - - return fallback -} diff --git a/pkg/rpcclient/group.go b/pkg/rpcclient/group.go index 1756211db..04f84cf52 100644 --- a/pkg/rpcclient/group.go +++ b/pkg/rpcclient/group.go @@ -16,26 +16,26 @@ package rpcclient import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/system/program" + "github.com/openimsdk/tools/utils/datautil" "strings" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/group" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/discoveryregistry" - "github.com/openimsdk/tools/errs" - "github.com/openimsdk/tools/utils" ) type Group struct { Client group.GroupClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry } -func NewGroup(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) *Group { +func NewGroup(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) *Group { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := group.NewGroupClient(conn) return &Group{discov: discov, Client: client} @@ -43,7 +43,7 @@ func NewGroup(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName str type GroupRpcClient Group -func NewGroupRpcClient(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName string) GroupRpcClient { +func NewGroupRpcClient(discov discovery.SvcDiscoveryRegistry, rpcRegisterName string) GroupRpcClient { return GroupRpcClient(*NewGroup(discov, rpcRegisterName)) } @@ -55,10 +55,10 @@ func (g *GroupRpcClient) GetGroupInfos(ctx context.Context, groupIDs []string, c return nil, err } if complete { - if ids := utils.Single(groupIDs, utils.Slice(resp.GroupInfos, func(e *sdkws.GroupInfo) string { + if ids := datautil.Single(groupIDs, datautil.Slice(resp.GroupInfos, func(e *sdkws.GroupInfo) string { return e.GroupID })); len(ids) > 0 { - return nil, errs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) + return nil, servererrs.ErrGroupIDNotFound.WrapMsg(strings.Join(ids, ",")) } } return resp.GroupInfos, nil @@ -81,7 +81,7 @@ func (g *GroupRpcClient) GetGroupInfoMap( if err != nil { return nil, err } - return utils.SliceToMap(groups, func(e *sdkws.GroupInfo) string { + return datautil.SliceToMap(groups, func(e *sdkws.GroupInfo) string { return e.GroupID }), nil } @@ -100,10 +100,10 @@ func (g *GroupRpcClient) GetGroupMemberInfos( return nil, err } if complete { - if ids := utils.Single(userIDs, utils.Slice(resp.Members, func(e *sdkws.GroupMemberFullInfo) string { + if ids := datautil.Single(userIDs, datautil.Slice(resp.Members, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID })); len(ids) > 0 { - return nil, errs.ErrNotInGroupYet.WrapMsg(strings.Join(ids, ",")) + return nil, servererrs.ErrNotInGroupYet.WrapMsg(strings.Join(ids, ",")) } } return resp.Members, nil @@ -131,7 +131,7 @@ func (g *GroupRpcClient) GetGroupMemberInfoMap( if err != nil { return nil, err } - return utils.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { + return datautil.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }), nil } diff --git a/pkg/rpcclient/third.go b/pkg/rpcclient/third.go index 7995e452f..f505f048b 100644 --- a/pkg/rpcclient/third.go +++ b/pkg/rpcclient/third.go @@ -16,28 +16,28 @@ package rpcclient import ( "context" + "github.com/openimsdk/tools/system/program" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/third" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "google.golang.org/grpc" ) type Third struct { conn grpc.ClientConnInterface Client third.ThirdClient - discov discoveryregistry.SvcDiscoveryRegistry + discov discovery.SvcDiscoveryRegistry GrafanaUrl string } -func NewThird(discov discoveryregistry.SvcDiscoveryRegistry, rpcRegisterName, grafanaUrl string) *Third { +func NewThird(discov discovery.SvcDiscoveryRegistry, rpcRegisterName, grafanaUrl string) *Third { conn, err := discov.GetConn(context.Background(), rpcRegisterName) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } client := third.NewThirdClient(conn) if err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } return &Third{discov: discov, Client: client, conn: conn, GrafanaUrl: grafanaUrl} } diff --git a/tools/component/component.go b/tools/component/component.go index 485573837..c0106eb0f 100644 --- a/tools/component/component.go +++ b/tools/component/component.go @@ -15,15 +15,16 @@ package main import ( + "context" "errors" "flag" "fmt" + kfk "github.com/openimsdk/tools/mq/kafka" "os" "strconv" "strings" "time" - "github.com/openimsdk/open-im-server/v3/pkg/common/kafka" "gopkg.in/yaml.v2" "github.com/openimsdk/tools/component" @@ -214,70 +215,14 @@ func checkZookeeper(config *config.GlobalConfig) error { // checkKafka checks the Kafka connection func checkKafka(config *config.GlobalConfig) error { - // Prioritize environment variables - kafkaStu := &component.Kafka{ - Username: config.Kafka.Username, - Password: config.Kafka.Password, - Addr: config.Kafka.Addr, - } - - kafkaClient, err := component.CheckKafka(kafkaStu) - if err != nil { - return err - } - defer kafkaClient.Close() - - // Verify if necessary topics exist - topics, err := kafkaClient.Topics() - if err != nil { - return errs.Wrap(err) - } - - requiredTopics := []string{ + topics := []string{ config.Kafka.MsgToMongo.Topic, config.Kafka.MsgToPush.Topic, config.Kafka.LatestMsgToRedis.Topic, } - - for _, requiredTopic := range requiredTopics { - if !isTopicPresent(requiredTopic, topics) { - return errs.WrapMsg(nil, "Kafka missing required topic", "topic", requiredTopic, "availableTopics", strings.Join(topics, ", ")) - } - } - - type Item struct { - Topic string - GroupID string - } - - items := []Item{ - { - Topic: config.Kafka.LatestMsgToRedis.Topic, - GroupID: config.Kafka.ConsumerGroupID.MsgToRedis, - }, - - { - Topic: config.Kafka.MsgToMongo.Topic, - GroupID: config.Kafka.ConsumerGroupID.MsgToMongo, - }, - - { - Topic: config.Kafka.MsgToPush.Topic, - GroupID: config.Kafka.ConsumerGroupID.MsgToPush, - }, - } - - for _, item := range items { - cg, err := kafka.NewMConsumerGroup(config.Kafka.Config, item.GroupID, []string{item.Topic}) - if err != nil { - return err - } - if err := cg.Close(); err != nil { - return err - } - } - - return nil + ctx, cancel := context.WithTimeout(context.Background(), time.Second*60) + defer cancel() + return kfk.CheckKafka(ctx, &config.Kafka.Config, topics) } // isTopicPresent checks if a topic is present in the list of topics From 421751fc1a8fa8f77c2c1ae3e14a0e4bb60c7204 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 18:30:11 +0800 Subject: [PATCH 08/14] fix: pkg update. --- internal/tools/conversation.go | 7 ++++--- internal/tools/msg.go | 11 ++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/internal/tools/conversation.go b/internal/tools/conversation.go index baee9cbc9..fa41c63bd 100644 --- a/internal/tools/conversation.go +++ b/internal/tools/conversation.go @@ -16,6 +16,8 @@ package tools import ( "context" + "github.com/openimsdk/tools/utils/idutil" + "github.com/openimsdk/tools/utils/stringutil" "math/rand" "time" @@ -23,7 +25,6 @@ import ( "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" ) // func (c *MsgTool) ConversationsDestructMsgs() { @@ -70,7 +71,7 @@ import ( func (c *MsgTool) ConversationsDestructMsgs() { log.ZInfo(context.Background(), "start msg destruct cron task") - ctx := mcontext.NewCtx(utils.GetSelfFuncName()) + ctx := mcontext.NewCtx(stringutil.GetSelfFuncName()) num, err := c.conversationDatabase.GetAllConversationIDsNumber(ctx) if err != nil { log.ZError(ctx, "GetAllConversationIDsNumber failed", err) @@ -117,7 +118,7 @@ func (c *MsgTool) ConversationsDestructMsgs() { } } for _, conversation := range temp { - ctx = mcontext.NewCtx(utils.GetSelfFuncName() + "-" + utils.OperationIDGenerator() + "-" + conversation.ConversationID + "-" + conversation.OwnerUserID) + ctx = mcontext.NewCtx(stringutil.GetSelfFuncName() + "-" + idutil.OperationIDGenerator() + "-" + conversation.ConversationID + "-" + conversation.OwnerUserID) log.ZDebug( ctx, "UserMsgsDestruct", diff --git a/internal/tools/msg.go b/internal/tools/msg.go index 2b82f5e3e..6050287ab 100644 --- a/internal/tools/msg.go +++ b/internal/tools/msg.go @@ -25,13 +25,14 @@ import ( kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discoveryregister" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient/notification" + "github.com/openimsdk/open-im-server/v3/pkg/util/conversationutil" "github.com/openimsdk/protocol/sdkws" + "github.com/openimsdk/tools/db/mongoutil" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" "github.com/openimsdk/tools/mw" - "github.com/openimsdk/tools/tx" - "github.com/openimsdk/tools/utils" + "github.com/openimsdk/tools/utils/stringutil" "github.com/redis/go-redis/v9" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" @@ -85,7 +86,7 @@ func InitMsgTool(ctx context.Context, config *config.GlobalConfig) (*MsgTool, er return nil, err } userMongoDB := mgo.NewUserMongoDriver(mongo.GetDatabase(config.Mongo.Database)) - ctxTx := tx.NewMongo(mongo.GetClient()) + ctxTx := mongoutil.NewMongo(mongo.GetClient()) userDatabase := controller.NewUserDatabase( userDB, cache.NewUserCacheRedis(rdb, userDB, cache.GetDefaultOpt()), @@ -136,7 +137,7 @@ func InitMsgTool(ctx context.Context, config *config.GlobalConfig) (*MsgTool, er //} func (c *MsgTool) AllConversationClearMsgAndFixSeq() { - ctx := mcontext.NewCtx(utils.GetSelfFuncName()) + ctx := mcontext.NewCtx(stringutil.GetSelfFuncName()) log.ZInfo(ctx, "============================ start del cron task ============================") num, err := c.conversationDatabase.GetAllConversationIDsNumber(ctx) if err != nil { @@ -219,7 +220,7 @@ func (c *MsgTool) FixAllSeq(ctx context.Context) error { return err } for _, conversationID := range conversationIDs { - conversationIDs = append(conversationIDs, utils.GetNotificationConversationIDByConversationID(conversationID)) + conversationIDs = append(conversationIDs, conversationutil.GetNotificationConversationIDByConversationID(conversationID)) } for _, conversationID := range conversationIDs { if err := c.checkMaxSeq(ctx, conversationID); err != nil { From a0972958949f806af71a0203afd4eb6a38e34303 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:03:14 +0800 Subject: [PATCH 09/14] fix: pkg update. --- cmd/openim-api/main.go | 4 ++-- cmd/openim-cmdutils/main.go | 4 ++-- cmd/openim-crontask/main.go | 4 ++-- cmd/openim-msggateway/main.go | 4 ++-- cmd/openim-msgtransfer/main.go | 4 ++-- cmd/openim-push/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-auth/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-conversation/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-friend/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-group/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-msg/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-third/main.go | 4 ++-- cmd/openim-rpc/openim-rpc-user/main.go | 4 ++-- internal/msgtransfer/init.go | 4 ++-- pkg/common/config/config.go | 4 ++-- pkg/common/db/controller/conversation.go | 6 +++--- pkg/common/db/controller/friend.go | 6 +++--- pkg/common/db/controller/user.go | 6 +++--- pkg/common/startrpc/start.go | 10 +++++----- 19 files changed, 44 insertions(+), 44 deletions(-) diff --git a/cmd/openim-api/main.go b/cmd/openim-api/main.go index 0f5b3a2dd..442bcd07c 100644 --- a/cmd/openim-api/main.go +++ b/cmd/openim-api/main.go @@ -16,7 +16,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" _ "net/http/pprof" ) @@ -25,6 +25,6 @@ func main() { apiCmd.AddPortFlag() apiCmd.AddPrometheusPortFlag() if err := apiCmd.Execute(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-cmdutils/main.go b/cmd/openim-cmdutils/main.go index f6b788933..d1d7f5129 100644 --- a/cmd/openim-cmdutils/main.go +++ b/cmd/openim-cmdutils/main.go @@ -16,7 +16,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -55,6 +55,6 @@ func main() { // openIM clear msg --clearAll msgUtilsCmd.AddCommand(&getCmd.Command, &fixCmd.Command, &clearCmd.Command) if err := msgUtilsCmd.Execute(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-crontask/main.go b/cmd/openim-crontask/main.go index cd6fae999..8b63968c5 100644 --- a/cmd/openim-crontask/main.go +++ b/cmd/openim-crontask/main.go @@ -16,12 +16,12 @@ package main import ( "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { cronTaskCmd := cmd.NewCronTaskCmd(cmd.CronTaskServer) if err := cronTaskCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-msggateway/main.go b/cmd/openim-msggateway/main.go index a295ed612..ded134916 100644 --- a/cmd/openim-msggateway/main.go +++ b/cmd/openim-msggateway/main.go @@ -16,7 +16,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { msgGatewayCmd.AddPortFlag() msgGatewayCmd.AddPrometheusPortFlag() if err := msgGatewayCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-msgtransfer/main.go b/cmd/openim-msgtransfer/main.go index 2b3a274f1..dbd64d903 100644 --- a/cmd/openim-msgtransfer/main.go +++ b/cmd/openim-msgtransfer/main.go @@ -16,7 +16,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -24,6 +24,6 @@ func main() { msgTransferCmd.AddPrometheusPortFlag() msgTransferCmd.AddTransferProgressFlag() if err := msgTransferCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-push/main.go b/cmd/openim-push/main.go index c7d29fc97..12322637d 100644 --- a/cmd/openim-push/main.go +++ b/cmd/openim-push/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/push" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { pushCmd.AddPortFlag() pushCmd.AddPrometheusPortFlag() if err := pushCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-auth/main.go b/cmd/openim-rpc/openim-rpc-auth/main.go index 8af912828..832b6b2f7 100644 --- a/cmd/openim-rpc/openim-rpc-auth/main.go +++ b/cmd/openim-rpc/openim-rpc-auth/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/auth" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,7 +25,7 @@ func main() { authCmd.AddPortFlag() authCmd.AddPrometheusPortFlag() if err := authCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-conversation/main.go b/cmd/openim-rpc/openim-rpc-conversation/main.go index 6e74b3251..b085f3e38 100644 --- a/cmd/openim-rpc/openim-rpc-conversation/main.go +++ b/cmd/openim-rpc/openim-rpc-conversation/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/conversation" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() if err := rpcCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-friend/main.go b/cmd/openim-rpc/openim-rpc-friend/main.go index a307c01a1..3ea57d34f 100644 --- a/cmd/openim-rpc/openim-rpc-friend/main.go +++ b/cmd/openim-rpc/openim-rpc-friend/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/friend" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() if err := rpcCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-group/main.go b/cmd/openim-rpc/openim-rpc-group/main.go index 2afb7963c..be62e6865 100644 --- a/cmd/openim-rpc/openim-rpc-group/main.go +++ b/cmd/openim-rpc/openim-rpc-group/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/group" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() if err := rpcCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-msg/main.go b/cmd/openim-rpc/openim-rpc-msg/main.go index bbffbcae7..e0d3b2d63 100644 --- a/cmd/openim-rpc/openim-rpc-msg/main.go +++ b/cmd/openim-rpc/openim-rpc-msg/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/msg" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() if err := rpcCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-third/main.go b/cmd/openim-rpc/openim-rpc-third/main.go index 09a8409e6..6e77a6081 100644 --- a/cmd/openim-rpc/openim-rpc-third/main.go +++ b/cmd/openim-rpc/openim-rpc-third/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/third" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() if err := rpcCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/cmd/openim-rpc/openim-rpc-user/main.go b/cmd/openim-rpc/openim-rpc-user/main.go index 18adbfae5..01faeab28 100644 --- a/cmd/openim-rpc/openim-rpc-user/main.go +++ b/cmd/openim-rpc/openim-rpc-user/main.go @@ -17,7 +17,7 @@ package main import ( "github.com/openimsdk/open-im-server/v3/internal/rpc/user" "github.com/openimsdk/open-im-server/v3/pkg/common/cmd" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" + "github.com/openimsdk/tools/system/program" ) func main() { @@ -25,6 +25,6 @@ func main() { rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() if err := rpcCmd.Exec(); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } } diff --git a/internal/msgtransfer/init.go b/internal/msgtransfer/init.go index 3acd9739e..9e6b866ec 100644 --- a/internal/msgtransfer/init.go +++ b/internal/msgtransfer/init.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" "github.com/openimsdk/tools/log" + "github.com/openimsdk/tools/system/program" "net/http" "os" "os/signal" @@ -32,7 +33,6 @@ import ( kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discoveryregister" "github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/mw" "github.com/prometheus/client_golang/prometheus" @@ -145,7 +145,7 @@ func (m *MsgTransfer) Start(prometheusPort int, config *config.GlobalConfig, ind signal.Notify(sigs, syscall.SIGTERM) select { case <-sigs: - util.SIGTERMExit() + program.SIGTERMExit() // graceful close kafka client. m.cancel() m.historyCH.historyConsumerGroup.Close() diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index b042a2d50..c4fb61d5c 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -19,10 +19,10 @@ import ( "github.com/openimsdk/tools/db/mongoutil" "github.com/openimsdk/tools/db/redisutil" "github.com/openimsdk/tools/mq/kafka" + "github.com/openimsdk/tools/system/program" "gopkg.in/yaml.v3" "time" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/tools/discovery" ) @@ -504,7 +504,7 @@ func (c *GlobalConfig) GetConfFromRegistry(registry discovery.SvcDiscoveryRegist func (c *GlobalConfig) EncodeConfig() []byte { buf := bytes.NewBuffer(nil) if err := yaml.NewEncoder(buf).Encode(c); err != nil { - util.ExitWithError(err) + program.ExitWithError(err) } return buf.Bytes() } diff --git a/pkg/common/db/controller/conversation.go b/pkg/common/db/controller/conversation.go index 8c69b5ae6..0cf453f19 100644 --- a/pkg/common/db/controller/conversation.go +++ b/pkg/common/db/controller/conversation.go @@ -17,6 +17,7 @@ package controller import ( "context" "github.com/openimsdk/tools/db/pagination" + "github.com/openimsdk/tools/db/tx" "github.com/openimsdk/tools/utils/datautil" "github.com/openimsdk/tools/utils/stringutil" "time" @@ -25,7 +26,6 @@ import ( relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" "github.com/openimsdk/protocol/constant" - "github.com/openimsdk/tools/db" "github.com/openimsdk/tools/log" ) @@ -67,7 +67,7 @@ type ConversationDatabase interface { //FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error) } -func NewConversationDatabase(conversation relationtb.ConversationModelInterface, cache cache.ConversationCache, tx db.CtxTx) ConversationDatabase { +func NewConversationDatabase(conversation relationtb.ConversationModelInterface, cache cache.ConversationCache, tx tx.Tx) ConversationDatabase { return &conversationDatabase{ conversationDB: conversation, cache: cache, @@ -78,7 +78,7 @@ func NewConversationDatabase(conversation relationtb.ConversationModelInterface, type conversationDatabase struct { conversationDB relationtb.ConversationModelInterface cache cache.ConversationCache - tx db.CtxTx + tx tx.Tx } func (c *conversationDatabase) SetUsersConversationFieldTx(ctx context.Context, userIDs []string, conversation *relationtb.ConversationModel, fieldMap map[string]any) (err error) { diff --git a/pkg/common/db/controller/friend.go b/pkg/common/db/controller/friend.go index 6b365be25..7e4ed659d 100644 --- a/pkg/common/db/controller/friend.go +++ b/pkg/common/db/controller/friend.go @@ -18,11 +18,11 @@ import ( "context" "fmt" "github.com/openimsdk/tools/db/pagination" + "github.com/openimsdk/tools/db/tx" "github.com/openimsdk/tools/utils/datautil" "time" "github.com/openimsdk/protocol/constant" - "github.com/openimsdk/tools/db" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" @@ -81,11 +81,11 @@ type FriendDatabase interface { type friendDatabase struct { friend relation.FriendModelInterface friendRequest relation.FriendRequestModelInterface - tx db.CtxTx + tx tx.Tx cache cache.FriendCache } -func NewFriendDatabase(friend relation.FriendModelInterface, friendRequest relation.FriendRequestModelInterface, cache cache.FriendCache, tx db.CtxTx) FriendDatabase { +func NewFriendDatabase(friend relation.FriendModelInterface, friendRequest relation.FriendRequestModelInterface, cache cache.FriendCache, tx tx.Tx) FriendDatabase { return &friendDatabase{friend: friend, friendRequest: friendRequest, cache: cache, tx: tx} } diff --git a/pkg/common/db/controller/user.go b/pkg/common/db/controller/user.go index 1c9cacfe6..8c218bebb 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -17,11 +17,11 @@ package controller import ( "context" "github.com/openimsdk/tools/db/pagination" + "github.com/openimsdk/tools/db/tx" "github.com/openimsdk/tools/utils/datautil" "time" "github.com/openimsdk/protocol/user" - "github.com/openimsdk/tools/db" "github.com/openimsdk/tools/errs" "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" @@ -83,13 +83,13 @@ type UserDatabase interface { } type userDatabase struct { - tx db.CtxTx + tx tx.Tx userDB relation.UserModelInterface cache cache.UserCache mongoDB relation.SubscribeUserModelInterface } -func NewUserDatabase(userDB relation.UserModelInterface, cache cache.UserCache, tx db.CtxTx, mongoDB relation.SubscribeUserModelInterface) UserDatabase { +func NewUserDatabase(userDB relation.UserModelInterface, cache cache.UserCache, tx tx.Tx, mongoDB relation.SubscribeUserModelInterface) UserDatabase { return &userDatabase{userDB: userDB, cache: cache, tx: tx, mongoDB: mongoDB} } diff --git a/pkg/common/startrpc/start.go b/pkg/common/startrpc/start.go index 6f26f583d..32a052383 100644 --- a/pkg/common/startrpc/start.go +++ b/pkg/common/startrpc/start.go @@ -17,6 +17,8 @@ package startrpc import ( "context" "fmt" + "github.com/openimsdk/tools/discovery" + "github.com/openimsdk/tools/system/program" "net" "net/http" "os" @@ -29,10 +31,9 @@ import ( "github.com/openimsdk/tools/log" grpcprometheus "github.com/grpc-ecosystem/go-grpc-prometheus" - "github.com/openimsdk/tools/discoveryregistry" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/mw" - "github.com/openimsdk/tools/network" + "github.com/openimsdk/tools/utils/network" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "google.golang.org/grpc" @@ -42,11 +43,10 @@ import ( config2 "github.com/openimsdk/open-im-server/v3/pkg/common/config" kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discoveryregister" "github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics" - util "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" ) // Start rpc server. -func Start(ctx context.Context, rpcPort int, rpcRegisterName string, prometheusPort int, config *config2.GlobalConfig, rpcFn func(ctx context.Context, config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options ...grpc.ServerOption) error { +func Start(ctx context.Context, rpcPort int, rpcRegisterName string, prometheusPort int, config *config2.GlobalConfig, rpcFn func(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error, options ...grpc.ServerOption) error { log.CInfo(ctx, "RPC server is initializing", "rpcRegisterName", rpcRegisterName, "rpcPort", rpcPort, "prometheusPort", prometheusPort) rpcTcpAddr := net.JoinHostPort(network.GetListenIP(config.Rpc.ListenIP), strconv.Itoa(rpcPort)) @@ -133,7 +133,7 @@ func Start(ctx context.Context, rpcPort int, rpcRegisterName string, prometheusP signal.Notify(sigs, syscall.SIGTERM) select { case <-sigs: - util.SIGTERMExit() + program.SIGTERMExit() ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) defer cancel() if err := gracefulStopWithCtx(ctx, srv.GracefulStop); err != nil { From ca89004086a04fc449b974c682b0ca2a05c592ae Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:28:56 +0800 Subject: [PATCH 10/14] fix: pkg update. --- go.mod | 2 +- internal/push/offlinepush/getui/push.go | 6 +- internal/rpc/auth/auth.go | 13 +- internal/rpc/conversation/conversaion.go | 21 +-- internal/rpc/friend/callback.go | 4 +- internal/rpc/friend/friend.go | 43 ++++--- internal/rpc/group/callback.go | 42 +++--- internal/rpc/msg/as_read.go | 4 +- internal/rpc/msg/callback.go | 34 ++--- internal/rpc/msg/delete.go | 4 +- internal/rpc/msg/message_interceptor.go | 6 +- internal/rpc/msg/revoke.go | 11 +- internal/rpc/msg/send.go | 21 +-- internal/rpc/msg/server.go | 24 ++-- internal/rpc/msg/statistics.go | 6 +- internal/rpc/msg/sync_msg.go | 12 +- internal/rpc/msg/utils.go | 4 +- internal/rpc/msg/verify.go | 66 +++++----- pkg/common/http/http_client.go | 17 +-- pkg/common/http/http_client_test.go | 157 +++++++++++------------ 20 files changed, 253 insertions(+), 244 deletions(-) diff --git a/go.mod b/go.mod index 3589daf74..b0ee7447c 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/openimsdk/localcache v0.0.1 github.com/openimsdk/protocol v0.0.58-google - github.com/openimsdk/tools v0.0.47-alpha.5 + github.com/openimsdk/tools v0.0.47-alpha.8 github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.18.0 github.com/sirupsen/logrus v1.9.3 // indirect diff --git a/internal/push/offlinepush/getui/push.go b/internal/push/offlinepush/getui/push.go index d9beadb9c..792f5865e 100644 --- a/internal/push/offlinepush/getui/push.go +++ b/internal/push/offlinepush/getui/push.go @@ -19,6 +19,7 @@ import ( "crypto/sha256" "encoding/hex" "errors" + "github.com/openimsdk/tools/utils/httputil" "strconv" "sync" "time" @@ -26,7 +27,6 @@ import ( "github.com/openimsdk/open-im-server/v3/internal/push/offlinepush" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" - http2 "github.com/openimsdk/open-im-server/v3/pkg/common/http" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" @@ -56,6 +56,7 @@ type Client struct { tokenExpireTime int64 taskIDTTL int64 pushConf *config.Push + httpClient *httputil.HTTPClient } func NewClient(pushConf *config.Push, cache cache.MsgModel) *Client { @@ -63,6 +64,7 @@ func NewClient(pushConf *config.Push, cache cache.MsgModel) *Client { tokenExpireTime: tokenExpireTime, taskIDTTL: taskIDTTL, pushConf: pushConf, + httpClient: httputil.NewHTTPClient(httputil.NewClientConfig()), } } @@ -174,7 +176,7 @@ func (g *Client) postReturn( output RespI, timeout int, ) error { - err := http2.PostReturn(ctx, url, header, input, output, timeout) + err := g.httpClient.PostReturn(ctx, url, header, input, output, timeout) if err != nil { return err } diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 991fc628c..f339dd44c 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -16,6 +16,8 @@ package auth import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/discovery" "github.com/openimsdk/open-im-server/v3/pkg/authverify" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -26,7 +28,6 @@ import ( pbauth "github.com/openimsdk/protocol/auth" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/msggateway" - "github.com/openimsdk/tools/discoveryregistry" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" @@ -37,11 +38,11 @@ import ( type authServer struct { authDatabase controller.AuthDatabase userRpcClient *rpcclient.UserRpcClient - RegisterCenter discoveryregistry.SvcDiscoveryRegistry + RegisterCenter discovery.SvcDiscoveryRegistry config *config.GlobalConfig } -func Start(ctx context.Context, config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { +func Start(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { rdb, err := cache.NewRedis(ctx, &config.Redis) if err != nil { return err @@ -109,19 +110,19 @@ func (s *authServer) parseToken(ctx context.Context, tokensString string) (claim return nil, err } if len(m) == 0 { - return nil, errs.ErrTokenNotExist.Wrap() + return nil, servererrs.ErrTokenNotExist.Wrap() } if v, ok := m[tokensString]; ok { switch v { case constant.NormalToken: return claims, nil case constant.KickedToken: - return nil, errs.ErrTokenKicked.Wrap() + return nil, servererrs.ErrTokenKicked.Wrap() default: return nil, errs.Wrap(errs.ErrTokenUnknown) } } - return nil, errs.ErrTokenNotExist.Wrap() + return nil, servererrs.ErrTokenNotExist.Wrap() } func (s *authServer) ParseToken( diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 22d0ac8e3..276287f8a 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -17,6 +17,9 @@ package conversation import ( "context" "errors" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/db/mongoutil" + "github.com/openimsdk/tools/utils/datautil" "sort" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -31,11 +34,9 @@ import ( "github.com/openimsdk/protocol/constant" pbconversation "github.com/openimsdk/protocol/conversation" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" - "github.com/openimsdk/tools/tx" - "github.com/openimsdk/tools/utils" "google.golang.org/grpc" ) @@ -47,7 +48,7 @@ type conversationServer struct { conversationNotificationSender *notification.ConversationNotificationSender } -func Start(ctx context.Context, config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { +func Start(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { rdb, err := cache.NewRedis(ctx, &config.Redis) if err != nil { return err @@ -68,7 +69,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, client discoveryreg user: &userRpcClient, conversationNotificationSender: notification.NewConversationNotificationSender(&config.Notification, &msgRpcClient), groupRpcClient: &groupRpcClient, - conversationDatabase: controller.NewConversationDatabase(conversationDB, cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), conversationDB), tx.NewMongo(mongo.GetClient())), + conversationDatabase: controller.NewConversationDatabase(conversationDB, cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), conversationDB), mongoutil.NewMongo(mongo.GetClient())), }) return nil } @@ -156,7 +157,7 @@ func (c *conversationServer) GetSortedConversationList(ctx context.Context, req c.conversationSort(conversation_isPinTime, resp, conversation_unreadCount, conversationMsg) c.conversationSort(conversation_notPinTime, resp, conversation_unreadCount, conversationMsg) - resp.ConversationElems = utils.Paginate(resp.ConversationElems, int(req.Pagination.GetPageNumber()), int(req.Pagination.GetShowNumber())) + resp.ConversationElems = datautil.Paginate(resp.ConversationElems, int(req.Pagination.GetPageNumber()), int(req.Pagination.GetShowNumber())) return resp, nil } @@ -182,7 +183,7 @@ func (c *conversationServer) GetConversations(ctx context.Context, req *pbconver func (c *conversationServer) SetConversation(ctx context.Context, req *pbconversation.SetConversationReq) (*pbconversation.SetConversationResp, error) { var conversation tablerelation.ConversationModel - if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil { + if err := datautil.CopyStructFields(&conversation, req.Conversation); err != nil { return nil, err } err := c.conversationDatabase.SetUserConversations(ctx, req.Conversation.OwnerUserID, []*tablerelation.ConversationModel{&conversation}) @@ -205,7 +206,7 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver return nil, err } if groupInfo.Status == constant.GroupStatusDismissed { - return nil, errs.ErrDismissedAlready.WrapMsg("group dismissed") + return nil, servererrs.ErrDismissedAlready.WrapMsg("group dismissed") } } var unequal int @@ -424,7 +425,7 @@ func (c *conversationServer) GetConversationOfflinePushUserIDs(ctx context.Conte for _, userID := range userIDs { delete(userIDSet, userID) } - return &pbconversation.GetConversationOfflinePushUserIDsResp{UserIDs: utils.Keys(userIDSet)}, nil + return &pbconversation.GetConversationOfflinePushUserIDsResp{UserIDs: datautil.Keys(userIDSet)}, nil } func (c *conversationServer) conversationSort(conversations map[int64]string, resp *pbconversation.GetSortedConversationListResp, conversation_unreadCount map[string]int64, conversationMsg map[string]*pbconversation.ConversationElem) { @@ -493,7 +494,7 @@ func (c *conversationServer) getConversationInfo( for conversationID, chatLog := range chatLogs { pbchatLog := &pbconversation.ConversationElem{} msgInfo := &pbconversation.MsgInfo{} - if err := utils.CopyStructFields(msgInfo, chatLog); err != nil { + if err := datautil.CopyStructFields(msgInfo, chatLog); err != nil { return nil, err } switch chatLog.SessionType { diff --git a/internal/rpc/friend/callback.go b/internal/rpc/friend/callback.go index bdd78eafe..333bee21c 100644 --- a/internal/rpc/friend/callback.go +++ b/internal/rpc/friend/callback.go @@ -16,12 +16,12 @@ package friend import ( "context" + "github.com/openimsdk/tools/utils/datautil" cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/http" pbfriend "github.com/openimsdk/protocol/friend" - "github.com/openimsdk/tools/utils" ) func CallbackBeforeAddFriend(ctx context.Context, callback *config.Callback, req *pbfriend.ApplyToAddFriendReq) error { @@ -56,7 +56,7 @@ func CallbackBeforeSetFriendRemark(ctx context.Context, callback *config.Callbac if err := http.CallBackPostReturn(ctx, callback.CallbackUrl, cbReq, resp, callback.CallbackBeforeAddFriend); err != nil { return err } - utils.NotNilReplace(&req.Remark, &resp.Remark) + datautil.NotNilReplace(&req.Remark, &resp.Remark) return nil } diff --git a/internal/rpc/friend/friend.go b/internal/rpc/friend/friend.go index 372f089e6..46e172850 100644 --- a/internal/rpc/friend/friend.go +++ b/internal/rpc/friend/friend.go @@ -16,6 +16,9 @@ package friend import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/db/mongoutil" + "github.com/openimsdk/tools/utils/datautil" "github.com/openimsdk/open-im-server/v3/pkg/authverify" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -30,10 +33,8 @@ import ( "github.com/openimsdk/protocol/constant" pbfriend "github.com/openimsdk/protocol/friend" "github.com/openimsdk/protocol/sdkws" - registry "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" - "github.com/openimsdk/tools/tx" - "github.com/openimsdk/tools/utils" "google.golang.org/grpc" ) @@ -43,11 +44,11 @@ type friendServer struct { userRpcClient *rpcclient.UserRpcClient notificationSender *notification.FriendNotificationSender conversationRpcClient rpcclient.ConversationRpcClient - RegisterCenter registry.SvcDiscoveryRegistry + RegisterCenter discovery.SvcDiscoveryRegistry config *config.GlobalConfig } -func Start(ctx context.Context, config *config.GlobalConfig, client registry.SvcDiscoveryRegistry, server *grpc.Server) error { +func Start(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { // Initialize MongoDB mongo, err := unrelation.NewMongoDB(ctx, &config.Mongo) if err != nil { @@ -92,7 +93,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, client registry.Svc friendMongoDB, friendRequestMongoDB, cache.NewFriendCacheRedis(rdb, friendMongoDB, cache.GetDefaultOpt()), - tx.NewMongo(mongo.GetClient()), + mongoutil.NewMongo(mongo.GetClient()), ), blackDatabase: controller.NewBlackDatabase( blackMongoDB, @@ -116,9 +117,9 @@ func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbfriend.Apply } if req.ToUserID == req.FromUserID { - return nil, errs.ErrCanNotAddYourself.WrapMsg("req.ToUserID", req.ToUserID) + return nil, servererrs.ErrCanNotAddYourself.WrapMsg("req.ToUserID", req.ToUserID) } - if err = CallbackBeforeAddFriend(ctx, &s.config.Callback, req); err != nil && err != errs.ErrCallbackContinue { + if err = CallbackBeforeAddFriend(ctx, &s.config.Callback, req); err != nil && err != servererrs.ErrCallbackContinue { return nil, err } @@ -132,7 +133,7 @@ func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbfriend.Apply } if in1 && in2 { - return nil, errs.ErrRelationshipAlready.WrapMsg("already friends has f") + return nil, servererrs.ErrRelationshipAlready.WrapMsg("already friends has f") } if err = s.friendDatabase.AddFriendRequest(ctx, req.FromUserID, req.ToUserID, req.ReqMsg, req.Ex); err != nil { @@ -143,7 +144,7 @@ func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbfriend.Apply return nil, err } - if err = CallbackAfterAddFriend(ctx, &s.config.Callback, req); err != nil && err != errs.ErrCallbackContinue { + if err = CallbackAfterAddFriend(ctx, &s.config.Callback, req); err != nil && err != servererrs.ErrCallbackContinue { return nil, err } return resp, nil @@ -157,10 +158,10 @@ func (s *friendServer) ImportFriends(ctx context.Context, req *pbfriend.ImportFr if _, err := s.userRpcClient.GetUsersInfo(ctx, append([]string{req.OwnerUserID}, req.FriendUserIDs...)); err != nil { return nil, err } - if utils.Contain(req.OwnerUserID, req.FriendUserIDs...) { - return nil, errs.ErrCanNotAddYourself.WrapMsg("can not add yourself") + if datautil.Contain(req.OwnerUserID, req.FriendUserIDs...) { + return nil, servererrs.ErrCanNotAddYourself.WrapMsg("can not add yourself") } - if utils.Duplicate(req.FriendUserIDs) { + if datautil.Duplicate(req.FriendUserIDs) { return nil, errs.ErrArgs.WrapMsg("friend userID repeated") } @@ -198,7 +199,7 @@ func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbfriend.Res HandleResult: req.HandleResult, } if req.HandleResult == constant.FriendResponseAgree { - if err := CallbackBeforeAddFriendAgree(ctx, &s.config.Callback, req); err != nil && err != errs.ErrCallbackContinue { + if err := CallbackBeforeAddFriendAgree(ctx, &s.config.Callback, req); err != nil && err != servererrs.ErrCallbackContinue { return nil, err } err := s.friendDatabase.AgreeFriendRequest(ctx, &friendRequest) @@ -244,7 +245,7 @@ func (s *friendServer) DeleteFriend(ctx context.Context, req *pbfriend.DeleteFri // ok. func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbfriend.SetFriendRemarkReq) (resp *pbfriend.SetFriendRemarkResp, err error) { - if err = CallbackBeforeSetFriendRemark(ctx, &s.config.Callback, req); err != nil && err != errs.ErrCallbackContinue { + if err = CallbackBeforeSetFriendRemark(ctx, &s.config.Callback, req); err != nil && err != servererrs.ErrCallbackContinue { return nil, err } resp = &pbfriend.SetFriendRemarkResp{} @@ -258,7 +259,7 @@ func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbfriend.SetFri if err := s.friendDatabase.UpdateRemark(ctx, req.OwnerUserID, req.FriendUserID, req.Remark); err != nil { return nil, err } - if err := CallbackAfterSetFriendRemark(ctx, &s.config.Callback, req); err != nil && err != errs.ErrCallbackContinue { + if err := CallbackAfterSetFriendRemark(ctx, &s.config.Callback, req); err != nil && err != servererrs.ErrCallbackContinue { return nil, err } s.notificationSender.FriendRemarkSetNotification(ctx, req.OwnerUserID, req.FriendUserID) @@ -268,7 +269,7 @@ func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbfriend.SetFri // ok. func (s *friendServer) GetDesignatedFriends(ctx context.Context, req *pbfriend.GetDesignatedFriendsReq) (resp *pbfriend.GetDesignatedFriendsResp, err error) { resp = &pbfriend.GetDesignatedFriendsResp{} - if utils.Duplicate(req.FriendUserIDs) { + if datautil.Duplicate(req.FriendUserIDs) { return nil, errs.ErrArgs.WrapMsg("friend userID repeated") } friends, err := s.friendDatabase.FindFriendsWithError(ctx, req.OwnerUserID, req.FriendUserIDs) @@ -374,7 +375,7 @@ func (s *friendServer) GetSpecifiedFriendsInfo(ctx context.Context, req *pbfrien if len(req.UserIDList) == 0 { return nil, errs.ErrArgs.WrapMsg("userIDList is empty") } - if utils.Duplicate(req.UserIDList) { + if datautil.Duplicate(req.UserIDList) { return nil, errs.ErrArgs.WrapMsg("userIDList repeated") } userMap, err := s.userRpcClient.GetUsersInfoMap(ctx, req.UserIDList) @@ -389,10 +390,10 @@ func (s *friendServer) GetSpecifiedFriendsInfo(ctx context.Context, req *pbfrien if err != nil { return nil, err } - friendMap := utils.SliceToMap(friends, func(e *tablerelation.FriendModel) string { + friendMap := datautil.SliceToMap(friends, func(e *tablerelation.FriendModel) string { return e.FriendUserID }) - blackMap := utils.SliceToMap(blacks, func(e *tablerelation.BlackModel) string { + blackMap := datautil.SliceToMap(blacks, func(e *tablerelation.BlackModel) string { return e.BlockUserID }) resp := &pbfriend.GetSpecifiedFriendsInfoResp{ @@ -441,7 +442,7 @@ func (s *friendServer) UpdateFriends( if len(req.FriendUserIDs) == 0 { return nil, errs.ErrArgs.WrapMsg("friendIDList is empty") } - if utils.Duplicate(req.FriendUserIDs) { + if datautil.Duplicate(req.FriendUserIDs) { return nil, errs.ErrArgs.WrapMsg("friendIDList repeated") } diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index 749db7f27..4d4b6c8cc 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -16,6 +16,7 @@ package group import ( "context" + "github.com/openimsdk/tools/utils/datautil" "time" "github.com/openimsdk/open-im-server/v3/pkg/apistruct" @@ -28,7 +29,6 @@ import ( pbgroup "github.com/openimsdk/protocol/group" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -69,18 +69,18 @@ func CallbackBeforeCreateGroup(ctx context.Context, cfg *GroupEventCallbackConfi return err } - utils.NotNilReplace(&req.GroupInfo.GroupID, resp.GroupID) - utils.NotNilReplace(&req.GroupInfo.GroupName, resp.GroupName) - utils.NotNilReplace(&req.GroupInfo.Notification, resp.Notification) - utils.NotNilReplace(&req.GroupInfo.Introduction, resp.Introduction) - utils.NotNilReplace(&req.GroupInfo.FaceURL, resp.FaceURL) - utils.NotNilReplace(&req.GroupInfo.OwnerUserID, resp.OwnerUserID) - utils.NotNilReplace(&req.GroupInfo.Ex, resp.Ex) - utils.NotNilReplace(&req.GroupInfo.Status, resp.Status) - utils.NotNilReplace(&req.GroupInfo.CreatorUserID, resp.CreatorUserID) - utils.NotNilReplace(&req.GroupInfo.GroupType, resp.GroupType) - utils.NotNilReplace(&req.GroupInfo.NeedVerification, resp.NeedVerification) - utils.NotNilReplace(&req.GroupInfo.LookMemberInfo, resp.LookMemberInfo) + datautil.NotNilReplace(&req.GroupInfo.GroupID, resp.GroupID) + datautil.NotNilReplace(&req.GroupInfo.GroupName, resp.GroupName) + datautil.NotNilReplace(&req.GroupInfo.Notification, resp.Notification) + datautil.NotNilReplace(&req.GroupInfo.Introduction, resp.Introduction) + datautil.NotNilReplace(&req.GroupInfo.FaceURL, resp.FaceURL) + datautil.NotNilReplace(&req.GroupInfo.OwnerUserID, resp.OwnerUserID) + datautil.NotNilReplace(&req.GroupInfo.Ex, resp.Ex) + datautil.NotNilReplace(&req.GroupInfo.Status, resp.Status) + datautil.NotNilReplace(&req.GroupInfo.CreatorUserID, resp.CreatorUserID) + datautil.NotNilReplace(&req.GroupInfo.GroupType, resp.GroupType) + datautil.NotNilReplace(&req.GroupInfo.NeedVerification, resp.NeedVerification) + datautil.NotNilReplace(&req.GroupInfo.LookMemberInfo, resp.LookMemberInfo) return nil } @@ -137,10 +137,10 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, cfg *GroupEventCallbackC groupMember.MuteEndTime = time.UnixMilli(*resp.MuteEndTime) } - utils.NotNilReplace(&groupMember.FaceURL, resp.FaceURL) - utils.NotNilReplace(&groupMember.Ex, resp.Ex) - utils.NotNilReplace(&groupMember.Nickname, resp.Nickname) - utils.NotNilReplace(&groupMember.RoleLevel, resp.RoleLevel) + datautil.NotNilReplace(&groupMember.FaceURL, resp.FaceURL) + datautil.NotNilReplace(&groupMember.Ex, resp.Ex) + datautil.NotNilReplace(&groupMember.Nickname, resp.Nickname) + datautil.NotNilReplace(&groupMember.RoleLevel, resp.RoleLevel) return nil } @@ -394,10 +394,10 @@ func CallbackBeforeSetGroupInfo(ctx context.Context, cfg *GroupEventCallbackConf if resp.ApplyMemberFriend != nil { req.GroupInfoForSet.ApplyMemberFriend = wrapperspb.Int32(*resp.ApplyMemberFriend) } - utils.NotNilReplace(&req.GroupInfoForSet.GroupID, &resp.GroupID) - utils.NotNilReplace(&req.GroupInfoForSet.GroupName, &resp.GroupName) - utils.NotNilReplace(&req.GroupInfoForSet.FaceURL, &resp.FaceURL) - utils.NotNilReplace(&req.GroupInfoForSet.Introduction, &resp.Introduction) + datautil.NotNilReplace(&req.GroupInfoForSet.GroupID, &resp.GroupID) + datautil.NotNilReplace(&req.GroupInfoForSet.GroupName, &resp.GroupName) + datautil.NotNilReplace(&req.GroupInfoForSet.FaceURL, &resp.FaceURL) + datautil.NotNilReplace(&req.GroupInfoForSet.Introduction, &resp.Introduction) return nil } diff --git a/internal/rpc/msg/as_read.go b/internal/rpc/msg/as_read.go index 33f26558c..248c8c09d 100644 --- a/internal/rpc/msg/as_read.go +++ b/internal/rpc/msg/as_read.go @@ -16,7 +16,7 @@ package msg import ( "context" - "github.com/openimsdk/tools/utils/goassist" + "github.com/openimsdk/tools/utils/datautil" cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/protocol/constant" @@ -157,7 +157,7 @@ func (m *msgServer) MarkConversationAsRead(ctx context.Context, req *msg.MarkCon } // avoid client missed call MarkConversationMessageAsRead by order for _, val := range req.Seqs { - if !goassist.Contain(val, seqs...) { + if !datautil.Contain(val, seqs...) { seqs = append(seqs, val) } } diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index a56a793e1..eb733847b 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -16,6 +16,7 @@ package msg import ( "context" + "github.com/openimsdk/tools/utils/datautil" cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -25,7 +26,6 @@ import ( "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" "google.golang.org/protobuf/proto" ) @@ -136,22 +136,22 @@ func callbackMsgModify(ctx context.Context, globalConfig *config.GlobalConfig, m if resp.Content != nil { msg.MsgData.Content = []byte(*resp.Content) } - utils.NotNilReplace(msg.MsgData.OfflinePushInfo, resp.OfflinePushInfo) - utils.NotNilReplace(&msg.MsgData.RecvID, resp.RecvID) - utils.NotNilReplace(&msg.MsgData.GroupID, resp.GroupID) - utils.NotNilReplace(&msg.MsgData.ClientMsgID, resp.ClientMsgID) - utils.NotNilReplace(&msg.MsgData.ServerMsgID, resp.ServerMsgID) - utils.NotNilReplace(&msg.MsgData.SenderPlatformID, resp.SenderPlatformID) - utils.NotNilReplace(&msg.MsgData.SenderNickname, resp.SenderNickname) - utils.NotNilReplace(&msg.MsgData.SenderFaceURL, resp.SenderFaceURL) - utils.NotNilReplace(&msg.MsgData.SessionType, resp.SessionType) - utils.NotNilReplace(&msg.MsgData.MsgFrom, resp.MsgFrom) - utils.NotNilReplace(&msg.MsgData.ContentType, resp.ContentType) - utils.NotNilReplace(&msg.MsgData.Status, resp.Status) - utils.NotNilReplace(&msg.MsgData.Options, resp.Options) - utils.NotNilReplace(&msg.MsgData.AtUserIDList, resp.AtUserIDList) - utils.NotNilReplace(&msg.MsgData.AttachedInfo, resp.AttachedInfo) - utils.NotNilReplace(&msg.MsgData.Ex, resp.Ex) + datautil.NotNilReplace(msg.MsgData.OfflinePushInfo, resp.OfflinePushInfo) + datautil.NotNilReplace(&msg.MsgData.RecvID, resp.RecvID) + datautil.NotNilReplace(&msg.MsgData.GroupID, resp.GroupID) + datautil.NotNilReplace(&msg.MsgData.ClientMsgID, resp.ClientMsgID) + datautil.NotNilReplace(&msg.MsgData.ServerMsgID, resp.ServerMsgID) + datautil.NotNilReplace(&msg.MsgData.SenderPlatformID, resp.SenderPlatformID) + datautil.NotNilReplace(&msg.MsgData.SenderNickname, resp.SenderNickname) + datautil.NotNilReplace(&msg.MsgData.SenderFaceURL, resp.SenderFaceURL) + datautil.NotNilReplace(&msg.MsgData.SessionType, resp.SessionType) + datautil.NotNilReplace(&msg.MsgData.MsgFrom, resp.MsgFrom) + datautil.NotNilReplace(&msg.MsgData.ContentType, resp.ContentType) + datautil.NotNilReplace(&msg.MsgData.Status, resp.Status) + datautil.NotNilReplace(&msg.MsgData.Options, resp.Options) + datautil.NotNilReplace(&msg.MsgData.AtUserIDList, resp.AtUserIDList) + datautil.NotNilReplace(&msg.MsgData.AttachedInfo, resp.AttachedInfo) + datautil.NotNilReplace(&msg.MsgData.Ex, resp.Ex) log.ZDebug(ctx, "callbackMsgModify", "msg", msg.MsgData) return nil } diff --git a/internal/rpc/msg/delete.go b/internal/rpc/msg/delete.go index e2be1af71..98ffd3c54 100644 --- a/internal/rpc/msg/delete.go +++ b/internal/rpc/msg/delete.go @@ -16,6 +16,7 @@ package msg import ( "context" + "github.com/openimsdk/tools/utils/timeutil" "github.com/openimsdk/open-im-server/v3/pkg/authverify" "github.com/openimsdk/protocol/constant" @@ -23,7 +24,6 @@ import ( "github.com/openimsdk/protocol/msg" "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/log" - "github.com/openimsdk/tools/utils" ) func (m *msgServer) getMinSeqs(maxSeqs map[string]int64) map[string]int64 { @@ -112,7 +112,7 @@ func (m *msgServer) DeleteMsgPhysical(ctx context.Context, req *msg.DeleteMsgPhy if err := authverify.CheckAdmin(ctx, &m.config.Manager, &m.config.IMAdmin); err != nil { return nil, err } - remainTime := utils.GetCurrentTimestampBySecond() - req.Timestamp + remainTime := timeutil.GetCurrentTimestampBySecond() - req.Timestamp for _, conversationID := range req.ConversationIDs { if err := m.MsgDatabase.DeleteConversationMsgsAndSetMinSeq(ctx, conversationID, remainTime); err != nil { log.ZWarn( diff --git a/internal/rpc/msg/message_interceptor.go b/internal/rpc/msg/message_interceptor.go index 4f1bed3c4..7c13a3666 100644 --- a/internal/rpc/msg/message_interceptor.go +++ b/internal/rpc/msg/message_interceptor.go @@ -16,12 +16,12 @@ package msg import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/msg" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/errs" ) type MessageInterceptorFunc func(ctx context.Context, globalConfig *config.GlobalConfig, req *msg.SendMsgReq) (*sdkws.MsgData, error) @@ -30,12 +30,12 @@ func MessageHasReadEnabled(_ context.Context, globalConfig *config.GlobalConfig, switch { case req.MsgData.ContentType == constant.HasReadReceipt && req.MsgData.SessionType == constant.SingleChatType: if !globalConfig.SingleMessageHasReadReceiptEnable { - return nil, errs.ErrMessageHasReadDisable.Wrap() + return nil, servererrs.ErrMessageHasReadDisable.Wrap() } return req.MsgData, nil case req.MsgData.ContentType == constant.HasReadReceipt && req.MsgData.SessionType == constant.SuperGroupChatType: if !globalConfig.GroupMessageHasReadReceiptEnable { - return nil, errs.ErrMessageHasReadDisable.Wrap() + return nil, servererrs.ErrMessageHasReadDisable.Wrap() } return req.MsgData, nil } diff --git a/internal/rpc/msg/revoke.go b/internal/rpc/msg/revoke.go index fe0811f49..608d977db 100644 --- a/internal/rpc/msg/revoke.go +++ b/internal/rpc/msg/revoke.go @@ -18,6 +18,8 @@ import ( "context" "encoding/json" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/utils/datautil" "time" "github.com/openimsdk/open-im-server/v3/pkg/authverify" @@ -27,7 +29,6 @@ import ( "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" ) func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg.RevokeMsgResp, error) { @@ -56,7 +57,7 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. return nil, errs.ErrRecordNotFound.WrapMsg("msg not found") } if msgs[0].ContentType == constant.MsgRevokeNotification { - return nil, errs.ErrMsgAlreadyRevoke.WrapMsg("msg already revoke") + return nil, servererrs.ErrMsgAlreadyRevoke.WrapMsg("msg already revoke") } data, _ := json.Marshal(msgs[0]) @@ -70,7 +71,7 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. } role = user.AppMangerLevel case constant.SuperGroupChatType: - members, err := m.GroupLocalCache.GetGroupMemberInfoMap(ctx, msgs[0].GroupID, utils.Distinct([]string{req.UserID, msgs[0].SendID})) + members, err := m.GroupLocalCache.GetGroupMemberInfoMap(ctx, msgs[0].GroupID, datautil.Distinct([]string{req.UserID, msgs[0].SendID})) if err != nil { return nil, err } @@ -105,10 +106,10 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. revokerUserID := mcontext.GetOpUserID(ctx) var flag bool if len(m.config.Manager.UserID) > 0 { - flag = utils.Contain(revokerUserID, m.config.Manager.UserID...) + flag = datautil.Contain(revokerUserID, m.config.Manager.UserID...) } if len(m.config.Manager.UserID) == 0 && len(m.config.IMAdmin.UserID) > 0 { - flag = utils.Contain(revokerUserID, m.config.IMAdmin.UserID...) + flag = datautil.Contain(revokerUserID, m.config.IMAdmin.UserID...) } tips := sdkws.RevokeMsgTips{ RevokerUserID: revokerUserID, diff --git a/internal/rpc/msg/send.go b/internal/rpc/msg/send.go index bc74096f2..5eca938dc 100644 --- a/internal/rpc/msg/send.go +++ b/internal/rpc/msg/send.go @@ -16,6 +16,10 @@ package msg import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/open-im-server/v3/pkg/util/conversationutil" + "github.com/openimsdk/tools/utils/datautil" + "github.com/openimsdk/tools/utils/stringutil" "github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" @@ -26,7 +30,6 @@ import ( "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -35,7 +38,7 @@ func (m *msgServer) SendMsg(ctx context.Context, req *pbmsg.SendMsgReq) (resp *p if req.MsgData != nil { flag := isMessageHasReadEnabled(req.MsgData, m.config) if !flag { - return nil, errs.ErrMessageHasReadDisable.Wrap() + return nil, servererrs.ErrMessageHasReadDisable.Wrap() } m.encapsulateMsgData(req.MsgData) switch req.MsgData.SessionType { @@ -64,7 +67,7 @@ func (m *msgServer) sendMsgSuperGroupChat(ctx context.Context, req *pbmsg.SendMs if err := callbackMsgModify(ctx, m.config, req); err != nil { return nil, err } - err = m.MsgDatabase.MsgToMQ(ctx, utils.GenConversationUniqueKeyForGroup(req.MsgData.GroupID), req.MsgData) + err = m.MsgDatabase.MsgToMQ(ctx, conversationutil.GenConversationUniqueKeyForGroup(req.MsgData.GroupID), req.MsgData) if err != nil { return nil, err } @@ -91,14 +94,14 @@ func (m *msgServer) setConversationAtInfo(nctx context.Context, msg *sdkws.MsgDa ConversationType: msg.SessionType, GroupID: msg.GroupID, } - tagAll := utils.Contain(constant.AtAllString, msg.AtUserIDList...) + tagAll := datautil.Contain(constant.AtAllString, msg.AtUserIDList...) if tagAll { memberUserIDList, err := m.GroupLocalCache.GetGroupMemberIDs(ctx, msg.GroupID) if err != nil { log.ZWarn(ctx, "GetGroupMemberIDs", err) return } - atUserID = utils.DifferenceString([]string{constant.AtAllString}, msg.AtUserIDList) + atUserID = stringutil.DifferenceString([]string{constant.AtAllString}, msg.AtUserIDList) if len(atUserID) == 0 { // just @everyone conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtAll} } else { // @Everyone and @other people @@ -107,7 +110,7 @@ func (m *msgServer) setConversationAtInfo(nctx context.Context, msg *sdkws.MsgDa if err != nil { log.ZWarn(ctx, "SetConversations", err, "userID", atUserID, "conversation", conversation) } - memberUserIDList = utils.DifferenceString(atUserID, memberUserIDList) + memberUserIDList = stringutil.DifferenceString(atUserID, memberUserIDList) } conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.AtAll} err = m.Conversation.SetConversations(ctx, memberUserIDList, conversation) @@ -123,7 +126,7 @@ func (m *msgServer) setConversationAtInfo(nctx context.Context, msg *sdkws.MsgDa } 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 { + if err := m.MsgDatabase.MsgToMQ(ctx, conversationutil.GenConversationUniqueKeyForSingle(req.MsgData.SendID, req.MsgData.RecvID), req.MsgData); err != nil { return nil, err } resp = &pbmsg.SendMsgResp{ @@ -145,7 +148,7 @@ func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *pbmsg.SendMsgReq isSend, err = m.modifyMessageByUserMessageReceiveOpt( ctx, req.MsgData.RecvID, - utils.GenConversationIDForSingle(req.MsgData.SendID, req.MsgData.RecvID), + conversationutil.GenConversationIDForSingle(req.MsgData.SendID, req.MsgData.RecvID), constant.SingleChatType, req, ) @@ -164,7 +167,7 @@ func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *pbmsg.SendMsgReq if err := callbackMsgModify(ctx, m.config, req); err != nil { return nil, err } - if err := m.MsgDatabase.MsgToMQ(ctx, utils.GenConversationUniqueKeyForSingle(req.MsgData.SendID, req.MsgData.RecvID), req.MsgData); err != nil { + if err := m.MsgDatabase.MsgToMQ(ctx, conversationutil.GenConversationUniqueKeyForSingle(req.MsgData.SendID, req.MsgData.RecvID), req.MsgData); err != nil { prommetrics.SingleChatMsgProcessFailedCounter.Inc() return nil, err } diff --git a/internal/rpc/msg/server.go b/internal/rpc/msg/server.go index 7710c72ea..8e913f9d2 100644 --- a/internal/rpc/msg/server.go +++ b/internal/rpc/msg/server.go @@ -26,7 +26,7 @@ import ( "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/conversation" "github.com/openimsdk/protocol/msg" - "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/discovery" "google.golang.org/grpc" ) @@ -36,16 +36,16 @@ type ( // MsgServer encapsulates dependencies required for message handling. msgServer struct { - RegisterCenter discoveryregistry.SvcDiscoveryRegistry // Service discovery registry for service registration. - MsgDatabase controller.CommonMsgDatabase // Interface for message database operations. - Conversation *rpcclient.ConversationRpcClient // RPC client for conversation service. - UserLocalCache *rpccache.UserLocalCache // Local cache for user data. - FriendLocalCache *rpccache.FriendLocalCache // Local cache for friend data. - GroupLocalCache *rpccache.GroupLocalCache // Local cache for group data. - ConversationLocalCache *rpccache.ConversationLocalCache // Local cache for conversation data. - Handlers MessageInterceptorChain // Chain of handlers for processing messages. - notificationSender *rpcclient.NotificationSender // RPC client for sending notifications. - config *config.GlobalConfig // Global configuration settings. + RegisterCenter discovery.SvcDiscoveryRegistry // Service discovery registry for service registration. + MsgDatabase controller.CommonMsgDatabase // Interface for message database operations. + Conversation *rpcclient.ConversationRpcClient // RPC client for conversation service. + UserLocalCache *rpccache.UserLocalCache // Local cache for user data. + FriendLocalCache *rpccache.FriendLocalCache // Local cache for friend data. + GroupLocalCache *rpccache.GroupLocalCache // Local cache for group data. + ConversationLocalCache *rpccache.ConversationLocalCache // Local cache for conversation data. + Handlers MessageInterceptorChain // Chain of handlers for processing messages. + notificationSender *rpcclient.NotificationSender // RPC client for sending notifications. + config *config.GlobalConfig // Global configuration settings. } ) @@ -64,7 +64,7 @@ func (m *msgServer) addInterceptorHandler(interceptorFunc ...MessageInterceptorF // return nil //} -func Start(ctx context.Context, config *config.GlobalConfig, client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { +func Start(ctx context.Context, config *config.GlobalConfig, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error { rdb, err := cache.NewRedis(ctx, &config.Redis) if err != nil { return err diff --git a/internal/rpc/msg/statistics.go b/internal/rpc/msg/statistics.go index b7f16ff9a..8d9456d23 100644 --- a/internal/rpc/msg/statistics.go +++ b/internal/rpc/msg/statistics.go @@ -19,7 +19,7 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/protocol/msg" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/utils" + "github.com/openimsdk/tools/utils/datautil" "time" ) @@ -38,7 +38,7 @@ func (m *msgServer) GetActiveUser(ctx context.Context, req *msg.GetActiveUserReq } var pbUsers []*msg.ActiveUser if len(users) > 0 { - userIDs := utils.Slice(users, func(e *relation.UserCount) string { return e.UserID }) + userIDs := datautil.Slice(users, func(e *relation.UserCount) string { return e.UserID }) userMap, err := m.UserLocalCache.GetUsersInfoMap(ctx, userIDs) if err != nil { return nil, err @@ -80,7 +80,7 @@ func (m *msgServer) GetActiveGroup(ctx context.Context, req *msg.GetActiveGroupR } var pbgroups []*msg.ActiveGroup if len(groups) > 0 { - groupIDs := utils.Slice(groups, func(e *relation.GroupCount) string { return e.GroupID }) + groupIDs := datautil.Slice(groups, func(e *relation.GroupCount) string { return e.GroupID }) resp, err := m.GroupLocalCache.GetGroupInfos(ctx, groupIDs) if err != nil { return nil, err diff --git a/internal/rpc/msg/sync_msg.go b/internal/rpc/msg/sync_msg.go index 0fadce781..bdb2c0911 100644 --- a/internal/rpc/msg/sync_msg.go +++ b/internal/rpc/msg/sync_msg.go @@ -16,6 +16,9 @@ package msg import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/util/conversationutil" + "github.com/openimsdk/tools/utils/datautil" + "github.com/openimsdk/tools/utils/timeutil" "github.com/openimsdk/open-im-server/v3/pkg/authverify" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" @@ -23,7 +26,6 @@ import ( "github.com/openimsdk/protocol/msg" "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/log" - "github.com/openimsdk/tools/utils" ) func (m *msgServer) PullMessageBySeqs(ctx context.Context, req *sdkws.PullMessageBySeqsReq) (*sdkws.PullMessageBySeqsResp, error) { @@ -93,9 +95,9 @@ func (m *msgServer) GetMaxSeq(ctx context.Context, req *sdkws.GetMaxSeqReq) (*sd return nil, err } for _, conversationID := range conversationIDs { - conversationIDs = append(conversationIDs, utils.GetNotificationConversationIDByConversationID(conversationID)) + conversationIDs = append(conversationIDs, conversationutil.GetNotificationConversationIDByConversationID(conversationID)) } - conversationIDs = append(conversationIDs, utils.GetSelfNotificationConversationID(req.UserID)) + conversationIDs = append(conversationIDs, conversationutil.GetSelfNotificationConversationID(req.UserID)) log.ZDebug(ctx, "GetMaxSeq", "conversationIDs", conversationIDs) maxSeqs, err := m.MsgDatabase.GetMaxSeqs(ctx, conversationIDs) if err != nil { @@ -172,7 +174,7 @@ func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq // Construct response with updated information for _, chatLog := range chatLogs { pbchatLog := &msg.ChatLog{} - utils.CopyStructFields(pbchatLog, chatLog) + datautil.CopyStructFields(pbchatLog, chatLog) pbchatLog.SendTime = chatLog.SendTime pbchatLog.CreateTime = chatLog.CreateTime if chatLog.SenderNickname == "" { @@ -197,5 +199,5 @@ func (m *msgServer) SearchMessage(ctx context.Context, req *msg.SearchMessageReq } func (m *msgServer) GetServerTime(ctx context.Context, _ *msg.GetServerTimeReq) (*msg.GetServerTimeResp, error) { - return &msg.GetServerTimeResp{ServerTime: utils.GetCurrentTimestampByMill()}, nil + return &msg.GetServerTimeResp{ServerTime: timeutil.GetCurrentTimestampByMill()}, nil } diff --git a/internal/rpc/msg/utils.go b/internal/rpc/msg/utils.go index 72f3bbde0..eaa8c40ba 100644 --- a/internal/rpc/msg/utils.go +++ b/internal/rpc/msg/utils.go @@ -18,7 +18,7 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/sdkws" - "github.com/openimsdk/tools/utils" + "github.com/openimsdk/tools/errs" "github.com/redis/go-redis/v9" "go.mongodb.org/mongo-driver/mongo" ) @@ -42,7 +42,7 @@ func isMessageHasReadEnabled(msgData *sdkws.MsgData, config *config.GlobalConfig } func IsNotFound(err error) bool { - switch utils.Unwrap(err) { + switch errs.Unwrap(err) { case redis.Nil, mongo.ErrNoDocuments: return true default: diff --git a/internal/rpc/msg/verify.go b/internal/rpc/msg/verify.go index 70ce077cc..6680faaa6 100644 --- a/internal/rpc/msg/verify.go +++ b/internal/rpc/msg/verify.go @@ -16,17 +16,19 @@ package msg import ( "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/utils/datautil" + "github.com/openimsdk/tools/utils/encrypt" + "github.com/openimsdk/tools/utils/timeutil" "math/rand" "strconv" "time" - "github.com/openimsdk/open-im-server/v3/pkg/util/genutil" "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/msg" "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" - "github.com/openimsdk/tools/utils" ) var ExcludeContentType = []int{constant.HasReadReceipt} @@ -51,10 +53,10 @@ type MessageRevoked struct { func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgReq) error { switch data.MsgData.SessionType { case constant.SingleChatType: - if len(m.config.Manager.UserID) > 0 && utils.IsContain(data.MsgData.SendID, m.config.Manager.UserID) { + if len(m.config.Manager.UserID) > 0 && datautil.Contain(data.MsgData.SendID, m.config.Manager.UserID...) { return nil } - if utils.IsContain(data.MsgData.SendID, m.config.IMAdmin.UserID) { + if datautil.Contain(data.MsgData.SendID, m.config.IMAdmin.UserID...) { return nil } if data.MsgData.ContentType <= constant.NotificationEnd && @@ -66,7 +68,7 @@ func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgRe return err } if black { - return errs.ErrBlockedByPeer.Wrap() + return servererrs.ErrBlockedByPeer.Wrap() } if m.config.MessageVerify.FriendVerify != nil && *m.config.MessageVerify.FriendVerify { friend, err := m.FriendLocalCache.IsFriend(ctx, data.MsgData.SendID, data.MsgData.RecvID) @@ -74,7 +76,7 @@ func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgRe return err } if !friend { - return errs.ErrNotPeersFriend.Wrap() + return servererrs.ErrNotPeersFriend.Wrap() } return nil } @@ -86,15 +88,15 @@ func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgRe } if groupInfo.Status == constant.GroupStatusDismissed && data.MsgData.ContentType != constant.GroupDismissedNotification { - return errs.ErrDismissedAlready.Wrap() + return servererrs.ErrDismissedAlready.Wrap() } if groupInfo.GroupType == constant.SuperGroup { return nil } - if len(m.config.Manager.UserID) > 0 && utils.IsContain(data.MsgData.SendID, m.config.Manager.UserID) { + if len(m.config.Manager.UserID) > 0 && datautil.Contain(data.MsgData.SendID, m.config.Manager.UserID...) { return nil } - if utils.IsContain(data.MsgData.SendID, m.config.IMAdmin.UserID) { + if datautil.Contain(data.MsgData.SendID, m.config.IMAdmin.UserID...) { return nil } if data.MsgData.ContentType <= constant.NotificationEnd && @@ -106,13 +108,13 @@ func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgRe return err } if _, ok := memberIDs[data.MsgData.SendID]; !ok { - return errs.ErrNotInGroupYet.Wrap() + return servererrs.ErrNotInGroupYet.Wrap() } groupMemberInfo, err := m.GroupLocalCache.GetGroupMember(ctx, data.MsgData.GroupID, data.MsgData.SendID) if err != nil { if errs.ErrRecordNotFound.Is(err) { - return errs.ErrNotInGroupYet.WrapMsg(err.Error()) + return servererrs.ErrNotInGroupYet.WrapMsg(err.Error()) } return err } @@ -120,10 +122,10 @@ func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgRe return nil } else { if groupMemberInfo.MuteEndTime >= time.Now().UnixMilli() { - return errs.ErrMutedInGroup.Wrap() + return servererrs.ErrMutedInGroup.Wrap() } if groupInfo.Status == constant.GroupStatusMuted && groupMemberInfo.RoleLevel != constant.GroupAdmin { - return errs.ErrMutedGroup.Wrap() + return servererrs.ErrMutedGroup.Wrap() } } return nil @@ -135,7 +137,7 @@ func (m *msgServer) messageVerification(ctx context.Context, data *msg.SendMsgRe func (m *msgServer) encapsulateMsgData(msg *sdkws.MsgData) { msg.ServerMsgID = GetMsgID(msg.SendID) if msg.SendTime == 0 { - msg.SendTime = utils.GetCurrentTimestampByMill() + msg.SendTime = timeutil.GetCurrentTimestampByMill() } switch msg.ContentType { case constant.Text: @@ -160,27 +162,27 @@ func (m *msgServer) encapsulateMsgData(msg *sdkws.MsgData) { fallthrough case constant.Quote: case constant.Revoke: - utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) case constant.HasReadReceipt: - utils.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) case constant.Typing: - utils.SetSwitchFromOptions(msg.Options, constant.IsHistory, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsPersistent, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsSenderSync, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) - utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsHistory, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsPersistent, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsSenderSync, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, false) + datautil.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, false) } } func GetMsgID(sendID string) string { - t := genutil.GetCurrentTimeFormatted() - return utils.Md5(t + "-" + sendID + "-" + strconv.Itoa(rand.Int())) + t := timeutil.GetCurrentTimeFormatted() + return encrypt.Md5(t + "-" + sendID + "-" + strconv.Itoa(rand.Int())) } func (m *msgServer) modifyMessageByUserMessageReceiveOpt(ctx context.Context, userID, conversationID string, sessionType int, pb *msg.SendMsgReq) (bool, error) { @@ -197,7 +199,7 @@ func (m *msgServer) modifyMessageByUserMessageReceiveOpt(ctx context.Context, us if pb.MsgData.Options == nil { pb.MsgData.Options = make(map[string]bool, 10) } - utils.SetSwitchFromOptions(pb.MsgData.Options, constant.IsOfflinePush, false) + datautil.SetSwitchFromOptions(pb.MsgData.Options, constant.IsOfflinePush, false) return true, nil } // conversationID := utils.GetConversationIDBySessionType(conversationID, sessionType) @@ -211,7 +213,7 @@ func (m *msgServer) modifyMessageByUserMessageReceiveOpt(ctx context.Context, us case constant.ReceiveMessage: return true, nil case constant.NotReceiveMessage: - if utils.IsContainInt(int(pb.MsgData.ContentType), ExcludeContentType) { + if datautil.Contain(int(pb.MsgData.ContentType), ExcludeContentType...) { return true, nil } return false, nil @@ -219,7 +221,7 @@ func (m *msgServer) modifyMessageByUserMessageReceiveOpt(ctx context.Context, us if pb.MsgData.Options == nil { pb.MsgData.Options = make(map[string]bool, 10) } - utils.SetSwitchFromOptions(pb.MsgData.Options, constant.IsOfflinePush, false) + datautil.SetSwitchFromOptions(pb.MsgData.Options, constant.IsOfflinePush, false) return true, nil } return true, nil diff --git a/pkg/common/http/http_client.go b/pkg/common/http/http_client.go index c447433af..203f7e158 100644 --- a/pkg/common/http/http_client.go +++ b/pkg/common/http/http_client.go @@ -17,20 +17,17 @@ package http import ( "context" "encoding/json" - "net/http" - "time" - "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - "github.com/openimsdk/tools/errs" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" "github.com/openimsdk/tools/log" + "github.com/openimsdk/tools/utils/httputil" + "net/http" ) var ( // Define http client. - client = &http.Client{ - Timeout: 15 * time.Second, // max timeout is 15s - } + client = httputil.NewHTTPClient(httputil.NewClientConfig()) ) func init() { @@ -41,14 +38,14 @@ func init() { func callBackPostReturn(ctx context.Context, url, command string, input interface{}, output callbackstruct.CallbackResp, callbackConfig config.CallBackConfig) error { url = url + "/" + command log.ZInfo(ctx, "callback", "url", url, "input", input, "config", callbackConfig) - b, err := Post(ctx, url, nil, input, callbackConfig.CallbackTimeOut) + b, err := client.Post(ctx, url, nil, input, callbackConfig.CallbackTimeOut) if err != nil { if callbackConfig.CallbackFailedContinue != nil && *callbackConfig.CallbackFailedContinue { log.ZInfo(ctx, "callback failed but continue", err, "url", url) return nil } log.ZWarn(ctx, "callback network failed", err, "url", url, "input", input) - return errs.ErrNetwork.WrapMsg(err.Error()) + return servererrs.ErrNetwork.WrapMsg(err.Error()) } if err = json.Unmarshal(b, output); err != nil { if callbackConfig.CallbackFailedContinue != nil && *callbackConfig.CallbackFailedContinue { @@ -56,7 +53,7 @@ func callBackPostReturn(ctx context.Context, url, command string, input interfac return nil } log.ZWarn(ctx, "callback json unmarshal failed", err, "url", url, "input", input, "response", string(b)) - return errs.ErrData.WithDetail(err.Error() + "response format error") + return servererrs.ErrData.WithDetail(err.Error() + "response format error") } if err := output.Parse(); err != nil { log.ZWarn(ctx, "callback parse failed", err, "url", url, "input", input, "response", string(b)) diff --git a/pkg/common/http/http_client_test.go b/pkg/common/http/http_client_test.go index 5d2588673..b099929a0 100644 --- a/pkg/common/http/http_client_test.go +++ b/pkg/common/http/http_client_test.go @@ -16,93 +16,92 @@ package http import ( "context" - "reflect" "testing" "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" ) -func TestGet(t *testing.T) { - type args struct { - url string - } - tests := []struct { - name string - args args - wantResponse []byte - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - gotResponse, err := Get(tt.args.url) - if (err != nil) != tt.wantErr { - t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(gotResponse, tt.wantResponse) { - t.Errorf("Get() = %v, want %v", gotResponse, tt.wantResponse) - } - }) - } -} +//func TestGet(t *testing.T) { +// type args struct { +// url string +// } +// tests := []struct { +// name string +// args args +// wantResponse []byte +// wantErr bool +// }{ +// // TODO: Add test cases. +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// gotResponse, err := Get(tt.args.url) +// if (err != nil) != tt.wantErr { +// t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if !reflect.DeepEqual(gotResponse, tt.wantResponse) { +// t.Errorf("Get() = %v, want %v", gotResponse, tt.wantResponse) +// } +// }) +// } +//} -func TestPost(t *testing.T) { - type args struct { - ctx context.Context - url string - header map[string]string - data any - timeout int - } - tests := []struct { - name string - args args - wantContent []byte - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - gotContent, err := Post(tt.args.ctx, tt.args.url, tt.args.header, tt.args.data, tt.args.timeout) - if (err != nil) != tt.wantErr { - t.Errorf("Post() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(gotContent, tt.wantContent) { - t.Errorf("Post() = %v, want %v", gotContent, tt.wantContent) - } - }) - } -} +//func TestPost(t *testing.T) { +// type args struct { +// ctx context.Context +// url string +// header map[string]string +// data any +// timeout int +// } +// tests := []struct { +// name string +// args args +// wantContent []byte +// wantErr bool +// }{ +// // TODO: Add test cases. +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// gotContent, err := Post(tt.args.ctx, tt.args.url, tt.args.header, tt.args.data, tt.args.timeout) +// if (err != nil) != tt.wantErr { +// t.Errorf("Post() error = %v, wantErr %v", err, tt.wantErr) +// return +// } +// if !reflect.DeepEqual(gotContent, tt.wantContent) { +// t.Errorf("Post() = %v, want %v", gotContent, tt.wantContent) +// } +// }) +// } +//} -func TestPostReturn(t *testing.T) { - type args struct { - ctx context.Context - url string - header map[string]string - input any - output any - timeOutSecond int - } - tests := []struct { - name string - args args - wantErr bool - }{ - // TODO: Add test cases. - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if err := PostReturn(tt.args.ctx, tt.args.url, tt.args.header, tt.args.input, tt.args.output, tt.args.timeOutSecond); (err != nil) != tt.wantErr { - t.Errorf("PostReturn() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} +//func TestPostReturn(t *testing.T) { +// type args struct { +// ctx context.Context +// url string +// header map[string]string +// input any +// output any +// timeOutSecond int +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// // TODO: Add test cases. +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// if err := PostReturn(tt.args.ctx, tt.args.url, tt.args.header, tt.args.input, tt.args.output, tt.args.timeOutSecond); (err != nil) != tt.wantErr { +// t.Errorf("PostReturn() error = %v, wantErr %v", err, tt.wantErr) +// } +// }) +// } +//} func Test_callBackPostReturn(t *testing.T) { type args struct { From be06145e47409215e7c9d419ae3ec44caf9fed7e Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:31:02 +0800 Subject: [PATCH 11/14] fix: pkg update. --- internal/push/offlinepush/jpush/push.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/push/offlinepush/jpush/push.go b/internal/push/offlinepush/jpush/push.go index b9b0d923c..6d94d93b8 100644 --- a/internal/push/offlinepush/jpush/push.go +++ b/internal/push/offlinepush/jpush/push.go @@ -18,20 +18,24 @@ import ( "context" "encoding/base64" "fmt" + "github.com/openimsdk/tools/utils/httputil" "github.com/openimsdk/open-im-server/v3/internal/push/offlinepush" "github.com/openimsdk/open-im-server/v3/internal/push/offlinepush/jpush/body" "github.com/openimsdk/open-im-server/v3/pkg/common/config" - http2 "github.com/openimsdk/open-im-server/v3/pkg/common/http" ) type JPush struct { pushConf *config.Push iOSPushConf *config.IOSPush + httpClient *httputil.HTTPClient } func NewClient(pushConf *config.Push, iOSPushConf *config.IOSPush) *JPush { - return &JPush{pushConf: pushConf, iOSPushConf: iOSPushConf} + return &JPush{pushConf: pushConf, + iOSPushConf: iOSPushConf, + httpClient: httputil.NewHTTPClient(httputil.NewClientConfig()), + } } func (j *JPush) Auth(apiKey, secretKey string, timeStamp int64) (token string, err error) { @@ -79,7 +83,7 @@ func (j *JPush) Push(ctx context.Context, userIDs []string, title, content strin } func (j *JPush) request(ctx context.Context, po body.PushObj, resp any, timeout int) error { - return http2.PostReturn( + return j.httpClient.PostReturn( ctx, j.pushConf.Jpns.PushUrl, map[string]string{ From 8692cbb1a09220bb695ac8b3f56ec16f159dfe10 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:34:09 +0800 Subject: [PATCH 12/14] fix: pkg update. --- internal/rpc/user/user.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index d1939f35e..177b2b5c9 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -17,6 +17,9 @@ package user import ( "context" "errors" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/db/mongoutil" + "github.com/openimsdk/tools/utils/datautil" "math/rand" "strings" "time" @@ -35,12 +38,10 @@ import ( "github.com/openimsdk/protocol/constant" "github.com/openimsdk/protocol/sdkws" pbuser "github.com/openimsdk/protocol/user" - registry "github.com/openimsdk/tools/discoveryregistry" + "github.com/openimsdk/tools/db/pagination" + registry "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" - "github.com/openimsdk/tools/pagination" - "github.com/openimsdk/tools/tx" - "github.com/openimsdk/tools/utils" "google.golang.org/grpc" ) @@ -81,7 +82,7 @@ func Start(ctx context.Context, config *config.GlobalConfig, client registry.Svc } cache := cache.NewUserCacheRedis(rdb, userDB, cache.GetDefaultOpt()) userMongoDB := mgo.NewUserMongoDriver(mongo.GetDatabase(config.Mongo.Database)) - database := controller.NewUserDatabase(userDB, cache, tx.NewMongo(mongo.GetClient()), userMongoDB) + database := controller.NewUserDatabase(userDB, cache, mongoutil.NewMongo(mongo.GetClient()), userMongoDB) friendRpcClient := rpcclient.NewFriendRpcClient(client, config.RpcRegisterName.OpenImFriendName) groupRpcClient := rpcclient.NewGroupRpcClient(client, config.RpcRegisterName.OpenImGroupName) msgRpcClient := rpcclient.NewMessageRpcClient(client, config.RpcRegisterName.OpenImMsgName) @@ -193,7 +194,7 @@ func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbuser.Se func (s *userServer) AccountCheck(ctx context.Context, req *pbuser.AccountCheckReq) (resp *pbuser.AccountCheckResp, err error) { resp = &pbuser.AccountCheckResp{} - if utils.Duplicate(req.CheckUserIDs) { + if datautil.Duplicate(req.CheckUserIDs) { return nil, errs.ErrArgs.WrapMsg("userID repeated") } err = authverify.CheckAdmin(ctx, &s.config.Manager, &s.config.IMAdmin) @@ -247,7 +248,7 @@ func (s *userServer) UserRegister(ctx context.Context, req *pbuser.UserRegisterR log.ZDebug(ctx, "UserRegister", s.config.Secret, req.Secret) return nil, errs.ErrNoPermission.WrapMsg("secret invalid") } - if utils.DuplicateAny(req.Users, func(e *sdkws.UserInfo) string { return e.UserID }) { + if datautil.DuplicateAny(req.Users, func(e *sdkws.UserInfo) string { return e.UserID }) { return nil, errs.ErrArgs.WrapMsg("userID repeated") } userIDs := make([]string, 0) @@ -265,7 +266,7 @@ func (s *userServer) UserRegister(ctx context.Context, req *pbuser.UserRegisterR return nil, err } if exist { - return nil, errs.ErrRegisteredAlready.WrapMsg("userID registered already") + return nil, servererrs.ErrRegisteredAlready.WrapMsg("userID registered already") } if err := CallbackBeforeUserRegister(ctx, s.config, req); err != nil { return nil, err @@ -642,7 +643,7 @@ func (s *userServer) GetNotificationAccount(ctx context.Context, req *pbuser.Get } user, err := s.UserDatabase.GetUserByID(ctx, req.UserID) if err != nil { - return nil, errs.ErrUserIDNotFound.Wrap() + return nil, servererrs.ErrUserIDNotFound.Wrap() } if user.AppMangerLevel == constant.AppAdmin || user.AppMangerLevel == constant.AppNotificationAdmin { return &pbuser.GetNotificationAccountResp{}, nil @@ -670,7 +671,7 @@ func (s *userServer) userModelToResp(users []*relation.UserModel, pagination pag accounts := make([]*pbuser.NotificationAccountInfo, 0) var total int64 for _, v := range users { - if v.AppMangerLevel == constant.AppNotificationAdmin && !utils.IsContain(v.UserID, s.config.IMAdmin.UserID) { + if v.AppMangerLevel == constant.AppNotificationAdmin && !datautil.Contain(v.UserID, s.config.IMAdmin.UserID...) { temp := &pbuser.NotificationAccountInfo{ UserID: v.UserID, FaceURL: v.FaceURL, @@ -681,7 +682,7 @@ func (s *userServer) userModelToResp(users []*relation.UserModel, pagination pag } } - notificationAccounts := utils.Paginate(accounts, int(pagination.GetPageNumber()), int(pagination.GetShowNumber())) + notificationAccounts := datautil.Paginate(accounts, int(pagination.GetPageNumber()), int(pagination.GetShowNumber())) return &pbuser.SearchNotificationAccountResp{Total: total, NotificationAccounts: notificationAccounts} } From 0d2b5982d11d3829e8975b80b3b0da18b26edac6 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:35:16 +0800 Subject: [PATCH 13/14] fix: pkg update. --- internal/rpc/user/callback.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/rpc/user/callback.go b/internal/rpc/user/callback.go index 3fb4c426a..128ca7cb3 100644 --- a/internal/rpc/user/callback.go +++ b/internal/rpc/user/callback.go @@ -16,12 +16,12 @@ package user import ( "context" + "github.com/openimsdk/tools/utils/datautil" cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/http" pbuser "github.com/openimsdk/protocol/user" - "github.com/openimsdk/tools/utils" ) func CallbackBeforeUpdateUserInfo(ctx context.Context, globalConfig *config.GlobalConfig, req *pbuser.UpdateUserInfoReq) error { @@ -38,9 +38,9 @@ func CallbackBeforeUpdateUserInfo(ctx context.Context, globalConfig *config.Glob if err := http.CallBackPostReturn(ctx, globalConfig.Callback.CallbackUrl, cbReq, resp, globalConfig.Callback.CallbackBeforeUpdateUserInfo); err != nil { return err } - utils.NotNilReplace(&req.UserInfo.FaceURL, resp.FaceURL) - utils.NotNilReplace(&req.UserInfo.Ex, resp.Ex) - utils.NotNilReplace(&req.UserInfo.Nickname, resp.Nickname) + datautil.NotNilReplace(&req.UserInfo.FaceURL, resp.FaceURL) + datautil.NotNilReplace(&req.UserInfo.Ex, resp.Ex) + datautil.NotNilReplace(&req.UserInfo.Nickname, resp.Nickname) return nil } func CallbackAfterUpdateUserInfo(ctx context.Context, globalConfig *config.GlobalConfig, req *pbuser.UpdateUserInfoReq) error { @@ -73,9 +73,9 @@ func CallbackBeforeUpdateUserInfoEx(ctx context.Context, globalConfig *config.Gl if err := http.CallBackPostReturn(ctx, globalConfig.Callback.CallbackUrl, cbReq, resp, globalConfig.Callback.CallbackBeforeUpdateUserInfoEx); err != nil { return err } - utils.NotNilReplace(req.UserInfo.FaceURL, resp.FaceURL) - utils.NotNilReplace(req.UserInfo.Ex, resp.Ex) - utils.NotNilReplace(req.UserInfo.Nickname, resp.Nickname) + datautil.NotNilReplace(req.UserInfo.FaceURL, resp.FaceURL) + datautil.NotNilReplace(req.UserInfo.Ex, resp.Ex) + datautil.NotNilReplace(req.UserInfo.Nickname, resp.Nickname) return nil } func CallbackAfterUpdateUserInfoEx(ctx context.Context, globalConfig *config.GlobalConfig, req *pbuser.UpdateUserInfoExReq) error { From 10d828f5d78e22692511917a56cdba70ebfc8c77 Mon Sep 17 00:00:00 2001 From: Gordon <46924906+FGadvancer@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:36:28 +0800 Subject: [PATCH 14/14] fix: pkg update. --- internal/rpc/third/s3.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/rpc/third/s3.go b/internal/rpc/third/s3.go index f7646e480..9c97f0af6 100644 --- a/internal/rpc/third/s3.go +++ b/internal/rpc/third/s3.go @@ -19,6 +19,8 @@ import ( "encoding/base64" "encoding/hex" "encoding/json" + "github.com/openimsdk/open-im-server/v3/pkg/common/servererrs" + "github.com/openimsdk/tools/utils/datautil" "path" "strconv" "time" @@ -31,7 +33,6 @@ import ( "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" - "github.com/openimsdk/tools/utils" ) func (t *thirdServer) PartLimit(ctx context.Context, req *third.PartLimitReq) (*third.PartLimitResp, error) { @@ -108,7 +109,7 @@ func (t *thirdServer) InitiateMultipartUpload(ctx context.Context, req *third.In func (t *thirdServer) AuthSign(ctx context.Context, req *third.AuthSignReq) (*third.AuthSignResp, error) { defer log.ZDebug(ctx, "return") - partNumbers := utils.Slice(req.PartNumbers, func(partNumber int32) int { return int(partNumber) }) + partNumbers := datautil.Slice(req.PartNumbers, func(partNumber int32) int { return int(partNumber) }) result, err := t.s3dataBase.AuthSign(ctx, req.UploadID, partNumbers) if err != nil { return nil, err @@ -237,7 +238,7 @@ func (t *thirdServer) InitiateFormData(ctx context.Context, req *third.InitiateF Header: toPbMapArray(resp.Header), FormData: resp.FormData, Expires: resp.Expires.UnixMilli(), - SuccessCodes: utils.Slice(resp.SuccessCodes, func(code int) int32 { + SuccessCodes: datautil.Slice(resp.SuccessCodes, func(code int) int32 { return int32(code) }), }, nil @@ -263,7 +264,7 @@ func (t *thirdServer) CompleteFormData(ctx context.Context, req *third.CompleteF return nil, err } if info.Size > 0 && info.Size != mate.Size { - return nil, errs.ErrData.WrapMsg("file size mismatch") + return nil, servererrs.ErrData.WrapMsg("file size mismatch") } obj := &relation.ObjectModel{ Name: mate.Name,