season_table.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package db
  2. import (
  3. "errors"
  4. dbFacade "f1-game/internal/component/db/facade"
  5. nameDB "f1-game/internal/name/db"
  6. dbSeason "f1-game/nodes/map/internal/db/data/season"
  7. clog "github.com/cherry-game/cherry/logger"
  8. "go.mongodb.org/mongo-driver/v2/bson"
  9. "go.mongodb.org/mongo-driver/v2/mongo"
  10. )
  11. type (
  12. // SeasonTable 赛季表
  13. SeasonTable struct {
  14. NodeID string `bson:"NodeID,omitempty"` // node id
  15. StartTime int64 `bson:"StartTime,omitempty"` // 赛季开始时间
  16. SeasonID int32 `bson:"SeasonID,omitempty"` // 赛季ID
  17. SeasonQuest dbSeason.SeasonQuest `bson:"SeasonQuest,omitempty"` // 赛季霸业任务
  18. dbFacade.TableBase `bson:",inline"`
  19. isChangeData bool `bson:"-"`
  20. }
  21. )
  22. func (p *SeasonTable) TableName() string {
  23. return nameDB.Table_MapSeason
  24. }
  25. func (p *SeasonTable) PrimaryValue() any {
  26. return p.SeasonID
  27. }
  28. func (p *SeasonTable) CheckField() {
  29. p.SeasonQuest.CheckField()
  30. }
  31. func (p *SeasonTable) Filter() bson.M {
  32. return bson.M{
  33. nameDB.Field_NodeID: p.NodeID,
  34. }
  35. }
  36. func (p *SeasonTable) SetChangeData() {
  37. p.isChangeData = true
  38. }
  39. func (p *SeasonTable) Save2Queue() {
  40. if p.isChangeData {
  41. save2Queue(p)
  42. p.isChangeData = false
  43. }
  44. }
  45. func newSeasonTable(nodeID string) *SeasonTable {
  46. table := &SeasonTable{
  47. NodeID: nodeID,
  48. }
  49. table.CheckField()
  50. return table
  51. }
  52. func GetSeasonTable(nodeID string) *SeasonTable {
  53. if val, ok := mapSeasonCache.GetIfPresent(nodeID); ok {
  54. return val.(*SeasonTable)
  55. }
  56. seasonTable := GetSeasonTableFromDB(nodeID)
  57. mapSeasonCache.Put(nodeID, seasonTable)
  58. return seasonTable
  59. }
  60. func GetSeasonTableFromDB(nodeID string) *SeasonTable {
  61. seasonTable := newSeasonTable(nodeID)
  62. filter := bson.M{
  63. nameDB.Field_NodeID: nodeID,
  64. }
  65. err := dbComponent.FindOne(seasonTable, filter)
  66. if err != nil {
  67. if errors.Is(err, mongo.ErrNoDocuments) {
  68. clog.Warnf("[nodeID = %v] not found, create new one", seasonTable.NodeID)
  69. return seasonTable
  70. }
  71. clog.Errorf("nodeID = %v, err = %v", seasonTable.NodeID, err)
  72. return seasonTable
  73. }
  74. return seasonTable
  75. }