hero_table.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. dbHero "f1-game/nodes/game/internal/db/data/hero"
  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. // HeroTable 英雄表
  14. HeroTable struct {
  15. PlayerID int64 `bson:"PlayerID,omitempty"`
  16. NodeID string `bson:"NodeID,omitempty"`
  17. dbHero.Data `bson:"Data,omitempty"`
  18. dbFacade.TableBase `bson:",inline"`
  19. }
  20. )
  21. func (p *HeroTable) TableName() string {
  22. return nameDB.Table_Hero
  23. }
  24. func (p *HeroTable) PrimaryValue() any {
  25. return p.PlayerID
  26. }
  27. func (p *HeroTable) CheckField() {
  28. if p.Heroes == nil {
  29. p.Heroes = make(dbHero.Heroes)
  30. }
  31. }
  32. func (p *HeroTable) Save2Queue() {
  33. save2Queue(p)
  34. }
  35. func GetHeroTable(playerID int64) *HeroTable {
  36. if val, ok := heroTableCache.GetIfPresent(playerID); ok {
  37. return val.(*HeroTable)
  38. }
  39. heroTable := GetHeroTableFromDB(playerID)
  40. heroTableCache.Put(playerID, heroTable)
  41. return heroTable
  42. }
  43. func GetHeroTableFromDB(playerID int64) *HeroTable {
  44. table := newHeroTable(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 newHeroTable(playerID int64) *HeroTable {
  62. return &HeroTable{
  63. PlayerID: playerID,
  64. NodeID: cherryApp.NodeID(),
  65. Data: dbHero.NewData(),
  66. }
  67. }
  68. //func (p *HeroTable) TeamHeroIDList() []int32 {
  69. // ids := make([]int32, 0, len(p.Teams))
  70. // for _, heroID := range p.Teams {
  71. // ids = append(ids, heroID)
  72. // }
  73. //
  74. // return ids
  75. //}
  76. //func (p *HeroTable) TeamLevel() int32 {
  77. // level := int32(0)
  78. // for _, heroID := range p.Teams {
  79. // if hero, ok := p.Heroes.Get(heroID); ok {
  80. // level += hero.Level
  81. // }
  82. // }
  83. //
  84. // return level
  85. //}