go_dreamfactory/modules/pack/db_comp.go
2022-06-13 12:36:36 +08:00

83 lines
2.2 KiB
Go

package pack
import (
"context"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
///背包数据库数据管理组件
type DB_Comp struct {
modules.MComp_DBComp
}
///查询用户背包数据
func (this *DB_Comp) Pack_QueryUserPack(uId string) (items []*pb.DB_UserItemData, err error) {
var (
cursor *mongo.Cursor
)
items = make([]*pb.DB_UserItemData, 0)
if cursor, err = this.DB.Find(DB_PackTable, bson.M{"uid": uId}); err != nil {
return
} else {
for cursor.Next(context.Background()) {
temp := &pb.DB_UserItemData{}
if err = cursor.Decode(temp); err != nil {
return
}
items = append(items, temp)
}
}
return
}
//更新背包格子数据
func (this *DB_Comp) Pack_UpdateGridToUserPack(uId string, grids ...*pb.DB_UserItemData) (err error) {
models := make([]mongo.WriteModel, len(grids))
for i, v := range grids {
models[i] = mongo.NewUpdateOneModel().SetFilter(bson.M{"_id": v.GridId}).SetUpdate(
bson.M{"$set": bson.M{
"isempty": v.IsEmpty,
"itemid": v.ItemId,
"amount": v.Amount,
"ctime": v.CTime,
"etime": v.ETime,
"isnewitem": v.IsNewItem,
}}).SetUpsert(true)
}
this.DB.BulkWrite(DB_PackTable, models, options.BulkWrite().SetOrdered(false))
return
}
//更新背包格子数据
func (this *DB_Comp) Pack_DeleteGridToUserPack(uId string, grids ...string) (err error) {
_, err = this.DB.DeleteMany(DB_PackTable, bson.M{"_id": bson.M{"$inc": grids}})
return
}
//更新背包格子物品的数据
func (this *DB_Comp) Pack_AddGridAmountToUserPack(grid int32, amount int32) (pack *pb.DB_UserItemData, err error) {
pack = &pb.DB_UserItemData{}
err = this.DB.FindOneAndUpdate(DB_PackTable,
bson.M{"_id": grid},
bson.M{"$set": bson.M{
"amount": amount,
}},
options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After)).Decode(pack)
return
}
//修改背包格子IsNew标识
func (this *DB_Comp) Pack_ModifyPackGridIsNewItem(grids []int32) (err error) {
_, err = this.DB.UpdateMany(DB_PackTable,
bson.M{"_id": bson.M{"$inc": grids}},
bson.M{"$set": bson.M{
"isNewitem": false,
}})
return
}