diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index 12e3e96fd..f91d29748 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -17,7 +17,7 @@ package conversation import ( "context" "errors" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx" "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" @@ -57,7 +57,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e if err != nil { return err } - conversationDB, err := newmgo.NewConversationMongo(mongo.GetDatabase()) + conversationDB, err := mgo.NewConversationMongo(mongo.GetDatabase()) if err != nil { return err } diff --git a/internal/rpc/friend/friend.go b/internal/rpc/friend/friend.go index 063015abc..4c606a093 100644 --- a/internal/rpc/friend/friend.go +++ b/internal/rpc/friend/friend.go @@ -37,7 +37,7 @@ import ( "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/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" tablerelation "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/rpcclient/notification" @@ -65,17 +65,17 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error { return err } - friendMongoDB, err := newmgo.NewFriendMongo(mongo.GetDatabase()) + friendMongoDB, err := mgo.NewFriendMongo(mongo.GetDatabase()) if err != nil { return err } - friendRequestMongoDB, err := newmgo.NewFriendRequestMongo(mongo.GetDatabase()) + friendRequestMongoDB, err := mgo.NewFriendRequestMongo(mongo.GetDatabase()) if err != nil { return err } - blackMongoDB, err := newmgo.NewBlackMongo(mongo.GetDatabase()) + blackMongoDB, err := mgo.NewBlackMongo(mongo.GetDatabase()) if err != nil { return err } diff --git a/internal/rpc/group/group_test.go b/internal/rpc/friend/friend_test.go similarity index 62% rename from internal/rpc/group/group_test.go rename to internal/rpc/friend/friend_test.go index 0a9111e53..d1e1e420d 100644 --- a/internal/rpc/group/group_test.go +++ b/internal/rpc/friend/friend_test.go @@ -1,22 +1,19 @@ -package group +package friend import ( "context" "github.com/OpenIMSDK/protocol/constant" - "github.com/OpenIMSDK/protocol/group" - "github.com/OpenIMSDK/protocol/wrapperspb" "github.com/OpenIMSDK/tools/log" "github.com/openimsdk/open-im-server/v3/pkg/common/config" "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/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx" "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" - "github.com/openimsdk/open-im-server/v3/pkg/rpcclient/grouphash" "github.com/redis/go-redis/v9" "net" "testing" - "time" ) var ( @@ -24,9 +21,11 @@ var ( mgo *unrelation.Mongo ctx context.Context - groupDB *newmgo.GroupMgo - memberDB *newmgo.GroupMemberMgo - gs *groupServer + friendDB *mgo.FriendMgo + friendRequestDB *mgo.FriendRequestMgo + blackDB *mgo.BlackMgo + + friendDatabase controller.FriendDatabase ) func InitDB() error { @@ -72,23 +71,30 @@ func InitDB() error { panic(err) } - g, err := newmgo.NewGroupMongo(mgo.GetDatabase()) + a, err := mgo.NewFriendMongo(mgo.GetDatabase()) if err != nil { return err } - gm, err := newmgo.NewGroupMember(mgo.GetDatabase()) + b, err := mgo.NewFriendRequestMongo(mgo.GetDatabase()) if err != nil { return err } - gr, err := newmgo.NewGroupRequestMgo(mgo.GetDatabase()) + c, err := mgo.NewBlackMongo(mgo.GetDatabase()) if err != nil { return err } - groupDB = g.(*newmgo.GroupMgo) - memberDB = gm.(*newmgo.GroupMemberMgo) - gs = &groupServer{} - gs.db = controller.NewGroupDatabase(rdb, groupDB, memberDB, gr, tx, grouphash.NewGroupHashFromGroupServer(gs)) + friendDB = a.(*mgo.FriendMgo) + friendRequestDB = b.(*mgo.FriendRequestMgo) + blackDB = c.(*mgo.BlackMgo) + + friendDatabase = controller.NewFriendDatabase( + friendDB, + friendRequestDB, + cache.NewFriendCacheRedis(rdb, friendDB, cache.GetDefaultOpt()), + tx, + ) + return nil } @@ -99,31 +105,10 @@ func init() { } func TestName(t *testing.T) { - ctx = context.WithValue(context.Background(), constant.OpUserID, "4454892084") - resp, err := gs.SetGroupMemberInfo(ctx, &group.SetGroupMemberInfoReq{ - Members: []*group.SetGroupMemberInfo{ - { - GroupID: "1731877545", - UserID: "3332974673", - Nickname: wrapperspb.String("nickname"), - RoleLevel: wrapperspb.Int32(constant.GroupAdmin), - }, - }, - }) - if err != nil { - t.Fatal(err) - } - t.Log(resp) + err := friendDatabase.AgreeFriendRequest(ctx, &relation.FriendRequestModel{FromUserID: "8449222880", ToUserID: "3136372091", HandleResult: 1, HandleMsg: "ok"}) + t.Log(err) } func Test_GroupCreateCount(t *testing.T) { - ctx = context.WithValue(context.Background(), constant.OpUserID, "4454892084") - resp, err := gs.GroupCreateCount(ctx, &group.GroupCreateCountReq{ - Start: 0, - End: time.Now().Add(time.Hour).UnixMilli(), - }) - if err != nil { - t.Fatal(err) - } - t.Log(resp) + } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index b2a3ca4be..a429fcba6 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -19,7 +19,7 @@ import ( "fmt" pbconversation "github.com/OpenIMSDK/protocol/conversation" "github.com/OpenIMSDK/protocol/wrapperspb" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient/grouphash" "math/big" @@ -64,15 +64,15 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e if err != nil { return err } - groupDB, err := newmgo.NewGroupMongo(mongo.GetDatabase()) + groupDB, err := mgo.NewGroupMongo(mongo.GetDatabase()) if err != nil { return err } - groupMemberDB, err := newmgo.NewGroupMember(mongo.GetDatabase()) + groupMemberDB, err := mgo.NewGroupMember(mongo.GetDatabase()) if err != nil { return err } - groupRequestDB, err := newmgo.NewGroupRequestMgo(mongo.GetDatabase()) + groupRequestDB, err := mgo.NewGroupRequestMgo(mongo.GetDatabase()) if err != nil { return err } diff --git a/internal/rpc/third/log.go b/internal/rpc/third/log.go index 30d95e26b..57d4f536e 100644 --- a/internal/rpc/third/log.go +++ b/internal/rpc/third/log.go @@ -32,11 +32,11 @@ func genLogID() string { } func (t *thirdServer) UploadLogs(ctx context.Context, req *third.UploadLogsReq) (*third.UploadLogsResp, error) { - var DBlogs []*relationtb.Log + var DBlogs []*relationtb.LogModel userID := ctx.Value(constant.OpUserID).(string) platform := constant.PlatformID2Name[int(req.Platform)] for _, fileURL := range req.FileURLs { - log := relationtb.Log{ + log := relationtb.LogModel{ Version: req.Version, SystemType: req.SystemType, Platform: platform, @@ -57,7 +57,7 @@ func (t *thirdServer) UploadLogs(ctx context.Context, req *third.UploadLogsReq) } } if log.LogID == "" { - return nil, errs.ErrData.Wrap("Log id gen error") + return nil, errs.ErrData.Wrap("LogModel id gen error") } DBlogs = append(DBlogs, &log) } @@ -92,8 +92,8 @@ func (t *thirdServer) DeleteLogs(ctx context.Context, req *third.DeleteLogsReq) return &third.DeleteLogsResp{}, nil } -func dbToPbLogInfos(logs []*relationtb.Log) []*third.LogInfo { - db2pbForLogInfo := func(log *relationtb.Log) *third.LogInfo { +func dbToPbLogInfos(logs []*relationtb.LogModel) []*third.LogInfo { + db2pbForLogInfo := func(log *relationtb.LogModel) *third.LogInfo { return &third.LogInfo{ Filename: log.FileName, UserID: log.UserID, diff --git a/internal/rpc/third/third.go b/internal/rpc/third/third.go index 8ff1ae9a7..396a30c8f 100644 --- a/internal/rpc/third/third.go +++ b/internal/rpc/third/third.go @@ -17,7 +17,7 @@ package third import ( "context" "fmt" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" "net/url" "time" @@ -43,11 +43,11 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e if err != nil { return err } - logdb, err := newmgo.NewLogMongo(mongo.GetDatabase()) + logdb, err := mgo.NewLogMongo(mongo.GetDatabase()) if err != nil { return err } - s3db, err := newmgo.NewS3Mongo(mongo.GetDatabase()) + s3db, err := mgo.NewS3Mongo(mongo.GetDatabase()) if err != nil { return err } diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index cd77c4219..8f12b6448 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -17,7 +17,7 @@ package user import ( "context" "errors" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx" "strings" "time" @@ -70,7 +70,7 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error { for k, v := range config.Config.Manager.UserID { users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k], AppMangerLevel: constant.AppAdmin}) } - userDB, err := newmgo.NewUserMongo(mongo.GetDatabase()) + userDB, err := mgo.NewUserMongo(mongo.GetDatabase()) if err != nil { return err } diff --git a/internal/rpc/user/user_test.go b/internal/rpc/user/user_test.go index abe1c5023..1724f4b53 100644 --- a/internal/rpc/user/user_test.go +++ b/internal/rpc/user/user_test.go @@ -10,7 +10,7 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/common/config" "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/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" tablerelation "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx" "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" @@ -77,7 +77,7 @@ func InitDB() error { for k, v := range config.Config.Manager.UserID { users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k], AppMangerLevel: constant.AppAdmin}) } - userDB, err := newmgo.NewUserMongo(mgo.GetDatabase()) + userDB, err := mgo.NewUserMongo(mgo.GetDatabase()) if err != nil { return err } diff --git a/internal/tools/msg.go b/internal/tools/msg.go index bf0231786..22d3c94b7 100644 --- a/internal/tools/msg.go +++ b/internal/tools/msg.go @@ -18,7 +18,7 @@ import ( "context" "fmt" "github.com/OpenIMSDK/protocol/sdkws" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx" "math" @@ -78,7 +78,7 @@ func InitMsgTool() (*MsgTool, error) { return nil, err } discov.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials())) - userDB, err := newmgo.NewUserMongo(mongo.GetDatabase()) + userDB, err := mgo.NewUserMongo(mongo.GetDatabase()) if err != nil { return nil, err } @@ -94,19 +94,19 @@ func InitMsgTool() (*MsgTool, error) { tx, userMongoDB, ) - groupDB, err := newmgo.NewGroupMongo(mongo.GetDatabase()) + groupDB, err := mgo.NewGroupMongo(mongo.GetDatabase()) if err != nil { return nil, err } - groupMemberDB, err := newmgo.NewGroupMember(mongo.GetDatabase()) + groupMemberDB, err := mgo.NewGroupMember(mongo.GetDatabase()) if err != nil { return nil, err } - groupRequestDB, err := newmgo.NewGroupRequestMgo(mongo.GetDatabase()) + groupRequestDB, err := mgo.NewGroupRequestMgo(mongo.GetDatabase()) if err != nil { return nil, err } - conversationDB, err := newmgo.NewConversationMongo(mongo.GetDatabase()) + conversationDB, err := mgo.NewConversationMongo(mongo.GetDatabase()) if err != nil { return nil, err } diff --git a/pkg/common/db/controller/third.go b/pkg/common/db/controller/third.go index 27481f78d..75e9f20f4 100644 --- a/pkg/common/db/controller/third.go +++ b/pkg/common/db/controller/third.go @@ -27,10 +27,10 @@ type ThirdDatabase interface { FcmUpdateToken(ctx context.Context, account string, platformID int, fcmToken string, expireTime int64) error SetAppBadge(ctx context.Context, userID string, value int) error // about log for debug - UploadLogs(ctx context.Context, logs []*relation.Log) error + UploadLogs(ctx context.Context, logs []*relation.LogModel) error DeleteLogs(ctx context.Context, logID []string, userID string) error - SearchLogs(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*relation.Log, error) - GetLogs(ctx context.Context, LogIDs []string, userID string) ([]*relation.Log, error) + SearchLogs(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*relation.LogModel, error) + GetLogs(ctx context.Context, LogIDs []string, userID string) ([]*relation.LogModel, error) } type thirdDatabase struct { @@ -44,17 +44,17 @@ func (t *thirdDatabase) DeleteLogs(ctx context.Context, logID []string, userID s } // GetLogs implements ThirdDatabase. -func (t *thirdDatabase) GetLogs(ctx context.Context, LogIDs []string, userID string) ([]*relation.Log, error) { +func (t *thirdDatabase) GetLogs(ctx context.Context, LogIDs []string, userID string) ([]*relation.LogModel, error) { return t.logdb.Get(ctx, LogIDs, userID) } // SearchLogs implements ThirdDatabase. -func (t *thirdDatabase) SearchLogs(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*relation.Log, error) { +func (t *thirdDatabase) SearchLogs(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*relation.LogModel, error) { return t.logdb.Search(ctx, keyword, start, end, pagination) } // UploadLogs implements ThirdDatabase. -func (t *thirdDatabase) UploadLogs(ctx context.Context, logs []*relation.Log) error { +func (t *thirdDatabase) UploadLogs(ctx context.Context, logs []*relation.LogModel) error { return t.logdb.Create(ctx, logs) } diff --git a/pkg/common/db/newmgo/black.go b/pkg/common/db/mgo/black.go similarity index 67% rename from pkg/common/db/newmgo/black.go rename to pkg/common/db/mgo/black.go index 897bce396..4cf77f5df 100644 --- a/pkg/common/db/newmgo/black.go +++ b/pkg/common/db/mgo/black.go @@ -1,8 +1,8 @@ -package newmgo +package mgo import ( "context" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -39,42 +39,42 @@ func (b *BlackMgo) blacksFilter(blacks []*relation.BlackModel) bson.M { } func (b *BlackMgo) Create(ctx context.Context, blacks []*relation.BlackModel) (err error) { - return mgotool.InsertMany(ctx, b.coll, blacks) + return mtool.InsertMany(ctx, b.coll, blacks) } func (b *BlackMgo) Delete(ctx context.Context, blacks []*relation.BlackModel) (err error) { if len(blacks) == 0 { return nil } - return mgotool.DeleteMany(ctx, b.coll, b.blacksFilter(blacks)) + return mtool.DeleteMany(ctx, b.coll, b.blacksFilter(blacks)) } func (b *BlackMgo) UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]any) (err error) { if len(args) == 0 { return nil } - return mgotool.UpdateOne(ctx, b.coll, b.blackFilter(ownerUserID, blockUserID), bson.M{"$set": args}, false) + return mtool.UpdateOne(ctx, b.coll, b.blackFilter(ownerUserID, blockUserID), bson.M{"$set": args}, false) } func (b *BlackMgo) Find(ctx context.Context, blacks []*relation.BlackModel) (blackList []*relation.BlackModel, err error) { - return mgotool.Find[*relation.BlackModel](ctx, b.coll, b.blacksFilter(blacks)) + return mtool.Find[*relation.BlackModel](ctx, b.coll, b.blacksFilter(blacks)) } func (b *BlackMgo) Take(ctx context.Context, ownerUserID, blockUserID string) (black *relation.BlackModel, err error) { - return mgotool.FindOne[*relation.BlackModel](ctx, b.coll, b.blackFilter(ownerUserID, blockUserID)) + return mtool.FindOne[*relation.BlackModel](ctx, b.coll, b.blackFilter(ownerUserID, blockUserID)) } func (b *BlackMgo) FindOwnerBlacks(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, blacks []*relation.BlackModel, err error) { - return mgotool.FindPage[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}, pagination) + return mtool.FindPage[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}, pagination) } func (b *BlackMgo) FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error) { if len(userIDs) == 0 { - return mgotool.Find[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}) + return mtool.Find[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}) } - return mgotool.Find[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID, "block_user_id": bson.M{"$in": userIDs}}) + return mtool.Find[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID, "block_user_id": bson.M{"$in": userIDs}}) } func (b *BlackMgo) FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error) { - return mgotool.Find[string](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}, options.Find().SetProjection(bson.M{"_id": 0, "block_user_id": 1})) + return mtool.Find[string](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}, options.Find().SetProjection(bson.M{"_id": 0, "block_user_id": 1})) } diff --git a/pkg/common/db/newmgo/conversation.go b/pkg/common/db/mgo/conversation.go similarity index 59% rename from pkg/common/db/newmgo/conversation.go rename to pkg/common/db/mgo/conversation.go index cfa22d08f..87018df96 100644 --- a/pkg/common/db/newmgo/conversation.go +++ b/pkg/common/db/mgo/conversation.go @@ -1,9 +1,9 @@ -package newmgo +package mgo import ( "context" "github.com/OpenIMSDK/protocol/constant" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -23,15 +23,15 @@ type ConversationMgo struct { } func (c *ConversationMgo) Create(ctx context.Context, conversations []*relation.ConversationModel) (err error) { - return mgotool.InsertMany(ctx, c.coll, conversations) + return mtool.InsertMany(ctx, c.coll, conversations) } func (c *ConversationMgo) Delete(ctx context.Context, groupIDs []string) (err error) { - return mgotool.DeleteMany(ctx, c.coll, bson.M{"group_id": bson.M{"$in": groupIDs}}) + return mtool.DeleteMany(ctx, c.coll, bson.M{"group_id": bson.M{"$in": groupIDs}}) } func (c *ConversationMgo) UpdateByMap(ctx context.Context, userIDs []string, conversationID string, args map[string]any) (rows int64, err error) { - res, err := mgotool.UpdateMany(ctx, c.coll, bson.M{"owner_user_id": bson.M{"$in": userIDs}, "conversation_id": conversationID}, bson.M{"$set": args}) + res, err := mtool.UpdateMany(ctx, c.coll, bson.M{"owner_user_id": bson.M{"$in": userIDs}, "conversation_id": conversationID}, bson.M{"$set": args}) if err != nil { return 0, err } @@ -39,50 +39,50 @@ func (c *ConversationMgo) UpdateByMap(ctx context.Context, userIDs []string, con } func (c *ConversationMgo) Update(ctx context.Context, conversation *relation.ConversationModel) (err error) { - return mgotool.UpdateOne(ctx, c.coll, bson.M{"owner_user_id": conversation.OwnerUserID, "conversation_id": conversation.ConversationID}, bson.M{"$set": conversation}, true) + return mtool.UpdateOne(ctx, c.coll, bson.M{"owner_user_id": conversation.OwnerUserID, "conversation_id": conversation.ConversationID}, bson.M{"$set": conversation}, true) } func (c *ConversationMgo) Find(ctx context.Context, ownerUserID string, conversationIDs []string) (conversations []*relation.ConversationModel, err error) { - return mgotool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{"owner_user_id": ownerUserID, "conversation_id": bson.M{"$in": conversationIDs}}) + return mtool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{"owner_user_id": ownerUserID, "conversation_id": bson.M{"$in": conversationIDs}}) } func (c *ConversationMgo) FindUserID(ctx context.Context, userIDs []string, conversationIDs []string) ([]string, error) { - return mgotool.Find[string](ctx, c.coll, bson.M{"owner_user_id": bson.M{"$in": userIDs}, "conversation_id": bson.M{"$in": conversationIDs}}, options.Find().SetProjection(bson.M{"_id": 0, "owner_user_id": 1})) + return mtool.Find[string](ctx, c.coll, bson.M{"owner_user_id": bson.M{"$in": userIDs}, "conversation_id": bson.M{"$in": conversationIDs}}, options.Find().SetProjection(bson.M{"_id": 0, "owner_user_id": 1})) } func (c *ConversationMgo) FindUserIDAllConversationID(ctx context.Context, userID string) ([]string, error) { - return mgotool.Find[string](ctx, c.coll, bson.M{"owner_user_id": userID}, options.Find().SetProjection(bson.M{"_id": 0, "conversation_id": 1})) + return mtool.Find[string](ctx, c.coll, bson.M{"owner_user_id": userID}, options.Find().SetProjection(bson.M{"_id": 0, "conversation_id": 1})) } func (c *ConversationMgo) Take(ctx context.Context, userID, conversationID string) (conversation *relation.ConversationModel, err error) { - return mgotool.FindOne[*relation.ConversationModel](ctx, c.coll, bson.M{"owner_user_id": userID, "conversation_id": conversationID}) + return mtool.FindOne[*relation.ConversationModel](ctx, c.coll, bson.M{"owner_user_id": userID, "conversation_id": conversationID}) } func (c *ConversationMgo) FindConversationID(ctx context.Context, userID string, conversationIDs []string) (existConversationID []string, err error) { - return mgotool.Find[string](ctx, c.coll, bson.M{"owner_user_id": userID, "conversation_id": bson.M{"$in": conversationIDs}}, options.Find().SetProjection(bson.M{"_id": 0, "conversation_id": 1})) + return mtool.Find[string](ctx, c.coll, bson.M{"owner_user_id": userID, "conversation_id": bson.M{"$in": conversationIDs}}, options.Find().SetProjection(bson.M{"_id": 0, "conversation_id": 1})) } func (c *ConversationMgo) FindUserIDAllConversations(ctx context.Context, userID string) (conversations []*relation.ConversationModel, err error) { - return mgotool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{"owner_user_id": userID}) + return mtool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{"owner_user_id": userID}) } func (c *ConversationMgo) FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error) { - return mgotool.Find[string](ctx, c.coll, bson.M{"group_id": groupID, "recv_msg_opt": constant.ReceiveNotNotifyMessage}, options.Find().SetProjection(bson.M{"_id": 0, "owner_user_id": 1})) + return mtool.Find[string](ctx, c.coll, bson.M{"group_id": groupID, "recv_msg_opt": constant.ReceiveNotNotifyMessage}, options.Find().SetProjection(bson.M{"_id": 0, "owner_user_id": 1})) } func (c *ConversationMgo) GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string) (opt int, err error) { - return mgotool.FindOne[int](ctx, c.coll, bson.M{"owner_user_id": ownerUserID, "conversation_id": conversationID}, options.FindOne().SetProjection(bson.M{"recv_msg_opt": 1})) + return mtool.FindOne[int](ctx, c.coll, bson.M{"owner_user_id": ownerUserID, "conversation_id": conversationID}, options.FindOne().SetProjection(bson.M{"recv_msg_opt": 1})) } func (c *ConversationMgo) GetAllConversationIDs(ctx context.Context) ([]string, error) { - return mgotool.Aggregate[string](ctx, c.coll, []bson.M{ + return mtool.Aggregate[string](ctx, c.coll, []bson.M{ {"$group": bson.M{"_id": "$conversation_id"}}, {"$project": bson.M{"_id": 0, "conversation_id": "$_id"}}, }) } func (c *ConversationMgo) GetAllConversationIDsNumber(ctx context.Context) (int64, error) { - counts, err := mgotool.Aggregate[int64](ctx, c.coll, []bson.M{ + counts, err := mtool.Aggregate[int64](ctx, c.coll, []bson.M{ {"$group": bson.M{"_id": "$conversation_id"}}, {"$project": bson.M{"_id": 0, "conversation_id": "$_id"}}, }) @@ -96,16 +96,16 @@ func (c *ConversationMgo) GetAllConversationIDsNumber(ctx context.Context) (int6 } func (c *ConversationMgo) PageConversationIDs(ctx context.Context, pagination pagination.Pagination) (conversationIDs []string, err error) { - return mgotool.FindPageOnly[string](ctx, c.coll, bson.M{}, pagination, options.Find().SetProjection(bson.M{"conversation_id": 1})) + return mtool.FindPageOnly[string](ctx, c.coll, bson.M{}, pagination, options.Find().SetProjection(bson.M{"conversation_id": 1})) } func (c *ConversationMgo) GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*relation.ConversationModel, error) { - return mgotool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{"conversation_id": bson.M{"$in": conversationIDs}}) + return mtool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{"conversation_id": bson.M{"$in": conversationIDs}}) } func (c *ConversationMgo) GetConversationIDsNeedDestruct(ctx context.Context) ([]*relation.ConversationModel, error) { //"is_msg_destruct = 1 && msg_destruct_time != 0 && (UNIX_TIMESTAMP(NOW()) > (msg_destruct_time + UNIX_TIMESTAMP(latest_msg_destruct_time)) || latest_msg_destruct_time is NULL)" - return mgotool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{ + return mtool.Find[*relation.ConversationModel](ctx, c.coll, bson.M{ "is_msg_destruct": 1, "msg_destruct_time": bson.M{"$ne": 0}, "$or": []bson.M{ @@ -125,5 +125,5 @@ func (c *ConversationMgo) GetConversationIDsNeedDestruct(ctx context.Context) ([ } func (c *ConversationMgo) GetConversationNotReceiveMessageUserIDs(ctx context.Context, conversationID string) ([]string, error) { - return mgotool.Find[string](ctx, c.coll, bson.M{"conversation_id": conversationID, "recv_msg_opt": bson.M{"$ne": constant.ReceiveMessage}}, options.Find().SetProjection(bson.M{"_id": 0, "owner_user_id": 1})) + return mtool.Find[string](ctx, c.coll, bson.M{"conversation_id": conversationID, "recv_msg_opt": bson.M{"$ne": constant.ReceiveMessage}}, options.Find().SetProjection(bson.M{"_id": 0, "owner_user_id": 1})) } diff --git a/pkg/common/db/newmgo/friend.go b/pkg/common/db/mgo/friend.go similarity index 83% rename from pkg/common/db/newmgo/friend.go rename to pkg/common/db/mgo/friend.go index ff8eab3e2..82fa929f9 100644 --- a/pkg/common/db/newmgo/friend.go +++ b/pkg/common/db/mgo/friend.go @@ -1,10 +1,10 @@ -package newmgo +package mgo import ( "context" "go.mongodb.org/mongo-driver/mongo/options" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -25,7 +25,7 @@ func NewFriendMongo(db *mongo.Database) (relation.FriendModelInterface, error) { // Create inserts multiple friend records. func (f *FriendMgo) Create(ctx context.Context, friends []*relation.FriendModel) error { - return mgotool.InsertMany(ctx, f.coll, friends) + return mtool.InsertMany(ctx, f.coll, friends) } // Delete removes specified friends of the owner user. @@ -34,7 +34,7 @@ func (f *FriendMgo) Delete(ctx context.Context, ownerUserID string, friendUserID "owner_user_id": ownerUserID, "friend_user_id": bson.M{"$in": friendUserIDs}, } - return mgotool.DeleteOne(ctx, f.coll, filter) + return mtool.DeleteOne(ctx, f.coll, filter) } // UpdateByMap updates specific fields of a friend document using a map. @@ -46,7 +46,7 @@ func (f *FriendMgo) UpdateByMap(ctx context.Context, ownerUserID string, friendU "owner_user_id": ownerUserID, "friend_user_id": friendUserID, } - return mgotool.UpdateOne(ctx, f.coll, filter, bson.M{"$set": args}, true) + return mtool.UpdateOne(ctx, f.coll, filter, bson.M{"$set": args}, true) } // Update modifies multiple friend documents. @@ -69,7 +69,7 @@ func (f *FriendMgo) Take(ctx context.Context, ownerUserID, friendUserID string) "owner_user_id": ownerUserID, "friend_user_id": friendUserID, } - return mgotool.FindOne[*relation.FriendModel](ctx, f.coll, filter) + return mtool.FindOne[*relation.FriendModel](ctx, f.coll, filter) } // FindUserState finds the friendship status between two users. @@ -80,7 +80,7 @@ func (f *FriendMgo) FindUserState(ctx context.Context, userID1, userID2 string) {"owner_user_id": userID2, "friend_user_id": userID1}, }, } - return mgotool.Find[*relation.FriendModel](ctx, f.coll, filter) + return mtool.Find[*relation.FriendModel](ctx, f.coll, filter) } // FindFriends retrieves a list of friends for a given owner. Missing friends do not cause an error. @@ -89,7 +89,7 @@ func (f *FriendMgo) FindFriends(ctx context.Context, ownerUserID string, friendU "owner_user_id": ownerUserID, "friend_user_id": bson.M{"$in": friendUserIDs}, } - return mgotool.Find[*relation.FriendModel](ctx, f.coll, filter) + return mtool.Find[*relation.FriendModel](ctx, f.coll, filter) } // FindReversalFriends finds users who have added the specified user as a friend. @@ -98,23 +98,23 @@ func (f *FriendMgo) FindReversalFriends(ctx context.Context, friendUserID string "owner_user_id": bson.M{"$in": ownerUserIDs}, "friend_user_id": friendUserID, } - return mgotool.Find[*relation.FriendModel](ctx, f.coll, filter) + return mtool.Find[*relation.FriendModel](ctx, f.coll, filter) } // FindOwnerFriends retrieves a paginated list of friends for a given owner. func (f *FriendMgo) FindOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (int64, []*relation.FriendModel, error) { filter := bson.M{"owner_user_id": ownerUserID} - return mgotool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination) + return mtool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination) } // FindInWhoseFriends finds users who have added the specified user as a friend, with pagination. func (f *FriendMgo) FindInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (int64, []*relation.FriendModel, error) { filter := bson.M{"friend_user_id": friendUserID} - return mgotool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination) + return mtool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination) } // FindFriendUserIDs retrieves a list of friend user IDs for a given owner. func (f *FriendMgo) FindFriendUserIDs(ctx context.Context, ownerUserID string) ([]string, error) { filter := bson.M{"owner_user_id": ownerUserID} - return mgotool.Find[string](ctx, f.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "friend_user_id": 1})) + return mtool.Find[string](ctx, f.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "friend_user_id": 1})) } diff --git a/pkg/common/db/newmgo/friend_request.go b/pkg/common/db/mgo/friend_request.go similarity index 75% rename from pkg/common/db/newmgo/friend_request.go rename to pkg/common/db/mgo/friend_request.go index 3f8a2ce9a..9cfc37797 100644 --- a/pkg/common/db/newmgo/friend_request.go +++ b/pkg/common/db/mgo/friend_request.go @@ -1,10 +1,10 @@ -package newmgo +package mgo import ( "context" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" @@ -21,11 +21,11 @@ type FriendRequestMgo struct { } func (f *FriendRequestMgo) FindToUserID(ctx context.Context, toUserID string, pagination pagination.Pagination) (total int64, friendRequests []*relation.FriendRequestModel, err error) { - return mgotool.FindPage[*relation.FriendRequestModel](ctx, f.coll, bson.M{"to_user_id": toUserID}, pagination) + return mtool.FindPage[*relation.FriendRequestModel](ctx, f.coll, bson.M{"to_user_id": toUserID}, pagination) } func (f *FriendRequestMgo) FindFromUserID(ctx context.Context, fromUserID string, pagination pagination.Pagination) (total int64, friendRequests []*relation.FriendRequestModel, err error) { - return mgotool.FindPage[*relation.FriendRequestModel](ctx, f.coll, bson.M{"from_user_id": fromUserID}, pagination) + return mtool.FindPage[*relation.FriendRequestModel](ctx, f.coll, bson.M{"from_user_id": fromUserID}, pagination) } func (f *FriendRequestMgo) FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error) { @@ -33,22 +33,22 @@ func (f *FriendRequestMgo) FindBothFriendRequests(ctx context.Context, fromUserI {"from_user_id": fromUserID, "to_user_id": toUserID}, {"from_user_id": toUserID, "to_user_id": fromUserID}, }} - return mgotool.Find[*relation.FriendRequestModel](ctx, f.coll, filter) + return mtool.Find[*relation.FriendRequestModel](ctx, f.coll, filter) } func (f *FriendRequestMgo) Create(ctx context.Context, friendRequests []*relation.FriendRequestModel) error { - return mgotool.InsertMany(ctx, f.coll, friendRequests) + return mtool.InsertMany(ctx, f.coll, friendRequests) } func (f *FriendRequestMgo) Delete(ctx context.Context, fromUserID, toUserID string) (err error) { - return mgotool.DeleteOne(ctx, f.coll, bson.M{"from_user_id": fromUserID, "to_user_id": toUserID}) + return mtool.DeleteOne(ctx, f.coll, bson.M{"from_user_id": fromUserID, "to_user_id": toUserID}) } func (f *FriendRequestMgo) UpdateByMap(ctx context.Context, formUserID, toUserID string, args map[string]any) (err error) { if len(args) == 0 { return nil } - return mgotool.UpdateOne(ctx, f.coll, bson.M{"from_user_id": formUserID, "to_user_id": toUserID}, bson.M{"$set": args}, true) + return mtool.UpdateOne(ctx, f.coll, bson.M{"from_user_id": formUserID, "to_user_id": toUserID}, bson.M{"$set": args}, true) } func (f *FriendRequestMgo) Update(ctx context.Context, friendRequest *relation.FriendRequestModel) (err error) { @@ -75,11 +75,11 @@ func (f *FriendRequestMgo) Update(ctx context.Context, friendRequest *relation.F return nil } filter := bson.M{"from_user_id": friendRequest.FromUserID, "to_user_id": friendRequest.ToUserID} - return mgotool.UpdateOne(ctx, f.coll, filter, bson.M{"$set": updater}, true) + return mtool.UpdateOne(ctx, f.coll, filter, bson.M{"$set": updater}, true) } func (f *FriendRequestMgo) Find(ctx context.Context, fromUserID, toUserID string) (friendRequest *relation.FriendRequestModel, err error) { - return mgotool.FindOne[*relation.FriendRequestModel](ctx, f.coll, bson.M{"from_user_id": fromUserID, "to_user_id": toUserID}) + return mtool.FindOne[*relation.FriendRequestModel](ctx, f.coll, bson.M{"from_user_id": fromUserID, "to_user_id": toUserID}) } func (f *FriendRequestMgo) Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *relation.FriendRequestModel, err error) { diff --git a/pkg/common/db/newmgo/group.go b/pkg/common/db/mgo/group.go similarity index 73% rename from pkg/common/db/newmgo/group.go rename to pkg/common/db/mgo/group.go index 46bc69325..ca5e96dd8 100644 --- a/pkg/common/db/newmgo/group.go +++ b/pkg/common/db/mgo/group.go @@ -1,8 +1,8 @@ -package newmgo +package mgo import ( "context" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -21,7 +21,7 @@ type GroupMgo struct { } func (g *GroupMgo) Create(ctx context.Context, groups []*relation.GroupModel) (err error) { - return mgotool.InsertMany(ctx, g.coll, groups) + return mtool.InsertMany(ctx, g.coll, groups) } func (g *GroupMgo) UpdateState(ctx context.Context, groupID string, state int32) (err error) { @@ -32,26 +32,26 @@ func (g *GroupMgo) UpdateMap(ctx context.Context, groupID string, args map[strin if len(args) == 0 { return nil } - return mgotool.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID}, bson.M{"$set": args}, true) + return mtool.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID}, bson.M{"$set": args}, true) } func (g *GroupMgo) Find(ctx context.Context, groupIDs []string) (groups []*relation.GroupModel, err error) { - return mgotool.Find[*relation.GroupModel](ctx, g.coll, bson.M{"group_id": bson.M{"$in": groupIDs}}) + return mtool.Find[*relation.GroupModel](ctx, g.coll, bson.M{"group_id": bson.M{"$in": groupIDs}}) } func (g *GroupMgo) Take(ctx context.Context, groupID string) (group *relation.GroupModel, err error) { - return mgotool.FindOne[*relation.GroupModel](ctx, g.coll, bson.M{"group_id": groupID}) + return mtool.FindOne[*relation.GroupModel](ctx, g.coll, bson.M{"group_id": groupID}) } func (g *GroupMgo) Search(ctx context.Context, keyword string, pagination pagination.Pagination) (total int64, groups []*relation.GroupModel, err error) { - return mgotool.FindPage[*relation.GroupModel](ctx, g.coll, bson.M{"group_name": bson.M{"$regex": keyword}}, pagination) + return mtool.FindPage[*relation.GroupModel](ctx, g.coll, bson.M{"group_name": bson.M{"$regex": keyword}}, pagination) } func (g *GroupMgo) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { if before == nil { - return mgotool.Count(ctx, g.coll, bson.M{}) + return mtool.Count(ctx, g.coll, bson.M{}) } - return mgotool.Count(ctx, g.coll, bson.M{"create_time": bson.M{"$lt": before}}) + return mtool.Count(ctx, g.coll, bson.M{"create_time": bson.M{"$lt": before}}) } func (g *GroupMgo) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { @@ -82,7 +82,7 @@ func (g *GroupMgo) CountRangeEverydayTotal(ctx context.Context, start time.Time, Date string `bson:"_id"` Count int64 `bson:"count"` } - items, err := mgotool.Aggregate[Item](ctx, g.coll, pipeline) + items, err := mtool.Aggregate[Item](ctx, g.coll, pipeline) if err != nil { return nil, err } diff --git a/pkg/common/db/newmgo/group_member.go b/pkg/common/db/mgo/group_member.go similarity index 68% rename from pkg/common/db/newmgo/group_member.go rename to pkg/common/db/mgo/group_member.go index dbc774e80..798f27ade 100644 --- a/pkg/common/db/newmgo/group_member.go +++ b/pkg/common/db/mgo/group_member.go @@ -1,9 +1,9 @@ -package newmgo +package mgo import ( "context" "github.com/OpenIMSDK/protocol/constant" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -20,11 +20,11 @@ type GroupMemberMgo struct { } func (g *GroupMemberMgo) Create(ctx context.Context, groupMembers []*relation.GroupMemberModel) (err error) { - return mgotool.InsertMany(ctx, g.coll, groupMembers) + return mtool.InsertMany(ctx, g.coll, groupMembers) } func (g *GroupMemberMgo) Delete(ctx context.Context, groupID string, userIDs []string) (err error) { - return mgotool.DeleteMany(ctx, g.coll, bson.M{"group_id": groupID, "user_id": bson.M{"$in": userIDs}}) + return mtool.DeleteMany(ctx, g.coll, bson.M{"group_id": groupID, "user_id": bson.M{"$in": userIDs}}) } func (g *GroupMemberMgo) UpdateRoleLevel(ctx context.Context, groupID string, userID string, roleLevel int32) error { @@ -32,7 +32,7 @@ func (g *GroupMemberMgo) UpdateRoleLevel(ctx context.Context, groupID string, us } func (g *GroupMemberMgo) Update(ctx context.Context, groupID string, userID string, data map[string]any) (err error) { - return mgotool.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}, bson.M{"$set": data}, true) + return mtool.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}, bson.M{"$set": data}, true) } func (g *GroupMemberMgo) Find(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) (groupMembers []*relation.GroupMemberModel, err error) { @@ -41,19 +41,19 @@ func (g *GroupMemberMgo) Find(ctx context.Context, groupIDs []string, userIDs [] } func (g *GroupMemberMgo) FindMemberUserID(ctx context.Context, groupID string) (userIDs []string, err error) { - return mgotool.Find[string](ctx, g.coll, bson.M{"group_id": groupID}, options.Find().SetProjection(bson.M{"_id": 0, "user_id": 1})) + return mtool.Find[string](ctx, g.coll, bson.M{"group_id": groupID}, options.Find().SetProjection(bson.M{"_id": 0, "user_id": 1})) } func (g *GroupMemberMgo) Take(ctx context.Context, groupID string, userID string) (groupMember *relation.GroupMemberModel, err error) { - return mgotool.FindOne[*relation.GroupMemberModel](ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}) + return mtool.FindOne[*relation.GroupMemberModel](ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}) } func (g *GroupMemberMgo) TakeOwner(ctx context.Context, groupID string) (groupMember *relation.GroupMemberModel, err error) { - return mgotool.FindOne[*relation.GroupMemberModel](ctx, g.coll, bson.M{"group_id": groupID, "role_level": constant.GroupOwner}) + return mtool.FindOne[*relation.GroupMemberModel](ctx, g.coll, bson.M{"group_id": groupID, "role_level": constant.GroupOwner}) } func (g *GroupMemberMgo) FindRoleLevelUserIDs(ctx context.Context, groupID string, roleLevel int32) ([]string, error) { - return mgotool.Find[string](ctx, g.coll, bson.M{"group_id": groupID, "role_level": roleLevel}, options.Find().SetProjection(bson.M{"_id": 0, "user_id": 1})) + return mtool.Find[string](ctx, g.coll, bson.M{"group_id": groupID, "role_level": roleLevel}, options.Find().SetProjection(bson.M{"_id": 0, "user_id": 1})) } func (g *GroupMemberMgo) SearchMember(ctx context.Context, keyword string, groupID string, pagination pagination.Pagination) (total int64, groupList []*relation.GroupMemberModel, err error) { @@ -62,11 +62,11 @@ func (g *GroupMemberMgo) SearchMember(ctx context.Context, keyword string, group } func (g *GroupMemberMgo) FindUserJoinedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) { - return mgotool.Find[string](ctx, g.coll, bson.M{"user_id": userID}, options.Find().SetProjection(bson.M{"_id": 0, "group_id": 1})) + return mtool.Find[string](ctx, g.coll, bson.M{"user_id": userID}, options.Find().SetProjection(bson.M{"_id": 0, "group_id": 1})) } func (g *GroupMemberMgo) TakeGroupMemberNum(ctx context.Context, groupID string) (count int64, err error) { - return mgotool.Count(ctx, g.coll, bson.M{"group_id": groupID}) + return mtool.Count(ctx, g.coll, bson.M{"group_id": groupID}) } func (g *GroupMemberMgo) FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) { @@ -76,7 +76,7 @@ func (g *GroupMemberMgo) FindUserManagedGroupID(ctx context.Context, userID stri "$in": []int{constant.GroupOwner, constant.GroupAdmin}, }, } - return mgotool.Find[string](ctx, g.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "group_id": 1})) + return mtool.Find[string](ctx, g.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "group_id": 1})) } func (g *GroupMemberMgo) IsUpdateRoleLevel(data map[string]any) bool { diff --git a/pkg/common/db/newmgo/group_request.go b/pkg/common/db/mgo/group_request.go similarity index 62% rename from pkg/common/db/newmgo/group_request.go rename to pkg/common/db/mgo/group_request.go index ea367b653..a980d4e90 100644 --- a/pkg/common/db/newmgo/group_request.go +++ b/pkg/common/db/mgo/group_request.go @@ -1,8 +1,8 @@ -package newmgo +package mgo import ( "context" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -18,29 +18,29 @@ type GroupRequestMgo struct { } func (g *GroupRequestMgo) Create(ctx context.Context, groupRequests []*relation.GroupRequestModel) (err error) { - return mgotool.InsertMany(ctx, g.coll, groupRequests) + return mtool.InsertMany(ctx, g.coll, groupRequests) } func (g *GroupRequestMgo) Delete(ctx context.Context, groupID string, userID string) (err error) { - return mgotool.DeleteOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}) + return mtool.DeleteOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}) } func (g *GroupRequestMgo) UpdateHandler(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32) (err error) { - return mgotool.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}, bson.M{"$set": bson.M{"handle_msg": handledMsg, "handle_result": handleResult}}, true) + return mtool.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}, bson.M{"$set": bson.M{"handle_msg": handledMsg, "handle_result": handleResult}}, true) } func (g *GroupRequestMgo) Take(ctx context.Context, groupID string, userID string) (groupRequest *relation.GroupRequestModel, err error) { - return mgotool.FindOne[*relation.GroupRequestModel](ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}) + return mtool.FindOne[*relation.GroupRequestModel](ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID}) } func (g *GroupRequestMgo) FindGroupRequests(ctx context.Context, groupID string, userIDs []string) ([]*relation.GroupRequestModel, error) { - return mgotool.Find[*relation.GroupRequestModel](ctx, g.coll, bson.M{"group_id": groupID, "user_id": bson.M{"$in": userIDs}}) + return mtool.Find[*relation.GroupRequestModel](ctx, g.coll, bson.M{"group_id": groupID, "user_id": bson.M{"$in": userIDs}}) } func (g *GroupRequestMgo) Page(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, groups []*relation.GroupRequestModel, err error) { - return mgotool.FindPage[*relation.GroupRequestModel](ctx, g.coll, bson.M{"user_id": userID}, pagination) + return mtool.FindPage[*relation.GroupRequestModel](ctx, g.coll, bson.M{"user_id": userID}, pagination) } func (g *GroupRequestMgo) PageGroup(ctx context.Context, groupIDs []string, pagination pagination.Pagination) (total int64, groups []*relation.GroupRequestModel, err error) { - return mgotool.FindPage[*relation.GroupRequestModel](ctx, g.coll, bson.M{"group_id": bson.M{"$in": groupIDs}}, pagination) + return mtool.FindPage[*relation.GroupRequestModel](ctx, g.coll, bson.M{"group_id": bson.M{"$in": groupIDs}}, pagination) } diff --git a/pkg/common/db/newmgo/log.go b/pkg/common/db/mgo/log.go similarity index 58% rename from pkg/common/db/newmgo/log.go rename to pkg/common/db/mgo/log.go index f42588745..c3db198d5 100644 --- a/pkg/common/db/newmgo/log.go +++ b/pkg/common/db/mgo/log.go @@ -1,8 +1,8 @@ -package newmgo +package mgo import ( "context" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "go.mongodb.org/mongo-driver/bson" @@ -22,28 +22,28 @@ type LogMgo struct { coll *mongo.Collection } -func (l *LogMgo) Create(ctx context.Context, log []*relation.Log) error { - return mgotool.InsertMany(ctx, l.coll, log) +func (l *LogMgo) Create(ctx context.Context, log []*relation.LogModel) error { + return mtool.InsertMany(ctx, l.coll, log) } -func (l *LogMgo) Search(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*relation.Log, error) { +func (l *LogMgo) Search(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*relation.LogModel, error) { filter := bson.M{"create_time": bson.M{"$gte": start, "$lte": end}} if keyword != "" { filter["user_id"] = bson.M{"$regex": keyword} } - return mgotool.FindPage[*relation.Log](ctx, l.coll, filter, pagination, options.Find().SetSort(bson.M{"create_time": -1})) + return mtool.FindPage[*relation.LogModel](ctx, l.coll, filter, pagination, options.Find().SetSort(bson.M{"create_time": -1})) } func (l *LogMgo) Delete(ctx context.Context, logID []string, userID string) error { if userID == "" { - return mgotool.DeleteMany(ctx, l.coll, bson.M{"log_id": bson.M{"$in": logID}}) + return mtool.DeleteMany(ctx, l.coll, bson.M{"log_id": bson.M{"$in": logID}}) } - return mgotool.DeleteMany(ctx, l.coll, bson.M{"log_id": bson.M{"$in": logID}, "user_id": userID}) + return mtool.DeleteMany(ctx, l.coll, bson.M{"log_id": bson.M{"$in": logID}, "user_id": userID}) } -func (l *LogMgo) Get(ctx context.Context, logIDs []string, userID string) ([]*relation.Log, error) { +func (l *LogMgo) Get(ctx context.Context, logIDs []string, userID string) ([]*relation.LogModel, error) { if userID == "" { - return mgotool.Find[*relation.Log](ctx, l.coll, bson.M{"log_id": bson.M{"$in": logIDs}}) + return mtool.Find[*relation.LogModel](ctx, l.coll, bson.M{"log_id": bson.M{"$in": logIDs}}) } - return mgotool.Find[*relation.Log](ctx, l.coll, bson.M{"log_id": bson.M{"$in": logIDs}, "user_id": userID}) + return mtool.Find[*relation.LogModel](ctx, l.coll, bson.M{"log_id": bson.M{"$in": logIDs}, "user_id": userID}) } diff --git a/pkg/common/db/newmgo/mgotool/tool.go b/pkg/common/db/mgo/mtool/tool.go similarity index 99% rename from pkg/common/db/newmgo/mgotool/tool.go rename to pkg/common/db/mgo/mtool/tool.go index f7024f2af..eb4a854bb 100644 --- a/pkg/common/db/newmgo/mgotool/tool.go +++ b/pkg/common/db/mgo/mtool/tool.go @@ -1,4 +1,4 @@ -package mgotool +package mtool import ( "context" diff --git a/pkg/common/db/newmgo/object.go b/pkg/common/db/mgo/object.go similarity index 68% rename from pkg/common/db/newmgo/object.go rename to pkg/common/db/mgo/object.go index 32e3daa4f..500ef1371 100644 --- a/pkg/common/db/newmgo/object.go +++ b/pkg/common/db/mgo/object.go @@ -1,8 +1,8 @@ -package newmgo +package mgo import ( "context" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" @@ -30,16 +30,16 @@ func (o *S3Mongo) SetObject(ctx context.Context, obj *relation.ObjectModel) erro "group": obj.Group, "create_time": obj.CreateTime, } - return mgotool.UpdateOne(ctx, o.coll, filter, bson.M{"$set": update}, false, options.Update().SetUpsert(true)) + return mtool.UpdateOne(ctx, o.coll, filter, bson.M{"$set": update}, false, options.Update().SetUpsert(true)) } func (o *S3Mongo) Take(ctx context.Context, engine string, name string) (*relation.ObjectModel, error) { if engine == "" { - return mgotool.FindOne[*relation.ObjectModel](ctx, o.coll, bson.M{"name": name}) + return mtool.FindOne[*relation.ObjectModel](ctx, o.coll, bson.M{"name": name}) } - return mgotool.FindOne[*relation.ObjectModel](ctx, o.coll, bson.M{"name": name, "engine": engine}) + return mtool.FindOne[*relation.ObjectModel](ctx, o.coll, bson.M{"name": name, "engine": engine}) } func (o *S3Mongo) Delete(ctx context.Context, engine string, name string) error { - return mgotool.DeleteOne(ctx, o.coll, bson.M{"name": name, "engine": engine}) + return mtool.DeleteOne(ctx, o.coll, bson.M{"name": name, "engine": engine}) } diff --git a/pkg/common/db/mgo/user.go b/pkg/common/db/mgo/user.go new file mode 100644 index 000000000..4ef8e6ba4 --- /dev/null +++ b/pkg/common/db/mgo/user.go @@ -0,0 +1,103 @@ +package mgo + +import ( + "context" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo/mtool" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" + "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "time" +) + +func NewUserMongo(db *mongo.Database) (relation.UserModelInterface, error) { + return &UserMgo{ + coll: db.Collection("user"), + }, nil +} + +type UserMgo struct { + coll *mongo.Collection +} + +func (u *UserMgo) Create(ctx context.Context, users []*relation.UserModel) error { + return mtool.InsertMany(ctx, u.coll, users) +} + +func (u *UserMgo) UpdateByMap(ctx context.Context, userID string, args map[string]any) (err error) { + if len(args) == 0 { + return nil + } + return mtool.UpdateOne(ctx, u.coll, bson.M{"user_id": userID}, bson.M{"$set": args}, true) +} + +func (u *UserMgo) Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error) { + return mtool.Find[*relation.UserModel](ctx, u.coll, bson.M{"user_id": bson.M{"$in": userIDs}}) +} + +func (u *UserMgo) Take(ctx context.Context, userID string) (user *relation.UserModel, err error) { + return mtool.FindOne[*relation.UserModel](ctx, u.coll, bson.M{"user_id": userID}) +} + +func (u *UserMgo) Page(ctx context.Context, pagination pagination.Pagination) (count int64, users []*relation.UserModel, err error) { + return mtool.FindPage[*relation.UserModel](ctx, u.coll, bson.M{}, pagination) +} + +func (u *UserMgo) GetAllUserID(ctx context.Context, pagination pagination.Pagination) (int64, []string, error) { + return mtool.FindPage[string](ctx, u.coll, bson.M{}, pagination, options.Find().SetProjection(bson.M{"user_id": 1})) +} + +func (u *UserMgo) Exist(ctx context.Context, userID string) (exist bool, err error) { + return mtool.Exist(ctx, u.coll, bson.M{"user_id": userID}) +} + +func (u *UserMgo) GetUserGlobalRecvMsgOpt(ctx context.Context, userID string) (opt int, err error) { + return mtool.FindOne[int](ctx, u.coll, bson.M{"user_id": userID}, options.FindOne().SetProjection(bson.M{"global_recv_msg_opt": 1})) +} + +func (u *UserMgo) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { + if before == nil { + return mtool.Count(ctx, u.coll, bson.M{}) + } + return mtool.Count(ctx, u.coll, bson.M{"create_time": bson.M{"$lt": before}}) +} + +func (u *UserMgo) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { + pipeline := bson.A{ + bson.M{ + "$match": bson.M{ + "create_time": bson.M{ + "$gte": start, + "$lt": end, + }, + }, + }, + bson.M{ + "$group": bson.M{ + "_id": bson.M{ + "$dateToString": bson.M{ + "format": "%Y-%m-%d", + "date": "$create_time", + }, + }, + "count": bson.M{ + "$sum": 1, + }, + }, + }, + } + type Item struct { + Date string `bson:"_id"` + Count int64 `bson:"count"` + } + items, err := mtool.Aggregate[Item](ctx, u.coll, pipeline) + if err != nil { + return nil, err + } + res := make(map[string]int64, len(items)) + for _, item := range items { + res[item.Date] = item.Count + } + return res, nil +} diff --git a/pkg/common/db/newmgo/user.go b/pkg/common/db/newmgo/user.go deleted file mode 100644 index 6a9975dff..000000000 --- a/pkg/common/db/newmgo/user.go +++ /dev/null @@ -1,71 +0,0 @@ -package newmgo - -import ( - "context" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool" - "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" - "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" - "time" -) - -func NewUserMongo(db *mongo.Database) (relation.UserModelInterface, error) { - return &UserMgo{ - coll: db.Collection("user"), - }, nil -} - -type UserMgo struct { - coll *mongo.Collection -} - -func (u *UserMgo) Create(ctx context.Context, users []*relation.UserModel) error { - return mgotool.InsertMany(ctx, u.coll, users) -} - -func (u *UserMgo) UpdateByMap(ctx context.Context, userID string, args map[string]any) (err error) { - if len(args) == 0 { - return nil - } - return mgotool.UpdateOne(ctx, u.coll, bson.M{"user_id": userID}, bson.M{"$set": args}, true) -} - -func (u *UserMgo) Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error) { - return mgotool.Find[*relation.UserModel](ctx, u.coll, bson.M{"user_id": bson.M{"$in": userIDs}}) -} - -func (u *UserMgo) Take(ctx context.Context, userID string) (user *relation.UserModel, err error) { - return mgotool.FindOne[*relation.UserModel](ctx, u.coll, bson.M{"user_id": userID}) -} - -func (u *UserMgo) Page(ctx context.Context, pagination pagination.Pagination) (count int64, users []*relation.UserModel, err error) { - return mgotool.FindPage[*relation.UserModel](ctx, u.coll, bson.M{}, pagination) -} - -func (u *UserMgo) GetAllUserID(ctx context.Context, pagination pagination.Pagination) (int64, []string, error) { - return mgotool.FindPage[string](ctx, u.coll, bson.M{}, pagination, options.Find().SetProjection(bson.M{"user_id": 1})) -} - -func (u *UserMgo) Exist(ctx context.Context, userID string) (exist bool, err error) { - return mgotool.Exist(ctx, u.coll, bson.M{"user_id": userID}) -} - -func (u *UserMgo) GetUserGlobalRecvMsgOpt(ctx context.Context, userID string) (opt int, err error) { - return mgotool.FindOne[int](ctx, u.coll, bson.M{"user_id": userID}, options.FindOne().SetProjection(bson.M{"global_recv_msg_opt": 1})) -} - -func (u *UserMgo) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { - return mgotool.Count(ctx, u.coll, bson.M{"create_time": bson.M{"$lt": before}}) -} - -func (u *UserMgo) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { - //type Temp struct { - // CreateTime time.Time `bson:"create_time"` - // Number int64 `bson:"number"` - //} - //mgotool.Find(ctx, u.coll, bson.M{"create_time": bson.M{"$gte": start, "$lt": end}}, options.Find().SetProjection(bson.M{"create_time": 1})) - panic("implement me") - return nil, nil -} diff --git a/pkg/common/db/relation/black_model.go b/pkg/common/db/relation/black_model.go deleted file mode 100644 index 0b1a7ec0b..000000000 --- a/pkg/common/db/relation/black_model.go +++ /dev/null @@ -1,111 +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 relation - -//import ( -// "context" -// -// "github.com/OpenIMSDK/tools/errs" -// -// "github.com/OpenIMSDK/tools/ormutil" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type BlackGorm struct { -// *MetaDB -//} -// -//func NewBlackGorm(db *gorm.DB) relation.BlackModelInterface { -// return &BlackGorm{NewMetaDB(db, &relation.BlackModel{})} -//} -// -//func (b *BlackGorm) Create(ctx context.Context, blacks []*relation.BlackModel) (err error) { -// return utils.Wrap(b.db(ctx).Create(&blacks).Error, "") -//} -// -//func (b *BlackGorm) Delete(ctx context.Context, blacks []*relation.BlackModel) (err error) { -// return utils.Wrap(b.db(ctx).Delete(blacks).Error, "") -//} -// -//func (b *BlackGorm) UpdateByMap( -// ctx context.Context, -// ownerUserID, blockUserID string, -// args map[string]any, -//) (err error) { -// return utils.Wrap( -// b.db(ctx).Where("block_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Updates(args).Error, -// "", -// ) -//} -// -//func (b *BlackGorm) Update(ctx context.Context, blacks []*relation.BlackModel) (err error) { -// return utils.Wrap(b.db(ctx).Updates(&blacks).Error, "") -//} -// -//func (b *BlackGorm) Find( -// ctx context.Context, -// blacks []*relation.BlackModel, -//) (blackList []*relation.BlackModel, err error) { -// var where [][]any -// for _, black := range blacks { -// where = append(where, []any{black.OwnerUserID, black.BlockUserID}) -// } -// return blackList, utils.Wrap( -// b.db(ctx).Where("(owner_user_id, block_user_id) in ?", where).Find(&blackList).Error, -// "", -// ) -//} -// -//func (b *BlackGorm) Take(ctx context.Context, ownerUserID, blockUserID string) (black *relation.BlackModel, err error) { -// black = &relation.BlackModel{} -// return black, utils.Wrap( -// b.db(ctx).Where("owner_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Take(black).Error, -// "", -// ) -//} -// -//func (b *BlackGorm) FindOwnerBlacks( -// ctx context.Context, -// ownerUserID string, -// pageNumber, showNumber int32, -//) (blacks []*relation.BlackModel, total int64, err error) { -// err = b.db(ctx).Count(&total).Error -// if err != nil { -// return nil, 0, utils.Wrap(err, "") -// } -// totalUint32, blacks, err := ormutil.GormPage[relation.BlackModel]( -// b.db(ctx).Where("owner_user_id = ?", ownerUserID), -// pageNumber, -// showNumber, -// ) -// total = int64(totalUint32) -// return -//} -// -//func (b *BlackGorm) FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error) { -// return blackUserIDs, utils.Wrap( -// b.db(ctx).Where("owner_user_id = ?", ownerUserID).Pluck("block_user_id", &blackUserIDs).Error, -// "", -// ) -//} -// -//func (b *BlackGorm) FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error) { -// return blacks, errs.Wrap(b.db(ctx).Where("owner_user_id = ? and block_user_id in ?", ownerUserID, userIDs).Find(&blacks).Error) -//} diff --git a/pkg/common/db/relation/chat_log_model.go b/pkg/common/db/relation/chat_log_model.go deleted file mode 100644 index 4ff5493d2..000000000 --- a/pkg/common/db/relation/chat_log_model.go +++ /dev/null @@ -1,64 +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 relation - -// -//import ( -// "github.com/golang/protobuf/jsonpb" -// "github.com/jinzhu/copier" -// "google.golang.org/protobuf/proto" -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/protocol/constant" -// pbmsg "github.com/OpenIMSDK/protocol/msg" -// sdkws "github.com/OpenIMSDK/protocol/sdkws" -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type ChatLogGorm struct { -// *MetaDB -//} -// -//func NewChatLogGorm(db *gorm.DB) relation.ChatLogModelInterface { -// return &ChatLogGorm{NewMetaDB(db, &relation.ChatLogModel{})} -//} -// -//func (c *ChatLogGorm) Create(msg *pbmsg.MsgDataToMQ) error { -// chatLog := new(relation.ChatLogModel) -// copier.Copy(chatLog, msg.MsgData) -// switch msg.MsgData.SessionType { -// case constant.GroupChatType, constant.SuperGroupChatType: -// chatLog.RecvID = msg.MsgData.GroupID -// case constant.SingleChatType: -// chatLog.RecvID = msg.MsgData.RecvID -// } -// if msg.MsgData.ContentType >= constant.NotificationBegin && msg.MsgData.ContentType <= constant.NotificationEnd { -// var tips sdkws.TipsComm -// _ = proto.Unmarshal(msg.MsgData.Content, &tips) -// marshaler := jsonpb.Marshaler{ -// OrigName: true, -// EnumsAsInts: false, -// EmitDefaults: false, -// } -// chatLog.Content, _ = marshaler.MarshalToString(&tips) -// } else { -// chatLog.Content = string(msg.MsgData.Content) -// } -// chatLog.CreateTime = utils.UnixMillSecondToTime(msg.MsgData.CreateTime) -// chatLog.SendTime = utils.UnixMillSecondToTime(msg.MsgData.SendTime) -// return c.DB.Create(chatLog).Error -//} diff --git a/pkg/common/db/relation/conversation_model.go b/pkg/common/db/relation/conversation_model.go deleted file mode 100644 index 73cf1a80e..000000000 --- a/pkg/common/db/relation/conversation_model.go +++ /dev/null @@ -1,244 +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 relation - -// -//import ( -// "context" -// -// "github.com/OpenIMSDK/tools/errs" -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/protocol/constant" -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type ConversationGorm struct { -// *MetaDB -//} -// -//func NewConversationGorm(db *gorm.DB) relation.ConversationModelInterface { -// return &ConversationGorm{NewMetaDB(db, &relation.ConversationModel{})} -//} -// -//func (c *ConversationGorm) NewTx(tx any) relation.ConversationModelInterface { -// return &ConversationGorm{NewMetaDB(tx.(*gorm.DB), &relation.ConversationModel{})} -//} -// -//func (c *ConversationGorm) Create(ctx context.Context, conversations []*relation.ConversationModel) (err error) { -// return utils.Wrap(c.db(ctx).Create(&conversations).Error, "") -//} -// -//func (c *ConversationGorm) Delete(ctx context.Context, groupIDs []string) (err error) { -// return utils.Wrap(c.db(ctx).Where("group_id in (?)", groupIDs).Delete(&relation.ConversationModel{}).Error, "") -//} -// -//func (c *ConversationGorm) UpdateByMap( -// ctx context.Context, -// userIDList []string, -// conversationID string, -// args map[string]any, -//) (rows int64, err error) { -// result := c.db(ctx).Where("owner_user_id IN (?) and conversation_id=?", userIDList, conversationID).Updates(args) -// return result.RowsAffected, utils.Wrap(result.Error, "") -//} -// -//func (c *ConversationGorm) Update(ctx context.Context, conversation *relation.ConversationModel) (err error) { -// return utils.Wrap( -// c.db(ctx). -// Where("owner_user_id = ? and conversation_id = ?", conversation.OwnerUserID, conversation.ConversationID). -// Updates(conversation). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) Find( -// ctx context.Context, -// ownerUserID string, -// conversationIDs []string, -//) (conversations []*relation.ConversationModel, err error) { -// err = utils.Wrap( -// c.db(ctx). -// Where("owner_user_id=? and conversation_id IN (?)", ownerUserID, conversationIDs). -// Find(&conversations). -// Error, -// "", -// ) -// return conversations, err -//} -// -//func (c *ConversationGorm) Take( -// ctx context.Context, -// userID, conversationID string, -//) (conversation *relation.ConversationModel, err error) { -// cc := &relation.ConversationModel{} -// return cc, utils.Wrap( -// c.db(ctx).Where("conversation_id = ? And owner_user_id = ?", conversationID, userID).Take(cc).Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) FindUserID( -// ctx context.Context, -// userIDs []string, -// conversationIDs []string, -//) (existUserID []string, err error) { -// return existUserID, utils.Wrap( -// c.db(ctx). -// Where(" owner_user_id IN (?) and conversation_id in (?)", userIDs, conversationIDs). -// Pluck("owner_user_id", &existUserID). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) FindConversationID( -// ctx context.Context, -// userID string, -// conversationIDList []string, -//) (existConversationID []string, err error) { -// return existConversationID, utils.Wrap( -// c.db(ctx). -// Where(" conversation_id IN (?) and owner_user_id=?", conversationIDList, userID). -// Pluck("conversation_id", &existConversationID). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) FindUserIDAllConversationID( -// ctx context.Context, -// userID string, -//) (conversationIDList []string, err error) { -// return conversationIDList, utils.Wrap( -// c.db(ctx).Where("owner_user_id=?", userID).Pluck("conversation_id", &conversationIDList).Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) FindUserIDAllConversations( -// ctx context.Context, -// userID string, -//) (conversations []*relation.ConversationModel, err error) { -// return conversations, utils.Wrap(c.db(ctx).Where("owner_user_id=?", userID).Find(&conversations).Error, "") -//} -// -//func (c *ConversationGorm) FindRecvMsgNotNotifyUserIDs( -// ctx context.Context, -// groupID string, -//) (userIDs []string, err error) { -// return userIDs, utils.Wrap( -// c.db(ctx). -// Where("group_id = ? and recv_msg_opt = ?", groupID, constant.ReceiveNotNotifyMessage). -// Pluck("owner_user_id", &userIDs). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) FindSuperGroupRecvMsgNotNotifyUserIDs( -// ctx context.Context, -// groupID string, -//) (userIDs []string, err error) { -// return userIDs, utils.Wrap( -// c.db(ctx). -// Where("group_id = ? and recv_msg_opt = ? and conversation_type = ?", groupID, constant.ReceiveNotNotifyMessage, constant.SuperGroupChatType). -// Pluck("owner_user_id", &userIDs). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) GetUserRecvMsgOpt( -// ctx context.Context, -// ownerUserID, conversationID string, -//) (opt int, err error) { -// var conversation relation.ConversationModel -// return int( -// conversation.RecvMsgOpt, -// ), utils.Wrap( -// c.db(ctx). -// Where("conversation_id = ? And owner_user_id = ?", conversationID, ownerUserID). -// Select("recv_msg_opt"). -// Find(&conversation). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) GetAllConversationIDs(ctx context.Context) (conversationIDs []string, err error) { -// return conversationIDs, utils.Wrap( -// c.db(ctx).Distinct("conversation_id").Pluck("conversation_id", &conversationIDs).Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) GetAllConversationIDsNumber(ctx context.Context) (int64, error) { -// var num int64 -// err := c.db(ctx).Select("COUNT(DISTINCT conversation_id)").Model(&relation.ConversationModel{}).Count(&num).Error -// return num, errs.Wrap(err) -//} -// -//func (c *ConversationGorm) PageConversationIDs(ctx context.Context, pageNumber, showNumber int32) (conversationIDs []string, err error) { -// err = c.db(ctx).Distinct("conversation_id").Limit(int(showNumber)).Offset(int((pageNumber-1)*showNumber)).Pluck("conversation_id", &conversationIDs).Error -// err = errs.Wrap(err) -// return -//} -// -//func (c *ConversationGorm) GetConversationsByConversationID( -// ctx context.Context, -// conversationIDs []string, -//) (conversations []*relation.ConversationModel, err error) { -// return conversations, utils.Wrap( -// c.db(ctx).Where("conversation_id IN (?)", conversationIDs).Find(&conversations).Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) GetConversationIDsNeedDestruct( -// ctx context.Context, -//) (conversations []*relation.ConversationModel, err error) { -// return conversations, utils.Wrap( -// c.db(ctx). -// Where("is_msg_destruct = 1 && msg_destruct_time != 0 && (UNIX_TIMESTAMP(NOW()) > (msg_destruct_time + UNIX_TIMESTAMP(latest_msg_destruct_time)) || latest_msg_destruct_time is NULL)"). -// Find(&conversations). -// Error, -// "", -// ) -//} -// -//func (c *ConversationGorm) GetConversationRecvMsgOpt(ctx context.Context, userID string, conversationID string) (int32, error) { -// var recvMsgOpt int32 -// return recvMsgOpt, errs.Wrap( -// c.db(ctx). -// Model(&relation.ConversationModel{}). -// Where("conversation_id = ? and owner_user_id in ?", conversationID, userID). -// Pluck("recv_msg_opt", &recvMsgOpt). -// Error, -// ) -//} -// -//func (c *ConversationGorm) GetConversationNotReceiveMessageUserIDs(ctx context.Context, conversationID string) ([]string, error) { -// var userIDs []string -// return userIDs, errs.Wrap( -// c.db(ctx). -// Model(&relation.ConversationModel{}). -// Where("conversation_id = ? and recv_msg_opt <> ?", conversationID, constant.ReceiveMessage). -// Pluck("owner_user_id", &userIDs).Error, -// ) -//} diff --git a/pkg/common/db/relation/doc.go b/pkg/common/db/relation/doc.go deleted file mode 100644 index 41135ac97..000000000 --- a/pkg/common/db/relation/doc.go +++ /dev/null @@ -1,15 +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 relation // import "github.com/openimsdk/open-im-server/v3/pkg/common/db/relation" diff --git a/pkg/common/db/relation/friend_model.go b/pkg/common/db/relation/friend_model.go deleted file mode 100644 index 4bf876680..000000000 --- a/pkg/common/db/relation/friend_model.go +++ /dev/null @@ -1,193 +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 relation - -//import ( -// "context" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type FriendGorm struct { -// *MetaDB -//} -// -//func NewFriendGorm(db *gorm.DB) relation.FriendModelInterface { -// return &FriendGorm{NewMetaDB(db, &relation.FriendModel{})} -//} -// -//func (f *FriendGorm) NewTx(tx any) relation.FriendModelInterface { -// return &FriendGorm{NewMetaDB(tx.(*gorm.DB), &relation.FriendModel{})} -//} -// -//// 插入多条记录. -//func (f *FriendGorm) Create(ctx context.Context, friends []*relation.FriendModel) (err error) { -// return utils.Wrap(f.db(ctx).Create(&friends).Error, "") -//} -// -//// 删除ownerUserID指定的好友. -//func (f *FriendGorm) Delete(ctx context.Context, ownerUserID string, friendUserIDs []string) (err error) { -// err = utils.Wrap( -// f.db(ctx). -// Where("owner_user_id = ? AND friend_user_id in ( ?)", ownerUserID, friendUserIDs). -// Delete(&relation.FriendModel{}). -// Error, -// "", -// ) -// return err -//} -// -//// 更新ownerUserID单个好友信息 更新零值. -//func (f *FriendGorm) UpdateByMap( -// ctx context.Context, -// ownerUserID string, -// friendUserID string, -// args map[string]any, -//) (err error) { -// return utils.Wrap( -// f.db(ctx).Where("owner_user_id = ? AND friend_user_id = ? ", ownerUserID, friendUserID).Updates(args).Error, -// "", -// ) -//} -// -//// 更新好友信息的非零值. -//func (f *FriendGorm) Update(ctx context.Context, friends []*relation.FriendModel) (err error) { -// return utils.Wrap(f.db(ctx).Updates(&friends).Error, "") -//} -// -//// 更新好友备注(也支持零值 ). -//func (f *FriendGorm) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) { -// if remark != "" { -// return utils.Wrap( -// f.db(ctx). -// Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserID). -// Update("remark", remark). -// Error, -// "", -// ) -// } -// m := make(map[string]any, 1) -// m["remark"] = "" -// return utils.Wrap(f.db(ctx).Where("owner_user_id = ?", ownerUserID).Updates(m).Error, "") -//} -// -//// 获取单个好友信息,如没找到 返回错误. -//func (f *FriendGorm) Take( -// ctx context.Context, -// ownerUserID, friendUserID string, -//) (friend *relation.FriendModel, err error) { -// friend = &relation.FriendModel{} -// return friend, utils.Wrap( -// f.db(ctx).Where("owner_user_id = ? and friend_user_id", ownerUserID, friendUserID).Take(friend).Error, -// "", -// ) -//} -// -//// 查找好友关系,如果是双向关系,则都返回. -//func (f *FriendGorm) FindUserState( -// ctx context.Context, -// userID1, userID2 string, -//) (friends []*relation.FriendModel, err error) { -// return friends, utils.Wrap( -// f.db(ctx). -// Where("(owner_user_id = ? and friend_user_id = ?) or (owner_user_id = ? and friend_user_id = ?)", userID1, userID2, userID2, userID1). -// Find(&friends). -// Error, -// "", -// ) -//} -// -//// 获取 owner指定的好友列表 如果有friendUserIDs不存在,也不返回错误. -//func (f *FriendGorm) FindFriends( -// ctx context.Context, -// ownerUserID string, -// friendUserIDs []string, -//) (friends []*relation.FriendModel, err error) { -// return friends, utils.Wrap( -// f.db(ctx).Where("owner_user_id = ? AND friend_user_id in (?)", ownerUserID, friendUserIDs).Find(&friends).Error, -// "", -// ) -//} -// -//// 获取哪些人添加了friendUserID 如果有ownerUserIDs不存在,也不返回错误. -//func (f *FriendGorm) FindReversalFriends( -// ctx context.Context, -// friendUserID string, -// ownerUserIDs []string, -//) (friends []*relation.FriendModel, err error) { -// return friends, utils.Wrap( -// f.db(ctx).Where("friend_user_id = ? AND owner_user_id in (?)", friendUserID, ownerUserIDs).Find(&friends).Error, -// "", -// ) -//} -// -//// 获取ownerUserID好友列表 支持翻页. -//func (f *FriendGorm) FindOwnerFriends( -// ctx context.Context, -// ownerUserID string, -// pageNumber, showNumber int32, -//) (friends []*relation.FriendModel, total int64, err error) { -// err = f.DB.Model(&relation.FriendModel{}).Where("owner_user_id = ? ", ownerUserID).Count(&total).Error -// if err != nil { -// return nil, 0, utils.Wrap(err, "") -// } -// err = utils.Wrap( -// f.db(ctx). -// Where("owner_user_id = ? ", ownerUserID). -// Limit(int(showNumber)). -// Offset(int((pageNumber-1)*showNumber)). -// Find(&friends). -// Error, -// "", -// ) -// return -//} -// -//// 获取哪些人添加了friendUserID 支持翻页. -//func (f *FriendGorm) FindInWhoseFriends( -// ctx context.Context, -// friendUserID string, -// pageNumber, showNumber int32, -//) (friends []*relation.FriendModel, total int64, err error) { -// err = f.DB.Model(&relation.FriendModel{}).Where("friend_user_id = ? ", friendUserID).Count(&total).Error -// if err != nil { -// return nil, 0, utils.Wrap(err, "") -// } -// err = utils.Wrap( -// f.db(ctx). -// Where("friend_user_id = ? ", friendUserID). -// Limit(int(showNumber)). -// Offset(int((pageNumber-1)*showNumber)). -// Find(&friends). -// Error, -// "", -// ) -// return -//} -// -//func (f *FriendGorm) FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error) { -// return friendUserIDs, utils.Wrap( -// f.db(ctx). -// Model(&relation.FriendModel{}). -// Where("owner_user_id = ? ", ownerUserID). -// Pluck("friend_user_id", &friendUserIDs). -// Error, -// "", -// ) -//} diff --git a/pkg/common/db/relation/friend_request_model.go b/pkg/common/db/relation/friend_request_model.go deleted file mode 100644 index e215f8850..000000000 --- a/pkg/common/db/relation/friend_request_model.go +++ /dev/null @@ -1,154 +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 relation - -// type FriendRequestGorm struct { -// *MetaDB -// } - -// func NewFriendRequestGorm(db *gorm.DB) relation.FriendRequestModelInterface { -// return &FriendRequestGorm{NewMetaDB(db, &relation.FriendRequestModel{})} -// } - -// func (f *FriendRequestGorm) NewTx(tx any) relation.FriendRequestModelInterface { -// return &FriendRequestGorm{NewMetaDB(tx.(*gorm.DB), &relation.FriendRequestModel{})} -// } - -// // 插入多条记录. -// func (f *FriendRequestGorm) Create(ctx context.Context, friendRequests []*relation.FriendRequestModel) (err error) { -// return utils.Wrap(f.db(ctx).Create(&friendRequests).Error, "") -// } - -// // 删除记录. -// func (f *FriendRequestGorm) Delete(ctx context.Context, fromUserID, toUserID string) (err error) { -// return utils.Wrap( -// f.db(ctx). -// Where("from_user_id = ? AND to_user_id = ?", fromUserID, toUserID). -// Delete(&relation.FriendRequestModel{}). -// Error, -// "", -// ) -// } - -// // 更新零值. -// func (f *FriendRequestGorm) UpdateByMap( -// ctx context.Context, -// fromUserID string, -// toUserID string, -// args map[string]any, -// ) (err error) { -// return utils.Wrap( -// f.db(ctx). -// Model(&relation.FriendRequestModel{}). -// Where("from_user_id = ? AND to_user_id =?", fromUserID, toUserID). -// Updates(args). -// Error, -// "", -// ) -// } - -// // 更新记录 (非零值). -// func (f *FriendRequestGorm) Update(ctx context.Context, friendRequest *relation.FriendRequestModel) (err error) { -// fr2 := *friendRequest -// fr2.FromUserID = "" -// fr2.ToUserID = "" -// return utils.Wrap( -// f.db(ctx). -// Where("from_user_id = ? AND to_user_id =?", friendRequest.FromUserID, friendRequest.ToUserID). -// Updates(fr2). -// Error, -// "", -// ) -// } - -// // 获取来指定用户的好友申请 未找到 不返回错误. -// func (f *FriendRequestGorm) Find( -// ctx context.Context, -// fromUserID, toUserID string, -// ) (friendRequest *relation.FriendRequestModel, err error) { -// friendRequest = &relation.FriendRequestModel{} -// err = utils.Wrap( -// f.db(ctx).Where("from_user_id = ? and to_user_id = ?", fromUserID, toUserID).Find(friendRequest).Error, -// "", -// ) -// return friendRequest, err -// } - -// func (f *FriendRequestGorm) Take( -// ctx context.Context, -// fromUserID, toUserID string, -// ) (friendRequest *relation.FriendRequestModel, err error) { -// friendRequest = &relation.FriendRequestModel{} -// err = utils.Wrap( -// f.db(ctx).Where("from_user_id = ? and to_user_id = ?", fromUserID, toUserID).Take(friendRequest).Error, -// "", -// ) -// return friendRequest, err -// } - -// // 获取toUserID收到的好友申请列表. -// func (f *FriendRequestGorm) FindToUserID( -// ctx context.Context, -// toUserID string, -// pageNumber, showNumber int32, -// ) (friendRequests []*relation.FriendRequestModel, total int64, err error) { -// err = f.db(ctx).Model(&relation.FriendRequestModel{}).Where("to_user_id = ? ", toUserID).Count(&total).Error -// if err != nil { -// return nil, 0, utils.Wrap(err, "") -// } -// err = utils.Wrap( -// f.db(ctx). -// Where("to_user_id = ? ", toUserID). -// Limit(int(showNumber)). -// Offset(int(pageNumber-1)*int(showNumber)). -// Find(&friendRequests). -// Error, -// "", -// ) -// return -// } - -// // 获取fromUserID发出去的好友申请列表. -// func (f *FriendRequestGorm) FindFromUserID( -// ctx context.Context, -// fromUserID string, -// pageNumber, showNumber int32, -// ) (friendRequests []*relation.FriendRequestModel, total int64, err error) { -// err = f.db(ctx).Model(&relation.FriendRequestModel{}).Where("from_user_id = ? ", fromUserID).Count(&total).Error -// if err != nil { -// return nil, 0, utils.Wrap(err, "") -// } -// err = utils.Wrap( -// f.db(ctx). -// Where("from_user_id = ? ", fromUserID). -// Limit(int(showNumber)). -// Offset(int(pageNumber-1)*int(showNumber)). -// Find(&friendRequests). -// Error, -// "", -// ) -// return -// } - -// func (f *FriendRequestGorm) FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error) { -// err = utils.Wrap( -// f.db(ctx). -// Where("(from_user_id = ? AND to_user_id = ?) OR (from_user_id = ? AND to_user_id = ?)", fromUserID, toUserID, toUserID, fromUserID). -// Find(&friends). -// Error, -// "", -// ) -// return -// } diff --git a/pkg/common/db/relation/group_member_model.go b/pkg/common/db/relation/group_member_model.go deleted file mode 100644 index 93885760c..000000000 --- a/pkg/common/db/relation/group_member_model.go +++ /dev/null @@ -1,198 +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 relation - -// -//import ( -// "context" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/protocol/constant" -// "github.com/OpenIMSDK/tools/ormutil" -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//var _ relation.GroupMemberModelInterface = (*GroupMemberGorm)(nil) -// -//type GroupMemberGorm struct { -// *MetaDB -//} -// -//func NewGroupMemberDB(db *gorm.DB) relation.GroupMemberModelInterface { -// return &GroupMemberGorm{NewMetaDB(db, &relation.GroupMemberModel{})} -//} -// -//func (g *GroupMemberGorm) NewTx(tx any) relation.GroupMemberModelInterface { -// return &GroupMemberGorm{NewMetaDB(tx.(*gorm.DB), &relation.GroupMemberModel{})} -//} -// -//func (g *GroupMemberGorm) Create(ctx context.Context, groupMemberList []*relation.GroupMemberModel) (err error) { -// return utils.Wrap(g.db(ctx).Create(&groupMemberList).Error, "") -//} -// -//func (g *GroupMemberGorm) Delete(ctx context.Context, groupID string, userIDs []string) (err error) { -// return utils.Wrap( -// g.db(ctx).Where("group_id = ? and user_id in (?)", groupID, userIDs).Delete(&relation.GroupMemberModel{}).Error, -// "", -// ) -//} -// -//func (g *GroupMemberGorm) DeleteGroup(ctx context.Context, groupIDs []string) (err error) { -// return utils.Wrap(g.db(ctx).Where("group_id in (?)", groupIDs).Delete(&relation.GroupMemberModel{}).Error, "") -//} -// -//func (g *GroupMemberGorm) Update(ctx context.Context, groupID string, userID string, data map[string]any) (err error) { -// return utils.Wrap(g.db(ctx).Where("group_id = ? and user_id = ?", groupID, userID).Updates(data).Error, "") -//} -// -//func (g *GroupMemberGorm) UpdateRoleLevel( -// ctx context.Context, -// groupID string, -// userID string, -// roleLevel int32, -//) (rowsAffected int64, err error) { -// db := g.db(ctx).Where("group_id = ? and user_id = ?", groupID, userID).Updates(map[string]any{ -// "role_level": roleLevel, -// }) -// return db.RowsAffected, utils.Wrap(db.Error, "") -//} -// -//func (g *GroupMemberGorm) Find( -// ctx context.Context, -// groupIDs []string, -// userIDs []string, -// roleLevels []int32, -//) (groupMembers []*relation.GroupMemberModel, err error) { -// db := g.db(ctx) -// if len(groupIDs) > 0 { -// db = db.Where("group_id in (?)", groupIDs) -// } -// if len(userIDs) > 0 { -// db = db.Where("user_id in (?)", userIDs) -// } -// if len(roleLevels) > 0 { -// db = db.Where("role_level in (?)", roleLevels) -// } -// return groupMembers, utils.Wrap(db.Find(&groupMembers).Error, "") -//} -// -//func (g *GroupMemberGorm) Take( -// ctx context.Context, -// groupID string, -// userID string, -//) (groupMember *relation.GroupMemberModel, err error) { -// groupMember = &relation.GroupMemberModel{} -// return groupMember, utils.Wrap( -// g.db(ctx).Where("group_id = ? and user_id = ?", groupID, userID).Take(groupMember).Error, -// "", -// ) -//} -// -//func (g *GroupMemberGorm) TakeOwner( -// ctx context.Context, -// groupID string, -//) (groupMember *relation.GroupMemberModel, err error) { -// groupMember = &relation.GroupMemberModel{} -// return groupMember, utils.Wrap( -// g.db(ctx).Where("group_id = ? and role_level = ?", groupID, constant.GroupOwner).Take(groupMember).Error, -// "", -// ) -//} -// -//func (g *GroupMemberGorm) SearchMember( -// ctx context.Context, -// keyword string, -// groupIDs []string, -// userIDs []string, -// roleLevels []int32, -// pageNumber, showNumber int32, -//) (total uint32, groupList []*relation.GroupMemberModel, err error) { -// db := g.db(ctx) -// ormutil.GormIn(&db, "group_id", groupIDs) -// ormutil.GormIn(&db, "user_id", userIDs) -// ormutil.GormIn(&db, "role_level", roleLevels) -// return ormutil.GormSearch[relation.GroupMemberModel](db, []string{"nickname"}, keyword, pageNumber, showNumber) -//} -// -//func (g *GroupMemberGorm) MapGroupMemberNum( -// ctx context.Context, -// groupIDs []string, -//) (count map[string]uint32, err error) { -// return ormutil.MapCount(g.db(ctx).Where("group_id in (?)", groupIDs), "group_id") -//} -// -//func (g *GroupMemberGorm) FindJoinUserID( -// ctx context.Context, -// groupIDs []string, -//) (groupUsers map[string][]string, err error) { -// var groupMembers []*relation.GroupMemberModel -// if err := g.db(ctx).Select("group_id, user_id").Where("group_id in (?)", groupIDs).Find(&groupMembers).Error; err != nil { -// return nil, utils.Wrap(err, "") -// } -// groupUsers = make(map[string][]string) -// for _, item := range groupMembers { -// v, ok := groupUsers[item.GroupID] -// if !ok { -// groupUsers[item.GroupID] = []string{item.UserID} -// } else { -// groupUsers[item.GroupID] = append(v, item.UserID) -// } -// } -// return groupUsers, nil -//} -// -//func (g *GroupMemberGorm) FindMemberUserID(ctx context.Context, groupID string) (userIDs []string, err error) { -// return userIDs, utils.Wrap(g.db(ctx).Where("group_id = ?", groupID).Pluck("user_id", &userIDs).Error, "") -//} -// -//func (g *GroupMemberGorm) FindUserJoinedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) { -// return groupIDs, utils.Wrap(g.db(ctx).Where("user_id = ?", userID).Pluck("group_id", &groupIDs).Error, "") -//} -// -//func (g *GroupMemberGorm) TakeGroupMemberNum(ctx context.Context, groupID string) (count int64, err error) { -// return count, utils.Wrap(g.db(ctx).Where("group_id = ?", groupID).Count(&count).Error, "") -//} -// -//func (g *GroupMemberGorm) FindUsersJoinedGroupID(ctx context.Context, userIDs []string) (map[string][]string, error) { -// var groupMembers []*relation.GroupMemberModel -// err := g.db(ctx).Select("group_id, user_id").Where("user_id IN (?)", userIDs).Find(&groupMembers).Error -// if err != nil { -// return nil, err -// } -// result := make(map[string][]string) -// for _, groupMember := range groupMembers { -// v, ok := result[groupMember.UserID] -// if !ok { -// result[groupMember.UserID] = []string{groupMember.GroupID} -// } else { -// result[groupMember.UserID] = append(v, groupMember.GroupID) -// } -// } -// return result, nil -//} -// -//func (g *GroupMemberGorm) FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error) { -// return groupIDs, utils.Wrap( -// g.db(ctx). -// Model(&relation.GroupMemberModel{}). -// Where("user_id = ? and (role_level = ? or role_level = ?)", userID, constant.GroupOwner, constant.GroupAdmin). -// Pluck("group_id", &groupIDs). -// Error, -// "", -// ) -//} diff --git a/pkg/common/db/relation/group_model.go b/pkg/common/db/relation/group_model.go deleted file mode 100644 index 1b07a4072..000000000 --- a/pkg/common/db/relation/group_model.go +++ /dev/null @@ -1,106 +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 relation - -//import ( -// "context" -// "time" -// -// "github.com/OpenIMSDK/protocol/constant" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/tools/errs" -// "github.com/OpenIMSDK/tools/ormutil" -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//var _ relation.GroupModelInterface = (*GroupGorm)(nil) -// -//type GroupGorm struct { -// *MetaDB -//} -// -//func NewGroupDB(db *gorm.DB) relation.GroupModelInterface { -// return &GroupGorm{NewMetaDB(db, &relation.GroupModel{})} -//} -// -//func (g *GroupGorm) NewTx(tx any) relation.GroupModelInterface { -// return &GroupGorm{NewMetaDB(tx.(*gorm.DB), &relation.GroupModel{})} -//} -// -//func (g *GroupGorm) Create(ctx context.Context, groups []*relation.GroupModel) (err error) { -// return utils.Wrap(g.DB.Create(&groups).Error, "") -//} -// -//func (g *GroupGorm) UpdateMap(ctx context.Context, groupID string, args map[string]any) (err error) { -// return utils.Wrap(g.DB.Where("group_id = ?", groupID).Model(&relation.GroupModel{}).Updates(args).Error, "") -//} -// -//func (g *GroupGorm) UpdateStatus(ctx context.Context, groupID string, status int32) (err error) { -// return utils.Wrap(g.DB.Where("group_id = ?", groupID).Model(&relation.GroupModel{}).Updates(map[string]any{"status": status}).Error, "") -//} -// -//func (g *GroupGorm) Find(ctx context.Context, groupIDs []string) (groups []*relation.GroupModel, err error) { -// return groups, utils.Wrap(g.DB.Where("group_id in (?)", groupIDs).Find(&groups).Error, "") -//} -// -//func (g *GroupGorm) Take(ctx context.Context, groupID string) (group *relation.GroupModel, err error) { -// group = &relation.GroupModel{} -// return group, utils.Wrap(g.DB.Where("group_id = ?", groupID).Take(group).Error, "") -//} -// -//func (g *GroupGorm) Search(ctx context.Context, keyword string, pageNumber, showNumber int32) (total uint32, groups []*relation.GroupModel, err error) { -// db := g.DB -// db = db.WithContext(ctx).Where("status!=?", constant.GroupStatusDismissed) -// return ormutil.GormSearch[relation.GroupModel](db, []string{"name"}, keyword, pageNumber, showNumber) -//} -// -//func (g *GroupGorm) GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) { -// return groupIDs, utils.Wrap(g.DB.Model(&relation.GroupModel{}).Where("group_type = ? ", groupType).Pluck("group_id", &groupIDs).Error, "") -//} -// -//func (g *GroupGorm) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { -// db := g.db(ctx).Model(&relation.GroupModel{}) -// if before != nil { -// db = db.Where("create_time < ?", before) -// } -// if err := db.Count(&count).Error; err != nil { -// return 0, err -// } -// return count, nil -//} -// -//func (g *GroupGorm) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { -// var res []struct { -// Date time.Time `gorm:"column:date"` -// Count int64 `gorm:"column:count"` -// } -// err := g.db(ctx).Model(&relation.GroupModel{}).Select("DATE(create_time) AS date, count(1) AS count").Where("create_time >= ? and create_time < ?", start, end).Group("date").Find(&res).Error -// if err != nil { -// return nil, errs.Wrap(err) -// } -// v := make(map[string]int64) -// for _, r := range res { -// v[r.Date.Format("2006-01-02")] = r.Count -// } -// return v, nil -//} -// -//func (g *GroupGorm) FindNotDismissedGroup(ctx context.Context, groupIDs []string) (groups []*relation.GroupModel, err error) { -// return groups, utils.Wrap(g.DB.Where("group_id in (?) and status != ?", groupIDs, constant.GroupStatusDismissed).Find(&groups).Error, "") -//} diff --git a/pkg/common/db/relation/group_request_model.go b/pkg/common/db/relation/group_request_model.go deleted file mode 100644 index aa601aaba..000000000 --- a/pkg/common/db/relation/group_request_model.go +++ /dev/null @@ -1,119 +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 relation - -// -//import ( -// "context" -// -// "github.com/OpenIMSDK/tools/ormutil" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type GroupRequestGorm struct { -// *MetaDB -//} -// -//func NewGroupRequest(db *gorm.DB) relation.GroupRequestModelInterface { -// return &GroupRequestGorm{ -// NewMetaDB(db, &relation.GroupRequestModel{}), -// } -//} -// -//func (g *GroupRequestGorm) NewTx(tx any) relation.GroupRequestModelInterface { -// return &GroupRequestGorm{NewMetaDB(tx.(*gorm.DB), &relation.GroupRequestModel{})} -//} -// -//func (g *GroupRequestGorm) Create(ctx context.Context, groupRequests []*relation.GroupRequestModel) (err error) { -// return utils.Wrap(g.DB.WithContext(ctx).Create(&groupRequests).Error, utils.GetSelfFuncName()) -//} -// -//func (g *GroupRequestGorm) Delete(ctx context.Context, groupID string, userID string) (err error) { -// return utils.Wrap( -// g.DB.WithContext(ctx). -// Where("group_id = ? and user_id = ? ", groupID, userID). -// Delete(&relation.GroupRequestModel{}). -// Error, -// utils.GetSelfFuncName(), -// ) -//} -// -//func (g *GroupRequestGorm) UpdateHandler( -// ctx context.Context, -// groupID string, -// userID string, -// handledMsg string, -// handleResult int32, -//) (err error) { -// return utils.Wrap( -// g.DB.WithContext(ctx). -// Model(&relation.GroupRequestModel{}). -// Where("group_id = ? and user_id = ? ", groupID, userID). -// Updates(map[string]any{ -// "handle_msg": handledMsg, -// "handle_result": handleResult, -// }). -// Error, -// utils.GetSelfFuncName(), -// ) -//} -// -//func (g *GroupRequestGorm) Take( -// ctx context.Context, -// groupID string, -// userID string, -//) (groupRequest *relation.GroupRequestModel, err error) { -// groupRequest = &relation.GroupRequestModel{} -// return groupRequest, utils.Wrap( -// g.DB.WithContext(ctx).Where("group_id = ? and user_id = ? ", groupID, userID).Take(groupRequest).Error, -// utils.GetSelfFuncName(), -// ) -//} -// -//func (g *GroupRequestGorm) Page( -// ctx context.Context, -// userID string, -// pageNumber, showNumber int32, -//) (total uint32, groups []*relation.GroupRequestModel, err error) { -// return ormutil.GormSearch[relation.GroupRequestModel]( -// g.DB.WithContext(ctx).Where("user_id = ?", userID), -// nil, -// "", -// pageNumber, -// showNumber, -// ) -//} -// -//func (g *GroupRequestGorm) PageGroup( -// ctx context.Context, -// groupIDs []string, -// pageNumber, showNumber int32, -//) (total uint32, groups []*relation.GroupRequestModel, err error) { -// return ormutil.GormPage[relation.GroupRequestModel]( -// g.DB.WithContext(ctx).Where("group_id in ?", groupIDs), -// pageNumber, -// showNumber, -// ) -//} -// -//func (g *GroupRequestGorm) FindGroupRequests(ctx context.Context, groupID string, userIDs []string) (total int64, groupRequests []*relation.GroupRequestModel, err error) { -// err = g.DB.WithContext(ctx).Where("group_id = ? and user_id in ?", groupID, userIDs).Find(&groupRequests).Error -// return int64(len(groupRequests)), groupRequests, utils.Wrap(err, utils.GetSelfFuncName()) -//} diff --git a/pkg/common/db/relation/log_model.go b/pkg/common/db/relation/log_model.go deleted file mode 100644 index f5d8a9fae..000000000 --- a/pkg/common/db/relation/log_model.go +++ /dev/null @@ -1,49 +0,0 @@ -package relation - -//import ( -// "context" -// "time" -// -// "github.com/OpenIMSDK/tools/errs" -// "github.com/OpenIMSDK/tools/ormutil" -// "gorm.io/gorm" -// -// relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type LogGorm struct { -// db *gorm.DB -//} -// -//func (l *LogGorm) Create(ctx context.Context, log []*relationtb.Log) error { -// return errs.Wrap(l.db.WithContext(ctx).Create(log).Error) -//} -// -//func (l *LogGorm) Search(ctx context.Context, keyword string, start time.Time, end time.Time, pageNumber int32, showNumber int32) (uint32, []*relationtb.Log, error) { -// db := l.db.WithContext(ctx).Where("create_time >= ?", start) -// if end.UnixMilli() != 0 { -// db = l.db.WithContext(ctx).Where("create_time <= ?", end) -// } -// db = db.Order("create_time desc") -// return ormutil.GormSearch[relationtb.Log](db, []string{"user_id"}, keyword, pageNumber, showNumber) -//} -// -//func (l *LogGorm) Delete(ctx context.Context, logIDs []string, userID string) error { -// if userID == "" { -// return errs.Wrap(l.db.WithContext(ctx).Where("log_id in ?", logIDs).Delete(&relationtb.Log{}).Error) -// } -// return errs.Wrap(l.db.WithContext(ctx).Where("log_id in ? and user_id=?", logIDs, userID).Delete(&relationtb.Log{}).Error) -//} -// -//func (l *LogGorm) Get(ctx context.Context, logIDs []string, userID string) ([]*relationtb.Log, error) { -// var logs []*relationtb.Log -// if userID == "" { -// return logs, errs.Wrap(l.db.WithContext(ctx).Where("log_id in ?", logIDs).Find(&logs).Error) -// } -// return logs, errs.Wrap(l.db.WithContext(ctx).Where("log_id in ? and user_id=?", logIDs, userID).Find(&logs).Error) -//} -// -//func NewLogGorm(db *gorm.DB) relationtb.LogInterface { -// db.AutoMigrate(&relationtb.Log{}) -// return &LogGorm{db: db} -//} diff --git a/pkg/common/db/relation/object_model.go b/pkg/common/db/relation/object_model.go deleted file mode 100644 index 67b59969b..000000000 --- a/pkg/common/db/relation/object_model.go +++ /dev/null @@ -1,54 +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 relation - -// -//import ( -// "context" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/tools/errs" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type ObjectInfoGorm struct { -// *MetaDB -//} -// -//func NewObjectInfo(db *gorm.DB) relation.ObjectInfoModelInterface { -// return &ObjectInfoGorm{ -// NewMetaDB(db, &relation.ObjectModel{}), -// } -//} -// -//func (o *ObjectInfoGorm) NewTx(tx any) relation.ObjectInfoModelInterface { -// return &ObjectInfoGorm{ -// NewMetaDB(tx.(*gorm.DB), &relation.ObjectModel{}), -// } -//} -// -//func (o *ObjectInfoGorm) SetObject(ctx context.Context, obj *relation.ObjectModel) (err error) { -// if err := o.DB.WithContext(ctx).Where("name = ?", obj.Name).FirstOrCreate(obj).Error; err != nil { -// return errs.Wrap(err) -// } -// return nil -//} -// -//func (o *ObjectInfoGorm) Take(ctx context.Context, name string) (info *relation.ObjectModel, err error) { -// info = &relation.ObjectModel{} -// return info, errs.Wrap(o.DB.WithContext(ctx).Where("name = ?", name).Take(info).Error) -//} diff --git a/pkg/common/db/relation/user_model.go b/pkg/common/db/relation/user_model.go deleted file mode 100644 index 100bfcf13..000000000 --- a/pkg/common/db/relation/user_model.go +++ /dev/null @@ -1,138 +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 relation - -// -//import ( -// "context" -// "time" -// -// "github.com/OpenIMSDK/tools/errs" -// -// "gorm.io/gorm" -// -// "github.com/OpenIMSDK/tools/utils" -// -// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" -//) -// -//type UserGorm struct { -// *MetaDB -//} -// -//func NewUserGorm(db *gorm.DB) relation.UserModelInterface { -// //return &UserGorm{NewMetaDB(db, &relation.UserModel{})} -// return nil -//} -// -//// 插入多条. -//func (u *UserGorm) Create(ctx context.Context, users []*relation.UserModel) (err error) { -// return utils.Wrap(u.db(ctx).Create(&users).Error, "") -//} -// -//// 更新用户信息 零值. -//func (u *UserGorm) UpdateByMap(ctx context.Context, userID string, args map[string]any) (err error) { -// return utils.Wrap(u.db(ctx).Model(&relation.UserModel{}).Where("user_id = ?", userID).Updates(args).Error, "") -//} -// -//// 更新多个用户信息 非零值. -//func (u *UserGorm) Update(ctx context.Context, user *relation.UserModel) (err error) { -// return utils.Wrap(u.db(ctx).Model(user).Updates(user).Error, "") -//} -// -//// 获取指定用户信息 不存在,也不返回错误. -//func (u *UserGorm) Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error) { -// err = utils.Wrap(u.db(ctx).Where("user_id in (?)", userIDs).Find(&users).Error, "") -// return users, err -//} -// -//// 获取某个用户信息 不存在,则返回错误. -//func (u *UserGorm) Take(ctx context.Context, userID string) (user *relation.UserModel, err error) { -// user = &relation.UserModel{} -// err = utils.Wrap(u.db(ctx).Where("user_id = ?", userID).Take(&user).Error, "") -// return user, err -//} -// -//// 获取用户信息 不存在,不返回错误. -//func (u *UserGorm) Page( -// ctx context.Context, -// pageNumber, showNumber int32, -//) (users []*relation.UserModel, count int64, err error) { -// err = utils.Wrap(u.db(ctx).Count(&count).Error, "") -// if err != nil { -// return -// } -// err = utils.Wrap( -// u.db(ctx). -// Limit(int(showNumber)). -// Offset(int((pageNumber-1)*showNumber)). -// Find(&users). -// Order("create_time DESC"). -// Error, -// "", -// ) -// return -//} -// -//// 获取所有用户ID. -//func (u *UserGorm) GetAllUserID(ctx context.Context, pageNumber, showNumber int32) (userIDs []string, err error) { -// if pageNumber == 0 || showNumber == 0 { -// return userIDs, errs.Wrap(u.db(ctx).Pluck("user_id", &userIDs).Error) -// } else { -// return userIDs, errs.Wrap(u.db(ctx).Limit(int(showNumber)).Offset(int((pageNumber-1)*showNumber)).Pluck("user_id", &userIDs).Error) -// } -//} -// -//func (u *UserGorm) GetUserGlobalRecvMsgOpt(ctx context.Context, userID string) (opt int, err error) { -// err = u.db(ctx).Model(&relation.UserModel{}).Where("user_id = ?", userID).Pluck("global_recv_msg_opt", &opt).Error -// return opt, err -//} -// -//func (u *UserGorm) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) { -// db := u.db(ctx).Model(&relation.UserModel{}) -// if before != nil { -// db = db.Where("create_time < ?", before) -// } -// if err := db.Count(&count).Error; err != nil { -// return 0, err -// } -// return count, nil -//} -// -//func (u *UserGorm) CountRangeEverydayTotal( -// ctx context.Context, -// start time.Time, -// end time.Time, -//) (map[string]int64, error) { -// var res []struct { -// Date time.Time `gorm:"column:date"` -// Count int64 `gorm:"column:count"` -// } -// err := u.db(ctx). -// Model(&relation.UserModel{}). -// Select("DATE(create_time) AS date, count(1) AS count"). -// Where("create_time >= ? and create_time < ?", start, end). -// Group("date"). -// Find(&res). -// Error -// if err != nil { -// return nil, errs.Wrap(err) -// } -// v := make(map[string]int64) -// for _, r := range res { -// v[r.Date.Format("2006-01-02")] = r.Count -// } -// return v, nil -//} diff --git a/pkg/common/db/table/relation/friend.go b/pkg/common/db/table/relation/friend.go index b98ad3218..457e0b35c 100644 --- a/pkg/common/db/table/relation/friend.go +++ b/pkg/common/db/table/relation/friend.go @@ -18,20 +18,17 @@ import ( "context" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "time" - - "go.mongodb.org/mongo-driver/bson/primitive" ) // FriendModel represents the data structure for a friend relationship in MongoDB. type FriendModel struct { - ID primitive.ObjectID `bson:"_id,omitempty"` - OwnerUserID string `bson:"owner_user_id"` - FriendUserID string `bson:"friend_user_id"` - Remark string `bson:"remark"` - CreateTime time.Time `bson:"create_time"` - AddSource int32 `bson:"add_source"` - OperatorUserID string `bson:"operator_user_id"` - Ex string `bson:"ex"` + OwnerUserID string `bson:"owner_user_id"` + FriendUserID string `bson:"friend_user_id"` + Remark string `bson:"remark"` + CreateTime time.Time `bson:"create_time"` + AddSource int32 `bson:"add_source"` + OperatorUserID string `bson:"operator_user_id"` + Ex string `bson:"ex"` } // FriendModelInterface defines the operations for managing friends in MongoDB. diff --git a/pkg/common/db/table/relation/log.go b/pkg/common/db/table/relation/log.go index 137bd1c2a..1cc3b0bdf 100644 --- a/pkg/common/db/table/relation/log.go +++ b/pkg/common/db/table/relation/log.go @@ -6,7 +6,7 @@ import ( "time" ) -type Log struct { +type LogModel struct { LogID string `bson:"log_id"` Platform string `bson:"platform"` UserID string `bson:"user_id"` @@ -19,8 +19,8 @@ type Log struct { } type LogInterface interface { - Create(ctx context.Context, log []*Log) error - Search(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*Log, error) + Create(ctx context.Context, log []*LogModel) error + Search(ctx context.Context, keyword string, start time.Time, end time.Time, pagination pagination.Pagination) (int64, []*LogModel, error) Delete(ctx context.Context, logID []string, userID string) error - Get(ctx context.Context, logIDs []string, userID string) ([]*Log, error) + Get(ctx context.Context, logIDs []string, userID string) ([]*LogModel, error) } diff --git a/tools/data-conversion/openim/mysql/v3/log.go b/tools/data-conversion/openim/mysql/v3/log.go index 72d0fa64e..5904a790e 100644 --- a/tools/data-conversion/openim/mysql/v3/log.go +++ b/tools/data-conversion/openim/mysql/v3/log.go @@ -17,6 +17,10 @@ type Log struct { Ex string `gorm:"column:ex;type varchar(255)"` } +func (Log) TableName() string { + return "logs" +} + type LogInterface interface { Create(ctx context.Context, log []*Log) error Search(ctx context.Context, keyword string, start time.Time, end time.Time, pageNumber int32, showNumber int32) (uint32, []*Log, error) diff --git a/tools/mysql2mongo/internal/mongo.go b/tools/mysql2mongo/internal/mongo.go new file mode 100644 index 000000000..5bf0569ce --- /dev/null +++ b/tools/mysql2mongo/internal/mongo.go @@ -0,0 +1 @@ +package internal diff --git a/tools/mysql2mongo/internal/mysql.go b/tools/mysql2mongo/internal/mysql.go new file mode 100644 index 000000000..5bf0569ce --- /dev/null +++ b/tools/mysql2mongo/internal/mysql.go @@ -0,0 +1 @@ +package internal diff --git a/tools/mysql2mongo/main.go b/tools/mysql2mongo/main.go new file mode 100644 index 000000000..aada8a10c --- /dev/null +++ b/tools/mysql2mongo/main.go @@ -0,0 +1,295 @@ +package main + +import ( + "context" + "errors" + "fmt" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" + mongoModel "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation" + mysqlModel "github.com/openimsdk/open-im-server/v3/tools/data-conversion/openim/mysql/v3" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "log" + "reflect" +) + +func main() { + var ( + mysqlUsername = "root" // mysql用户名 + mysqlPassword = "openIM123" // mysql密码 + mysqlAddr = "127.0.0.1:13306" // mysql地址 + mysqlDatabase = "openIM_v3" // mysql数据库名字 + ) + + var s3 = "minio" // 文件储存方式 minio, cos, oss + + var ( + mongoUsername = "root" // mysql用户名 + mongoPassword = "openIM123" // mysql密码 + mongoHosts = "127.0.0.1:13306" // mysql地址 + mongoDatabase = "openIM_v3" // mysql数据库名字 + ) + + mysqlAddr = "172.16.8.142:13306" + mongoHosts = "172.16.8.142:37017" + + mysqlDSN := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", mysqlUsername, mysqlPassword, mysqlAddr, mysqlDatabase) + mysqlDB, err := gorm.Open(mysql.Open(mysqlDSN), &gorm.Config{Logger: logger.Discard}) + if err != nil { + log.Println("open mysql db failed", err) + return + } + log.Println("open mysql db success") + var mongoURI string + if mongoPassword != "" && mongoUsername != "" { + mongoURI = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d&authSource=admin", + mongoUsername, mongoPassword, mongoHosts, + mongoDatabase, 100) + } else { + mongoURI = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d&authSource=admin", mongoHosts, mongoDatabase, 100) + } + mongoClient, err := mongo.Connect(context.Background(), options.Client().ApplyURI(mongoURI)) + if err != nil { + log.Println("open mongo db failed", err) + return + } + log.Println("open mongo db success") + mongoDB := mongoClient.Database(mongoDatabase) + + c := convert{} + + var tasks []func() error + tasks = append(tasks, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewUserMongo, c.User) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewFriendMongo, c.Friend) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewFriendRequestMongo, c.FriendRequest) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewBlackMongo, c.Black) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewGroupMongo, c.Group) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewGroupMember, c.GroupMember) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewGroupRequestMgo, c.GroupRequest) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewConversationMongo, c.Conversation) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewS3Mongo, c.Object(s3)) }, + func() error { return newTask(mysqlDB, mongoDB, mgo.NewLogMongo, c.Log) }, + ) + + for _, task := range tasks { + if err := task(); err != nil { + log.Println(err) + return + } + } +} + +type convert struct{} + +func (convert) User(v mysqlModel.UserModel) mongoModel.UserModel { + return mongoModel.UserModel{ + UserID: v.UserID, + Nickname: v.Nickname, + FaceURL: v.FaceURL, + Ex: v.Ex, + AppMangerLevel: v.AppMangerLevel, + GlobalRecvMsgOpt: v.GlobalRecvMsgOpt, + CreateTime: v.CreateTime, + } +} + +func (convert) Friend(v mysqlModel.FriendModel) mongoModel.FriendModel { + return mongoModel.FriendModel{ + OwnerUserID: v.OwnerUserID, + FriendUserID: v.FriendUserID, + Remark: v.Remark, + CreateTime: v.CreateTime, + AddSource: v.AddSource, + OperatorUserID: v.OperatorUserID, + Ex: v.Ex, + } +} + +func (convert) FriendRequest(v mysqlModel.FriendRequestModel) mongoModel.FriendRequestModel { + return mongoModel.FriendRequestModel{ + FromUserID: v.FromUserID, + ToUserID: v.ToUserID, + HandleResult: v.HandleResult, + ReqMsg: v.ReqMsg, + CreateTime: v.CreateTime, + HandlerUserID: v.HandlerUserID, + HandleMsg: v.HandleMsg, + HandleTime: v.HandleTime, + Ex: v.Ex, + } +} + +func (convert) Black(v mysqlModel.BlackModel) mongoModel.BlackModel { + return mongoModel.BlackModel{ + OwnerUserID: v.OwnerUserID, + BlockUserID: v.BlockUserID, + CreateTime: v.CreateTime, + AddSource: v.AddSource, + OperatorUserID: v.OperatorUserID, + Ex: v.Ex, + } +} + +func (convert) Group(v mysqlModel.GroupModel) mongoModel.GroupModel { + return mongoModel.GroupModel{ + GroupID: v.GroupID, + GroupName: v.GroupName, + Notification: v.Notification, + Introduction: v.Introduction, + FaceURL: v.FaceURL, + CreateTime: v.CreateTime, + Ex: v.Ex, + Status: v.Status, + CreatorUserID: v.CreatorUserID, + GroupType: v.GroupType, + NeedVerification: v.NeedVerification, + LookMemberInfo: v.LookMemberInfo, + ApplyMemberFriend: v.ApplyMemberFriend, + NotificationUpdateTime: v.NotificationUpdateTime, + NotificationUserID: v.NotificationUserID, + } +} + +func (convert) GroupMember(v mysqlModel.GroupMemberModel) mongoModel.GroupMemberModel { + return mongoModel.GroupMemberModel{ + GroupID: v.GroupID, + UserID: v.UserID, + Nickname: v.Nickname, + FaceURL: v.FaceURL, + RoleLevel: v.RoleLevel, + JoinTime: v.JoinTime, + JoinSource: v.JoinSource, + InviterUserID: v.InviterUserID, + OperatorUserID: v.OperatorUserID, + MuteEndTime: v.MuteEndTime, + Ex: v.Ex, + } +} + +func (convert) GroupRequest(v mysqlModel.GroupRequestModel) mongoModel.GroupRequestModel { + return mongoModel.GroupRequestModel{ + UserID: v.UserID, + GroupID: v.GroupID, + HandleResult: v.HandleResult, + ReqMsg: v.ReqMsg, + HandledMsg: v.HandledMsg, + ReqTime: v.ReqTime, + HandleUserID: v.HandleUserID, + HandledTime: v.HandledTime, + JoinSource: v.JoinSource, + InviterUserID: v.InviterUserID, + Ex: v.Ex, + } +} + +func (convert) Conversation(v mysqlModel.ConversationModel) mongoModel.ConversationModel { + return mongoModel.ConversationModel{ + OwnerUserID: v.OwnerUserID, + ConversationID: v.ConversationID, + ConversationType: v.ConversationType, + UserID: v.UserID, + GroupID: v.GroupID, + RecvMsgOpt: v.RecvMsgOpt, + IsPinned: v.IsPinned, + IsPrivateChat: v.IsPrivateChat, + BurnDuration: v.BurnDuration, + GroupAtType: v.GroupAtType, + AttachedInfo: v.AttachedInfo, + Ex: v.Ex, + MaxSeq: v.MaxSeq, + MinSeq: v.MinSeq, + CreateTime: v.CreateTime, + IsMsgDestruct: v.IsMsgDestruct, + MsgDestructTime: v.MsgDestructTime, + LatestMsgDestructTime: v.LatestMsgDestructTime, + } +} + +func (convert) Object(engine string) func(v mysqlModel.ObjectModel) mongoModel.ObjectModel { + return func(v mysqlModel.ObjectModel) mongoModel.ObjectModel { + return mongoModel.ObjectModel{ + Name: v.Name, + UserID: v.UserID, + Hash: v.Hash, + Engine: engine, + Key: v.Key, + Size: v.Size, + ContentType: v.ContentType, + Group: v.Cause, + CreateTime: v.CreateTime, + } + } +} + +func (convert) Log(v mysqlModel.Log) mongoModel.LogModel { + return mongoModel.LogModel{ + LogID: v.LogID, + Platform: v.Platform, + UserID: v.UserID, + CreateTime: v.CreateTime, + Url: v.Url, + FileName: v.FileName, + SystemType: v.SystemType, + Version: v.Version, + Ex: v.Ex, + } +} + +func newTask[MYSQLTABLE interface{ TableName() string }, MONGOMODEL any, MONGOTABLE any](gormDB *gorm.DB, mongoDB *mongo.Database, mongoDBInit func(db *mongo.Database) (MONGOMODEL, error), convert func(v MYSQLTABLE) MONGOTABLE) error { + obj, err := mongoDBInit(mongoDB) + if err != nil { + return err + } + var zero MYSQLTABLE + tableName := zero.TableName() + coll, err := getColl(obj) + if err != nil { + return fmt.Errorf("get mongo collection %s failed, err: %w", tableName, err) + } + var count int + defer func() { + log.Printf("convert %s %d records", tableName, count) + }() + const batch = 100 + for page := 0; ; page++ { + var res []MYSQLTABLE + if err := gormDB.Find(&res).Limit(batch).Offset(page * batch).Error; err != nil { + return fmt.Errorf("find table %s failed, err: %w", tableName, err) + } + if len(res) == 0 { + return nil + } + temp := make([]any, len(res)) + for i := range res { + temp[i] = convert(res[i]) + } + if _, err := coll.InsertMany(context.Background(), temp); err != nil { + return err + } + count += len(res) + if len(res) < batch { + return nil + } + } +} + +func getColl(obj any) (_ *mongo.Collection, err error) { + defer func() { + if e := recover(); e != nil { + err = fmt.Errorf("not found %+v", e) + } + }() + stu := reflect.ValueOf(obj).Elem() + typ := reflect.TypeOf(&mongo.Collection{}).String() + for i := 0; i < stu.NumField(); i++ { + field := stu.Field(i) + if field.Type().String() == typ { + return (*mongo.Collection)(field.UnsafePointer()), nil + } + } + return nil, errors.New("not found") +} diff --git a/tools/mysql2mongo/main_test.go b/tools/mysql2mongo/main_test.go new file mode 100644 index 000000000..68525acda --- /dev/null +++ b/tools/mysql2mongo/main_test.go @@ -0,0 +1,35 @@ +package main + +import ( + "errors" + "github.com/openimsdk/open-im-server/v3/pkg/common/db/mgo" + "go.mongodb.org/mongo-driver/mongo" + "reflect" + "testing" +) + +func getColl1(obj any) (_ *mongo.Collection, err error) { + defer func() { + if e := recover(); e != nil { + err = errors.New("not found") + } + }() + stu := reflect.ValueOf(obj).Elem() + typ := reflect.TypeOf(&mongo.Collection{}).String() + for i := 0; i < stu.NumField(); i++ { + field := stu.Field(i) + if field.Type().String() == typ { + return (*mongo.Collection)(field.UnsafePointer()), nil + } + } + return nil, errors.New("not found") +} + +func TestName(t *testing.T) { + coll, err := getColl1(&mgo.GroupMgo{}) + if err != nil { + t.Fatal(err) + } + t.Log(coll) + +}