ver_00009.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package db
  2. import (
  3. "context"
  4. "errors"
  5. capp "f1-game/internal/cherry_app"
  6. "f1-game/internal/data"
  7. nameDB "f1-game/internal/name/db"
  8. "fmt"
  9. clog "github.com/cherry-game/cherry/logger"
  10. "go.mongodb.org/mongo-driver/v2/bson"
  11. "go.mongodb.org/mongo-driver/v2/mongo"
  12. )
  13. // ver00009 修正 logic_watcher_table
  14. type ver00009 struct {
  15. }
  16. // Version 手动自增,必需唯一
  17. func (ver00009) Version() int32 {
  18. return 9
  19. }
  20. func (ver00009) Enable() bool {
  21. return false
  22. }
  23. func (p ver00009) Execute() bool {
  24. clog.Infof("Execute %v, nodeID = %s", p.Version(), capp.NodeID())
  25. siegeCollection := dbComponent.DB().Collection(nameDB.Table_LogicSiege)
  26. var newSiegeTables []*LogicSiegeTable
  27. castleList := getAllTables[*LogicCastleTable](nameDB.Table_LogicCastle)
  28. if len(castleList) > 0 {
  29. for _, castleTable := range castleList {
  30. filter := bson.M{
  31. nameDB.Field_ObjectID: castleTable.ObjectID,
  32. nameDB.Field_NodeID: castleTable.NodeID,
  33. }
  34. err := siegeCollection.FindOne(context.Background(), filter) //.Decode(&LogicSiegeTable{})
  35. if errors.Is(err.Err(), mongo.ErrNoDocuments) {
  36. castleRow, _ := data.MapCastle.GetByConfigID(castleTable.ConfigID)
  37. siegeTable := NewLogicSiegeTable(castleTable.ObjectID, castleTable.NodeID, castleTable.ConfigID)
  38. siegeTable.Durability = castleRow.Durability
  39. siegeTable.DefendArmy = castleRow.DefendArmy
  40. newSiegeTables = append(newSiegeTables, siegeTable)
  41. }
  42. }
  43. }
  44. buildList := getAllTables[*LogicBuildTable](nameDB.Table_LogicBuild)
  45. if len(buildList) > 0 {
  46. for _, buildTable := range buildList {
  47. filter := bson.M{
  48. nameDB.Field_ObjectID: buildTable.ObjectID,
  49. nameDB.Field_NodeID: buildTable.NodeID,
  50. }
  51. err := siegeCollection.FindOne(context.Background(), filter) //.Decode(&LogicSiegeTable{})
  52. if errors.Is(err.Err(), mongo.ErrNoDocuments) {
  53. buildRow, _ := data.MapBuild.GetByConfigID(buildTable.ConfigID)
  54. siegeTable := NewLogicSiegeTable(buildTable.ObjectID, buildTable.NodeID, buildTable.ConfigID)
  55. siegeTable.Durability = buildRow.Durability
  56. siegeTable.DefendArmy = buildRow.DefendArmy
  57. newSiegeTables = append(newSiegeTables, siegeTable)
  58. }
  59. }
  60. }
  61. if len(newSiegeTables) > 0 {
  62. if err := bulkWrite(siegeCollection, newSiegeTables); err != nil {
  63. clog.Errorf("[migrate %v] error = %v", p.Version(), err)
  64. return false
  65. }
  66. clog.Debugf("[migrate %v] add new siege table [count = %d]", p.Version(), len(newSiegeTables))
  67. }
  68. return true
  69. }
  70. func (p ver00009) Desc() string {
  71. return fmt.Sprintf("[migrator - %d] Add Siege Table", p.Version())
  72. }