equip_table.go 1.7 KB

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