89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"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 RedPacketColumns = internal.RedPacketColumns
|
|
|
|
type RedPacket struct {
|
|
*internal.RedPacket
|
|
}
|
|
|
|
func GetRedPacket(key string) (*RedPacket, error) {
|
|
return mongox.GetDao(key, NewRedPacket)
|
|
}
|
|
|
|
func NewRedPacket(db *mongo.Database, c *mongo.Collection) (*RedPacket, any) {
|
|
if db == nil || c == nil {
|
|
return &RedPacket{}, &modelpkg.RedPacket{}
|
|
}
|
|
|
|
v := internal.NewRedPacket()
|
|
v.Database = db
|
|
v.Collection = c
|
|
|
|
// 创建索引
|
|
c.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
|
Keys: bson.D{{"cid", 1}}, // 1 表示升序,-1 表示降序
|
|
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
|
|
})
|
|
c.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
|
Keys: bson.D{{"ts", 1}}, // 1 表示升序,-1 表示降序
|
|
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
|
|
})
|
|
c.Indexes().CreateOne(context.Background(), mongo.IndexModel{
|
|
Keys: bson.D{{"ts", -1}}, // 1 表示升序,-1 表示降序
|
|
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
|
|
})
|
|
|
|
return &RedPacket{RedPacket: v}, &modelpkg.RedPacket{}
|
|
}
|
|
|
|
func (r *RedPacket) GetAll() (res []*modelpkg.RedPacket, err error) {
|
|
res, err = r.FindMany(context.Background(), func(cols *RedPacketColumns) interface{} {
|
|
return bson.M{}
|
|
})
|
|
if err != nil && !errors.Is(err, mongo.ErrNoDocuments) {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (r *RedPacket) UpdateAll(list []*modelpkg.RedPacket) error {
|
|
var operations []mongo.WriteModel
|
|
for _, v := range list {
|
|
updateDataMap := bson.M{
|
|
"$set": v,
|
|
}
|
|
delete(updateDataMap["$set"].(bson.M), "_id") // 删除 _id 字段
|
|
operations = append(operations, mongo.NewUpdateOneModel().SetFilter(bson.M{"_id": v.ID}).SetUpdate(bson.M{"$set": v}).SetUpsert(true))
|
|
}
|
|
|
|
_, err := r.Collection.BulkWrite(context.Background(), operations) // 批量更新
|
|
if err != nil {
|
|
logger.Logger.Errorf("RedPacket.UpdateAll error: %v", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|