game_sync/dao/red_packet_history.go

96 lines
3.0 KiB
Go

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
}