db.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package db
  2. import (
  3. "context"
  4. "f1-game/internal/component/db"
  5. dbFacade "f1-game/internal/component/db/facade"
  6. nameDB "f1-game/internal/name/db"
  7. clog "github.com/cherry-game/cherry/logger"
  8. "go.mongodb.org/mongo-driver/v2/bson"
  9. )
  10. var dbComponent = db.New("map_db_component")
  11. func NewMap() *db.Component {
  12. dbComponent.AddTable(
  13. &MapNodeTable{},
  14. &SeasonTable{},
  15. &LogicBuildTable{},
  16. &LogicCastleTable{},
  17. &LogicMonsterTable{},
  18. &LogicMonsterFlushTable{},
  19. &LogicMarchTable{},
  20. &LogicTileTable{},
  21. &LogicResTable{},
  22. &MapPlayerTable{},
  23. &MapPlayerStorageTable{},
  24. &MapPlayerReportTable{},
  25. &MapLeagueTable{},
  26. &MapLeagueStorageTable{},
  27. &MapLeagueMailTable{},
  28. &MapLeagueMemberTable{},
  29. &MapLeagueLogTable{},
  30. &MapLeagueReportTable{},
  31. &LogicLegionTable{},
  32. &LogicWatcherTable{},
  33. &LogicSiegeTable{},
  34. &MapExchangeTable{},
  35. &MapExchangeStatsTable{},
  36. &MapExchangeDeliverTable{},
  37. &MapPlayerRankTable{},
  38. &MapLeagueRankTable{},
  39. &MapScoutTable{},
  40. )
  41. dbComponent.AddScript(
  42. &ver00001{},
  43. &ver00002{},
  44. &ver00003{},
  45. //&ver00004{},
  46. &ver00005{},
  47. &ver00006{},
  48. &ver00007{},
  49. &ver00008{},
  50. &ver00009{},
  51. &ver00010{},
  52. )
  53. dbComponent.SetOnLoadFunc(
  54. mapNodeCheck,
  55. // initMapBornPointTable,
  56. loadMapPlayerStorageTable,
  57. loadMapPlayerReportTables,
  58. )
  59. return dbComponent
  60. }
  61. func save2Queue(val dbFacade.Table) {
  62. dbComponent.DBQueue().InQueue(val)
  63. }
  64. func loadLogicTable[T dbFacade.Table](nodeID string, deleteField string, f func(T)) {
  65. var (
  66. t T
  67. ctx = context.TODO()
  68. collection = dbComponent.Collection(t.TableName())
  69. filter = bson.M{
  70. nameDB.Field_NodeID: nodeID,
  71. deleteField: bson.M{"$in": []any{false, nil}},
  72. }
  73. pageNum int32 = 1
  74. pageSize int32 = 100000
  75. count int64 = 0
  76. )
  77. for {
  78. list, _, err := db.Pagination[T](collection, ctx, filter, nil, nil, pageNum, pageSize, false)
  79. if err != nil {
  80. clog.Errorf("[Load%] err = %v", t.TableName(), err)
  81. break
  82. }
  83. if len(list) < 1 {
  84. break
  85. }
  86. for _, table := range list {
  87. table.CheckField()
  88. f(table)
  89. }
  90. pageNum++
  91. count += int64(len(list))
  92. }
  93. clog.Infof("Load %s, count = %d", t.TableName(), count)
  94. }