package db import ( "context" "errors" capp "f1-game/internal/cherry_app" "f1-game/internal/data" nameDB "f1-game/internal/name/db" "fmt" clog "github.com/cherry-game/cherry/logger" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" ) // ver00009 修正 logic_watcher_table type ver00009 struct { } // Version 手动自增,必需唯一 func (ver00009) Version() int32 { return 9 } func (ver00009) Enable() bool { return false } func (p ver00009) Execute() bool { clog.Infof("Execute %v, nodeID = %s", p.Version(), capp.NodeID()) siegeCollection := dbComponent.DB().Collection(nameDB.Table_LogicSiege) var newSiegeTables []*LogicSiegeTable castleList := getAllTables[*LogicCastleTable](nameDB.Table_LogicCastle) if len(castleList) > 0 { for _, castleTable := range castleList { filter := bson.M{ nameDB.Field_ObjectID: castleTable.ObjectID, nameDB.Field_NodeID: castleTable.NodeID, } err := siegeCollection.FindOne(context.Background(), filter) //.Decode(&LogicSiegeTable{}) if errors.Is(err.Err(), mongo.ErrNoDocuments) { castleRow, _ := data.MapCastle.GetByConfigID(castleTable.ConfigID) siegeTable := NewLogicSiegeTable(castleTable.ObjectID, castleTable.NodeID, castleTable.ConfigID) siegeTable.Durability = castleRow.Durability siegeTable.DefendArmy = castleRow.DefendArmy newSiegeTables = append(newSiegeTables, siegeTable) } } } buildList := getAllTables[*LogicBuildTable](nameDB.Table_LogicBuild) if len(buildList) > 0 { for _, buildTable := range buildList { filter := bson.M{ nameDB.Field_ObjectID: buildTable.ObjectID, nameDB.Field_NodeID: buildTable.NodeID, } err := siegeCollection.FindOne(context.Background(), filter) //.Decode(&LogicSiegeTable{}) if errors.Is(err.Err(), mongo.ErrNoDocuments) { buildRow, _ := data.MapBuild.GetByConfigID(buildTable.ConfigID) siegeTable := NewLogicSiegeTable(buildTable.ObjectID, buildTable.NodeID, buildTable.ConfigID) siegeTable.Durability = buildRow.Durability siegeTable.DefendArmy = buildRow.DefendArmy newSiegeTables = append(newSiegeTables, siegeTable) } } } if len(newSiegeTables) > 0 { if err := bulkWrite(siegeCollection, newSiegeTables); err != nil { clog.Errorf("[migrate %v] error = %v", p.Version(), err) return false } clog.Debugf("[migrate %v] add new siege table [count = %d]", p.Version(), len(newSiegeTables)) } return true } func (p ver00009) Desc() string { return fmt.Sprintf("[migrator - %d] Add Siege Table", p.Version()) }