pull/1508/head
withchao 2 years ago
parent 0aba7d60a1
commit 57399066c3

@ -17,7 +17,7 @@ package conversation
import ( import (
"context" "context"
"errors" "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" 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/common/db/unrelation"
@ -57,7 +57,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
if err != nil { if err != nil {
return err return err
} }
conversationDB, err := newmgo.NewConversationMongo(mongo.GetDatabase()) conversationDB, err := mgo.NewConversationMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }

@ -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/cache"
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller" "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" 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/common/db/unrelation"
"github.com/openimsdk/open-im-server/v3/pkg/rpcclient/notification" "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 return err
} }
friendMongoDB, err := newmgo.NewFriendMongo(mongo.GetDatabase()) friendMongoDB, err := mgo.NewFriendMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
friendRequestMongoDB, err := newmgo.NewFriendRequestMongo(mongo.GetDatabase()) friendRequestMongoDB, err := mgo.NewFriendRequestMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
blackMongoDB, err := newmgo.NewBlackMongo(mongo.GetDatabase()) blackMongoDB, err := mgo.NewBlackMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }

@ -1,22 +1,19 @@
package group package friend
import ( import (
"context" "context"
"github.com/OpenIMSDK/protocol/constant" "github.com/OpenIMSDK/protocol/constant"
"github.com/OpenIMSDK/protocol/group"
"github.com/OpenIMSDK/protocol/wrapperspb"
"github.com/OpenIMSDK/tools/log" "github.com/OpenIMSDK/tools/log"
"github.com/openimsdk/open-im-server/v3/pkg/common/config" "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/cache"
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller" "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" 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/common/db/unrelation"
"github.com/openimsdk/open-im-server/v3/pkg/rpcclient/grouphash"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"net" "net"
"testing" "testing"
"time"
) )
var ( var (
@ -24,9 +21,11 @@ var (
mgo *unrelation.Mongo mgo *unrelation.Mongo
ctx context.Context ctx context.Context
groupDB *newmgo.GroupMgo friendDB *mgo.FriendMgo
memberDB *newmgo.GroupMemberMgo friendRequestDB *mgo.FriendRequestMgo
gs *groupServer blackDB *mgo.BlackMgo
friendDatabase controller.FriendDatabase
) )
func InitDB() error { func InitDB() error {
@ -72,23 +71,30 @@ func InitDB() error {
panic(err) panic(err)
} }
g, err := newmgo.NewGroupMongo(mgo.GetDatabase()) a, err := mgo.NewFriendMongo(mgo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
gm, err := newmgo.NewGroupMember(mgo.GetDatabase()) b, err := mgo.NewFriendRequestMongo(mgo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
gr, err := newmgo.NewGroupRequestMgo(mgo.GetDatabase()) c, err := mgo.NewBlackMongo(mgo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
groupDB = g.(*newmgo.GroupMgo)
memberDB = gm.(*newmgo.GroupMemberMgo)
gs = &groupServer{} friendDB = a.(*mgo.FriendMgo)
gs.db = controller.NewGroupDatabase(rdb, groupDB, memberDB, gr, tx, grouphash.NewGroupHashFromGroupServer(gs)) friendRequestDB = b.(*mgo.FriendRequestMgo)
blackDB = c.(*mgo.BlackMgo)
friendDatabase = controller.NewFriendDatabase(
friendDB,
friendRequestDB,
cache.NewFriendCacheRedis(rdb, friendDB, cache.GetDefaultOpt()),
tx,
)
return nil return nil
} }
@ -99,31 +105,10 @@ func init() {
} }
func TestName(t *testing.T) { func TestName(t *testing.T) {
ctx = context.WithValue(context.Background(), constant.OpUserID, "4454892084") err := friendDatabase.AgreeFriendRequest(ctx, &relation.FriendRequestModel{FromUserID: "8449222880", ToUserID: "3136372091", HandleResult: 1, HandleMsg: "ok"})
resp, err := gs.SetGroupMemberInfo(ctx, &group.SetGroupMemberInfoReq{ t.Log(err)
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)
} }
func Test_GroupCreateCount(t *testing.T) { 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)
} }

@ -19,7 +19,7 @@ import (
"fmt" "fmt"
pbconversation "github.com/OpenIMSDK/protocol/conversation" pbconversation "github.com/OpenIMSDK/protocol/conversation"
"github.com/OpenIMSDK/protocol/wrapperspb" "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" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx"
"github.com/openimsdk/open-im-server/v3/pkg/rpcclient/grouphash" "github.com/openimsdk/open-im-server/v3/pkg/rpcclient/grouphash"
"math/big" "math/big"
@ -64,15 +64,15 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
if err != nil { if err != nil {
return err return err
} }
groupDB, err := newmgo.NewGroupMongo(mongo.GetDatabase()) groupDB, err := mgo.NewGroupMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
groupMemberDB, err := newmgo.NewGroupMember(mongo.GetDatabase()) groupMemberDB, err := mgo.NewGroupMember(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
groupRequestDB, err := newmgo.NewGroupRequestMgo(mongo.GetDatabase()) groupRequestDB, err := mgo.NewGroupRequestMgo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }

@ -32,11 +32,11 @@ func genLogID() string {
} }
func (t *thirdServer) UploadLogs(ctx context.Context, req *third.UploadLogsReq) (*third.UploadLogsResp, error) { 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) userID := ctx.Value(constant.OpUserID).(string)
platform := constant.PlatformID2Name[int(req.Platform)] platform := constant.PlatformID2Name[int(req.Platform)]
for _, fileURL := range req.FileURLs { for _, fileURL := range req.FileURLs {
log := relationtb.Log{ log := relationtb.LogModel{
Version: req.Version, Version: req.Version,
SystemType: req.SystemType, SystemType: req.SystemType,
Platform: platform, Platform: platform,
@ -57,7 +57,7 @@ func (t *thirdServer) UploadLogs(ctx context.Context, req *third.UploadLogsReq)
} }
} }
if log.LogID == "" { 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) DBlogs = append(DBlogs, &log)
} }
@ -92,8 +92,8 @@ func (t *thirdServer) DeleteLogs(ctx context.Context, req *third.DeleteLogsReq)
return &third.DeleteLogsResp{}, nil return &third.DeleteLogsResp{}, nil
} }
func dbToPbLogInfos(logs []*relationtb.Log) []*third.LogInfo { func dbToPbLogInfos(logs []*relationtb.LogModel) []*third.LogInfo {
db2pbForLogInfo := func(log *relationtb.Log) *third.LogInfo { db2pbForLogInfo := func(log *relationtb.LogModel) *third.LogInfo {
return &third.LogInfo{ return &third.LogInfo{
Filename: log.FileName, Filename: log.FileName,
UserID: log.UserID, UserID: log.UserID,

@ -17,7 +17,7 @@ package third
import ( import (
"context" "context"
"fmt" "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" "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation"
"net/url" "net/url"
"time" "time"
@ -43,11 +43,11 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e
if err != nil { if err != nil {
return err return err
} }
logdb, err := newmgo.NewLogMongo(mongo.GetDatabase()) logdb, err := mgo.NewLogMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }
s3db, err := newmgo.NewS3Mongo(mongo.GetDatabase()) s3db, err := mgo.NewS3Mongo(mongo.GetDatabase())
if err != nil { if err != nil {
return err return err
} }

@ -17,7 +17,7 @@ package user
import ( import (
"context" "context"
"errors" "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" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx"
"strings" "strings"
"time" "time"
@ -70,7 +70,7 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error {
for k, v := range config.Config.Manager.UserID { for k, v := range config.Config.Manager.UserID {
users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k], AppMangerLevel: constant.AppAdmin}) 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 { if err != nil {
return err return err
} }

@ -10,7 +10,7 @@ import (
"github.com/openimsdk/open-im-server/v3/pkg/common/config" "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/cache"
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller" "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" 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" 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/common/db/unrelation"
@ -77,7 +77,7 @@ func InitDB() error {
for k, v := range config.Config.Manager.UserID { for k, v := range config.Config.Manager.UserID {
users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k], AppMangerLevel: constant.AppAdmin}) 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 { if err != nil {
return err return err
} }

@ -18,7 +18,7 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/OpenIMSDK/protocol/sdkws" "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" tx2 "github.com/openimsdk/open-im-server/v3/pkg/common/db/tx"
"math" "math"
@ -78,7 +78,7 @@ func InitMsgTool() (*MsgTool, error) {
return nil, err return nil, err
} }
discov.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials())) discov.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials()))
userDB, err := newmgo.NewUserMongo(mongo.GetDatabase()) userDB, err := mgo.NewUserMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -94,19 +94,19 @@ func InitMsgTool() (*MsgTool, error) {
tx, tx,
userMongoDB, userMongoDB,
) )
groupDB, err := newmgo.NewGroupMongo(mongo.GetDatabase()) groupDB, err := mgo.NewGroupMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return nil, err return nil, err
} }
groupMemberDB, err := newmgo.NewGroupMember(mongo.GetDatabase()) groupMemberDB, err := mgo.NewGroupMember(mongo.GetDatabase())
if err != nil { if err != nil {
return nil, err return nil, err
} }
groupRequestDB, err := newmgo.NewGroupRequestMgo(mongo.GetDatabase()) groupRequestDB, err := mgo.NewGroupRequestMgo(mongo.GetDatabase())
if err != nil { if err != nil {
return nil, err return nil, err
} }
conversationDB, err := newmgo.NewConversationMongo(mongo.GetDatabase()) conversationDB, err := mgo.NewConversationMongo(mongo.GetDatabase())
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -27,10 +27,10 @@ type ThirdDatabase interface {
FcmUpdateToken(ctx context.Context, account string, platformID int, fcmToken string, expireTime int64) error FcmUpdateToken(ctx context.Context, account string, platformID int, fcmToken string, expireTime int64) error
SetAppBadge(ctx context.Context, userID string, value int) error SetAppBadge(ctx context.Context, userID string, value int) error
// about log for debug // 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 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) 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.Log, error) GetLogs(ctx context.Context, LogIDs []string, userID string) ([]*relation.LogModel, error)
} }
type thirdDatabase struct { type thirdDatabase struct {
@ -44,17 +44,17 @@ func (t *thirdDatabase) DeleteLogs(ctx context.Context, logID []string, userID s
} }
// GetLogs implements ThirdDatabase. // 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) return t.logdb.Get(ctx, LogIDs, userID)
} }
// SearchLogs implements ThirdDatabase. // 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) return t.logdb.Search(ctx, keyword, start, end, pagination)
} }
// UploadLogs implements ThirdDatabase. // 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) return t.logdb.Create(ctx, logs)
} }

