package db import ( "errors" capp "f1-game/internal/cherry_app" dbFacade "f1-game/internal/component/db/facade" nameDB "f1-game/internal/name/db" dbCharge "f1-game/nodes/game/internal/db/data/charge" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" clog "github.com/cherry-game/cherry/logger" ) // ChargeTable 玩家充值信息表 type ( ChargeTable struct { PlayerID int64 `bson:"PlayerID,omitempty"` NodeID string `bson:"NodeID,omitempty"` dbCharge.Data `bson:"Data,omitempty"` dbFacade.TableBase `bson:",inline"` } ) func (*ChargeTable) TableName() string { return nameDB.Table_Charge } func (p *ChargeTable) PrimaryValue() any { return p.PlayerID } func (p *ChargeTable) CheckField() { p.Data.CheckField() } func (p *ChargeTable) Save2Queue() { save2Queue(p) } func GetChargeTable(playerID int64) *ChargeTable { if val, ok := chargeTableCache.GetIfPresent(playerID); ok { return val.(*ChargeTable) } chargeTable, found := GetChargeTableFromDB(playerID) if found { chargeTableCache.Put(playerID, chargeTable) } return chargeTable } func GetChargeTableFromDB(playerID int64) (*ChargeTable, bool) { chargeTable := newChargeTable(playerID) filter := bson.M{ nameDB.Field_NodeID: chargeTable.NodeID, nameDB.Field_PlayerID: chargeTable.PlayerID, } err := dbComponent.FindOne(chargeTable, filter) if err != nil { if errors.Is(err, mongo.ErrNoDocuments) { clog.Warnf("[playerID = %d] not found, create new one", playerID) chargeTable.CheckField() return chargeTable, true } clog.Errorf("[playerID = %d] db error = %v", playerID, err) return chargeTable, false } chargeTable.CheckField() return chargeTable, true } func newChargeTable(playerID int64) *ChargeTable { return &ChargeTable{ PlayerID: playerID, NodeID: capp.NodeID(), Data: dbCharge.NewData(), } }