charge_table.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package db
  2. import (
  3. "errors"
  4. capp "f1-game/internal/cherry_app"
  5. dbFacade "f1-game/internal/component/db/facade"
  6. nameDB "f1-game/internal/name/db"
  7. dbCharge "f1-game/nodes/game/internal/db/data/charge"
  8. "go.mongodb.org/mongo-driver/v2/bson"
  9. "go.mongodb.org/mongo-driver/v2/mongo"
  10. clog "github.com/cherry-game/cherry/logger"
  11. )
  12. // ChargeTable 玩家充值信息表
  13. type (
  14. ChargeTable struct {
  15. PlayerID int64 `bson:"PlayerID,omitempty"`
  16. NodeID string `bson:"NodeID,omitempty"`
  17. dbCharge.Data `bson:"Data,omitempty"`
  18. dbFacade.TableBase `bson:",inline"`
  19. }
  20. )
  21. func (*ChargeTable) TableName() string {
  22. return nameDB.Table_Charge
  23. }
  24. func (p *ChargeTable) PrimaryValue() any {
  25. return p.PlayerID
  26. }
  27. func (p *ChargeTable) CheckField() {
  28. p.Data.CheckField()
  29. }
  30. func (p *ChargeTable) Save2Queue() {
  31. save2Queue(p)
  32. }
  33. func GetChargeTable(playerID int64) *ChargeTable {
  34. if val, ok := chargeTableCache.GetIfPresent(playerID); ok {
  35. return val.(*ChargeTable)
  36. }
  37. chargeTable, found := GetChargeTableFromDB(playerID)
  38. if found {
  39. chargeTableCache.Put(playerID, chargeTable)
  40. }
  41. return chargeTable
  42. }
  43. func GetChargeTableFromDB(playerID int64) (*ChargeTable, bool) {
  44. chargeTable := newChargeTable(playerID)
  45. filter := bson.M{
  46. nameDB.Field_NodeID: chargeTable.NodeID,
  47. nameDB.Field_PlayerID: chargeTable.PlayerID,
  48. }
  49. err := dbComponent.FindOne(chargeTable, filter)
  50. if err != nil {
  51. if errors.Is(err, mongo.ErrNoDocuments) {
  52. clog.Warnf("[playerID = %d] not found, create new one", playerID)
  53. chargeTable.CheckField()
  54. return chargeTable, true
  55. }
  56. clog.Errorf("[playerID = %d] db error = %v", playerID, err)
  57. return chargeTable, false
  58. }
  59. chargeTable.CheckField()
  60. return chargeTable, true
  61. }
  62. func newChargeTable(playerID int64) *ChargeTable {
  63. return &ChargeTable{
  64. PlayerID: playerID,
  65. NodeID: capp.NodeID(),
  66. Data: dbCharge.NewData(),
  67. }
  68. }