using Nebula.Shared.Models; using Nebula.Shared.Services; namespace Nebula.Shared.Configurations.Migrations; public abstract class BaseConfigurationMigration : IConfigurationMigration { protected ConVar OldConVar; protected ConVar NewConVar; public BaseConfigurationMigration(string oldName, string newName) { OldConVar = ConVarBuilder.Build(oldName); NewConVar = ConVarBuilder.Build(newName); } public async Task DoMigrate(ConfigurationService configurationService, IServiceProvider serviceProvider, ILoadingHandler loadingHandler) { var oldValue = configurationService.GetConfigValue(OldConVar); if(oldValue == null) return; var newValue = await Migrate(serviceProvider, oldValue, loadingHandler); configurationService.SetConfigValue(NewConVar, newValue); configurationService.ClearConfigValue(OldConVar); } protected abstract Task Migrate(IServiceProvider serviceProvider, T1 oldValue, ILoadingHandler loadingHandler); }