Skip to content

Commit 71f8813

Browse files
committed
Add migration to backfill metadata from level attributes
1 parent f520cbb commit 71f8813

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

Refresh.Database/GameDatabaseContext.Levels.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public bool AddLevel(GameLevel level)
4141
level.PublishDate = timestamp;
4242
level.UpdateDate = timestamp;
4343

44-
this.ApplyLevelMetadataFromDetails(level);
44+
this.ApplyLevelMetadataFromAttributes(level);
4545
this.GameLevels.Add(level);
4646

4747
this.SaveChanges();
@@ -199,7 +199,7 @@ public void UpdateLevelLocations(IEnumerable<ISerializedEditLevelLocation> locat
199199
prop.SetValue(oldLevel, prop.GetValue(newLevel));
200200
}
201201

202-
this.ApplyLevelMetadataFromDetails(newLevel);
202+
this.ApplyLevelMetadataFromAttributes(newLevel);
203203
this.CreateRevisionForLevel(newLevel, author);
204204
this.SaveChanges();
205205
return oldLevel;
@@ -229,7 +229,7 @@ public void UpdateLevelLocations(IEnumerable<ISerializedEditLevelLocation> locat
229229

230230
level.UpdateDate = this._time.Now;
231231

232-
this.ApplyLevelMetadataFromDetails(level);
232+
this.ApplyLevelMetadataFromAttributes(level);
233233
this.CreateRevisionForLevel(level, updatingUser);
234234
this.SaveChanges();
235235
return level;
@@ -633,7 +633,7 @@ public void UpdateSkillRewardsForLevel(GameLevel level, IEnumerable<GameSkillRew
633633
});
634634
}
635635

636-
private void ApplyLevelMetadataFromDetails(GameLevel level, bool save = false)
636+
public void ApplyLevelMetadataFromAttributes(GameLevel level, bool save = false)
637637
{
638638
// Automatically mark level as reupload by keyword matching the title
639639
bool isReUpload = LevelPrefixes.ReuploadKeywords.Any(keyword => level.Title.Contains(keyword, StringComparison.OrdinalIgnoreCase));
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Refresh.Database.Models.Levels;
2+
using Refresh.Workers;
3+
4+
namespace Refresh.Interfaces.Workers.Migrations;
5+
6+
public class BackfillLevelAttributesMigration : MigrationJob<GameLevel>
7+
{
8+
protected override IQueryable<GameLevel> SortAndFilter(IQueryable<GameLevel> query)
9+
{
10+
return query
11+
.Where(l => l.StoryId == 0)
12+
.OrderBy(l => l.LevelId);
13+
}
14+
15+
protected override void Migrate(WorkContext context, GameLevel[] batch)
16+
{
17+
foreach (GameLevel level in batch)
18+
{
19+
context.Database.ApplyLevelMetadataFromAttributes(level);
20+
}
21+
22+
context.Database.SaveChanges();
23+
}
24+
}

Refresh.Interfaces.Workers/RefreshWorkerManager.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public static WorkerManager Create(Logger logger, IDataStore dataStore, GameData
2121

2222
manager.AddJob<BackfillRevisionMigration>();
2323
manager.AddJob<EnsureDeletedUsersDeletedMigration>();
24+
manager.AddJob<BackfillLevelAttributesMigration>();
2425

2526
return manager;
2627
}

0 commit comments

Comments
 (0)