package dao import ( "context" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/mongox" "mongo.games.com/game/dao/internal" modelpkg "mongo.games.com/game/model" ) var ( _ = context.Background() _ = logger.Logger _ = bson.M{} _ = mongo.Database{} ) type RedPacketHistoryColumns = internal.RedPacketHistoryColumns type RedPacketHistory struct { *internal.RedPacketHistory } func GetRedPacketHistory(key string) (*RedPacketHistory, error) { return mongox.GetDao(key, NewRedPacketHistory) } func NewRedPacketHistory(db *mongo.Database, c *mongo.Collection) (*RedPacketHistory, any) { if db == nil || c == nil { return &RedPacketHistory{}, &modelpkg.RedPacketHistory{} } v := internal.NewRedPacketHistory() v.Database = db v.Collection = c c.Indexes().CreateMany(context.Background(), []mongo.IndexModel{ { Keys: bson.D{{"snid", 1}, {"cid", 1}, {"ts", -1}}, // 1 表示升序,-1 表示降序 Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引 }, { Keys: bson.D{{"snid", 1}, {"ts", -1}}, Options: options.Index().SetBackground(true).SetSparse(true), }, { Keys: bson.D{{"cid", 1}}, // 1 表示升序,-1 表示降序 Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引 }, { Keys: bson.D{{"ts", 1}}, // 1 表示升序,-1 表示降序 Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引 }, { Keys: bson.D{{"itemid", -1}}, // 1 表示升序,-1 表示降序 Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引 }, { Keys: bson.D{{"itemnum", -1}}, // 1 表示升序,-1 表示降序 Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引 }, }) return &RedPacketHistory{RedPacketHistory: v}, &modelpkg.RedPacketHistory{} } func (r *RedPacketHistory) GetHistory(snid int32, cid int64) ([]*modelpkg.RedPacketHistory, error) { res, err := r.FindMany(context.Background(), func(cols *internal.RedPacketHistoryColumns) interface{} { if cid > 0 { return bson.M{cols.Snid: snid, cols.Cid: cid} } return bson.M{cols.Snid: snid} }, func(cols *internal.RedPacketHistoryColumns) *options.FindOptions { return options.Find().SetSort(bson.D{{cols.Ts, -1}}).SetLimit(30) }) if err != nil { logger.Logger.Error("RedPacketHistory.GetHistory ", err) return nil, err } return res, err } func (r *RedPacketHistory) Save(history *modelpkg.RedPacketHistory) error { _, err := r.InsertOne(context.Background(), history) if err != nil { logger.Logger.Error("RedPacketHistory.Insert ", err) return err } return nil }