@ -1,8 +1,8 @@
package newmgo package mgo
import ( import (
"context" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "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) { 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) { func (b *BlackMgo) Delete(ctx context.Context, blacks []*relation.BlackModel) (err error) {
if len(blacks) == 0 { if len(blacks) == 0 {
return nil 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) { func (b *BlackMgo) UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]any) (err error) {
if len(args) == 0 { if len(args) == 0 {
return nil 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) { 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) { 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) { 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) { func (b *BlackMgo) FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error) {
if len(userIDs) == 0 { 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) { 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}))
} }

@ -1,9 +1,9 @@
package newmgo package mgo
import ( import (
"context" "context"
"github.com/OpenIMSDK/protocol/constant" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "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) { 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) { 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) { 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 { if err != nil {
return 0, err 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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"}}, {"$group": bson.M{"_id": "$conversation_id"}},
{"$project": bson.M{"_id": 0, "conversation_id": "$_id"}}, {"$project": bson.M{"_id": 0, "conversation_id": "$_id"}},
}) })
} }
func (c *ConversationMgo) GetAllConversationIDsNumber(ctx context.Context) (int64, error) { 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"}}, {"$group": bson.M{"_id": "$conversation_id"}},
{"$project": bson.M{"_id": 0, "conversation_id": "$_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) { 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) { 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) { 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)" //"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, "is_msg_destruct": 1,
"msg_destruct_time": bson.M{"$ne": 0}, "msg_destruct_time": bson.M{"$ne": 0},
"$or": []bson.M{ "$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) { 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}))
} }

@ -1,10 +1,10 @@
package newmgo package mgo
import ( import (
"context" "context"
"go.mongodb.org/mongo-driver/mongo/options" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
@ -25,7 +25,7 @@ func NewFriendMongo(db *mongo.Database) (relation.FriendModelInterface, error) {
// Create inserts multiple friend records. // Create inserts multiple friend records.
func (f *FriendMgo) Create(ctx context.Context, friends []*relation.FriendModel) error { 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. // 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, "owner_user_id": ownerUserID,
"friend_user_id": bson.M{"$in": friendUserIDs}, "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. // 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, "owner_user_id": ownerUserID,
"friend_user_id": friendUserID, "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. // Update modifies multiple friend documents.
@ -69,7 +69,7 @@ func (f *FriendMgo) Take(ctx context.Context, ownerUserID, friendUserID string)
"owner_user_id": ownerUserID, "owner_user_id": ownerUserID,
"friend_user_id": friendUserID, "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. // 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}, {"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. // 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, "owner_user_id": ownerUserID,
"friend_user_id": bson.M{"$in": friendUserIDs}, "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. // 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}, "owner_user_id": bson.M{"$in": ownerUserIDs},
"friend_user_id": friendUserID, "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. // 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) { func (f *FriendMgo) FindOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (int64, []*relation.FriendModel, error) {
filter := bson.M{"owner_user_id": ownerUserID} 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. // 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) { func (f *FriendMgo) FindInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (int64, []*relation.FriendModel, error) {
filter := bson.M{"friend_user_id": friendUserID} 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. // FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
func (f *FriendMgo) FindFriendUserIDs(ctx context.Context, ownerUserID string) ([]string, error) { func (f *FriendMgo) FindFriendUserIDs(ctx context.Context, ownerUserID string) ([]string, error) {
filter := bson.M{"owner_user_id": ownerUserID} 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}))
} }

@ -1,10 +1,10 @@
package newmgo package mgo
import ( import (
"context" "context"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "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" "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo" "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) { 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) { 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) { 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": fromUserID, "to_user_id": toUserID},
{"from_user_id": toUserID, "to_user_id": fromUserID}, {"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 { 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) { 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) { func (f *FriendRequestMgo) UpdateByMap(ctx context.Context, formUserID, toUserID string, args map[string]any) (err error) {
if len(args) == 0 { if len(args) == 0 {
return nil 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) { 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 return nil
} }
filter := bson.M{"from_user_id": friendRequest.FromUserID, "to_user_id": friendRequest.ToUserID} 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) { 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) { func (f *FriendRequestMgo) Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *relation.FriendRequestModel, err error) {

@ -1,8 +1,8 @@
package newmgo package mgo
import ( import (
"context" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "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) { 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) { 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 { if len(args) == 0 {
return nil 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) { 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) { 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) { 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) { func (g *GroupMgo) CountTotal(ctx context.Context, before *time.Time) (count int64, err error) {
if before == nil { 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) { 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"` Date string `bson:"_id"`
Count int64 `bson:"count"` 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 { if err != nil {
return nil, err return nil, err
} }

@ -1,9 +1,9 @@
package newmgo package mgo
import ( import (
"context" "context"
"github.com/OpenIMSDK/protocol/constant" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "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) { 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) { 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 { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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}, "$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 { func (g *GroupMemberMgo) IsUpdateRoleLevel(data map[string]any) bool {

@ -1,8 +1,8 @@
package newmgo package mgo
import ( import (
"context" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "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) { 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) { 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) { 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) { 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) { 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) { 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) { 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)
} }

@ -1,8 +1,8 @@
package newmgo package mgo
import ( import (
"context" "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/db/table/relation"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
@ -22,28 +22,28 @@ type LogMgo struct {
coll *mongo.Collection coll *mongo.Collection
} }
func (l *LogMgo) Create(ctx context.Context, log []*relation.Log) error { func (l *LogMgo) Create(ctx context.Context, log []*relation.LogModel) error {
return mgotool.InsertMany(ctx, l.coll, log) 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}} filter := bson.M{"create_time": bson.M{"$gte": start, "$lte": end}}
if keyword != "" { if keyword != "" {
filter["user_id"] = bson.M{"$regex": 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 { func (l *LogMgo) Delete(ctx context.Context, logID []string, userID string) error {
if userID == "" { 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 == "" { 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})
} }

@ -1,4 +1,4 @@
package mgotool package mtool
import ( import (
"context" "context"

@ -1,8 +1,8 @@
package newmgo package mgo
import ( import (
"context" "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/db/table/relation"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo"
@ -30,16 +30,16 @@ func (o *S3Mongo) SetObject(ctx context.Context, obj *relation.ObjectModel) erro
"group": obj.Group, "group": obj.Group,
"create_time": obj.CreateTime, "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) { func (o *S3Mongo) Take(ctx context.Context, engine string, name string) (*relation.ObjectModel, error) {
if engine == "" { 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 { 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})
} }

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

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

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

@ -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
//}

@ -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,
// )
//}

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

@ -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,
// "",
// )
//}

@ -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
// }

@ -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,
// "",
// )
//}

@ -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, "")
//}

@ -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())
//}

@ -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}
//}

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

@ -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
//}

@ -18,13 +18,10 @@ import (
"context" "context"
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination" "github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
"time" "time"
"go.mongodb.org/mongo-driver/bson/primitive"
) )
// FriendModel represents the data structure for a friend relationship in MongoDB. // FriendModel represents the data structure for a friend relationship in MongoDB.
type FriendModel struct { type FriendModel struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
OwnerUserID string `bson:"owner_user_id"` OwnerUserID string `bson:"owner_user_id"`
FriendUserID string `bson:"friend_user_id"` FriendUserID string `bson:"friend_user_id"`
Remark string `bson:"remark"` Remark string `bson:"remark"`

@ -6,7 +6,7 @@ import (
"time" "time"
) )
type Log struct { type LogModel struct {
LogID string `bson:"log_id"` LogID string `bson:"log_id"`
Platform string `bson:"platform"` Platform string `bson:"platform"`
UserID string `bson:"user_id"` UserID string `bson:"user_id"`
@ -19,8 +19,8 @@ type Log struct {
} }
type LogInterface interface { type LogInterface interface {
Create(ctx context.Context, log []*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, []*Log, 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 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)
} }

@ -17,6 +17,10 @@ type Log struct {
Ex string `gorm:"column:ex;type varchar(255)"` Ex string `gorm:"column:ex;type varchar(255)"`
} }
func (Log) TableName() string {
return "logs"
}
type LogInterface interface { type LogInterface interface {
Create(ctx context.Context, log []*Log) error 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) Search(ctx context.Context, keyword string, start time.Time, end time.Time, pageNumber int32, showNumber int32) (uint32, []*Log, error)

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

@ -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)
}
Loading…
Cancel
Save