From 2ba1a95c8d97d4a3174a74524a2c80201f6226c2 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 1 Apr 2022 18:06:59 -0400 Subject: [PATCH] allow for multiple upgrade classes --- .../Infrastructure/DatabaseManager.cs | 62 ++++++++----------- .../SiteUpgrade/ExampleUpgrade.cs | 3 +- 2 files changed, 28 insertions(+), 37 deletions(-) diff --git a/Oqtane.Server/Infrastructure/DatabaseManager.cs b/Oqtane.Server/Infrastructure/DatabaseManager.cs index 589bd3ce..8a200e12 100644 --- a/Oqtane.Server/Infrastructure/DatabaseManager.cs +++ b/Oqtane.Server/Infrastructure/DatabaseManager.cs @@ -673,52 +673,42 @@ namespace Oqtane.Infrastructure { var result = new Installation { Success = false, Message = string.Empty }; - // find upgrade type - Type upgradetype = null; - var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies(); - foreach (Assembly assembly in assemblies) + using (var scope = _serviceScopeFactory.CreateScope()) { - var types = assembly.GetTypes().Where(item => item.GetInterfaces().Contains(typeof(IUpgradeable))); - if (types.Any()) - { - upgradetype = types.First(); - break; - } - } + var aliases = scope.ServiceProvider.GetRequiredService(); + var tenantManager = scope.ServiceProvider.GetRequiredService(); + var sites = scope.ServiceProvider.GetRequiredService(); - // execute upgrade - if (upgradetype != null) - { - var obj = Activator.CreateInstance(upgradetype) as IUpgradeable; - if (obj != null) + var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies(); + foreach (Assembly assembly in assemblies) { - using (var scope = _serviceScopeFactory.CreateScope()) + foreach (var type in assembly.GetTypes().Where(item => item.GetInterfaces().Contains(typeof(IUpgradeable)))) { - var aliases = scope.ServiceProvider.GetRequiredService(); - var tenantManager = scope.ServiceProvider.GetRequiredService(); - var sites = scope.ServiceProvider.GetRequiredService(); - - foreach (var alias in aliases.GetAliases().ToList().Where(item => item.IsDefault)) + var obj = Activator.CreateInstance(type) as IUpgradeable; + if (obj != null) { - var versions = obj.GetVersions(alias); - if (!string.IsNullOrEmpty(versions)) + foreach (var alias in aliases.GetAliases().ToList().Where(item => item.IsDefault)) { - tenantManager.SetTenant(alias.TenantId); - var site = sites.GetSites().FirstOrDefault(item => item.SiteId == alias.SiteId); - if (site != null) + var versions = obj.GetVersions(alias); + if (!string.IsNullOrEmpty(versions)) { - foreach (var version in versions.Split(',', StringSplitOptions.RemoveEmptyEntries)) + tenantManager.SetTenant(alias.TenantId); + var site = sites.GetSites().FirstOrDefault(item => item.SiteId == alias.SiteId); + if (site != null) { - if (string.IsNullOrEmpty(site.Version) || Version.Parse(version) > Version.Parse(site.Version)) + foreach (var version in versions.Split(',', StringSplitOptions.RemoveEmptyEntries)) { - if (obj.Upgrade(alias, version)) + if (string.IsNullOrEmpty(site.Version) || Version.Parse(version) > Version.Parse(site.Version)) { - site.Version = version; - sites.UpdateSite(site); - } - else - { - result.Message = "An Error Occurred Executing IUpgradeable Interface For " + alias.Name + " For Version " + version; + if (obj.Upgrade(alias, version)) + { + site.Version = version; + sites.UpdateSite(site); + } + else + { + result.Message = "An Error Occurred Executing IUpgradeable Interface For " + alias.Name + " For Version " + version; + } } } } diff --git a/Oqtane.Server/Infrastructure/SiteUpgrade/ExampleUpgrade.cs b/Oqtane.Server/Infrastructure/SiteUpgrade/ExampleUpgrade.cs index 0ec00c00..02d072db 100644 --- a/Oqtane.Server/Infrastructure/SiteUpgrade/ExampleUpgrade.cs +++ b/Oqtane.Server/Infrastructure/SiteUpgrade/ExampleUpgrade.cs @@ -12,7 +12,7 @@ namespace Oqtane.Infrastructure switch (alias.Name) { case "localhost:44357": - // return the list of official release versions for the specific site + // return the comma delimited list of official release versions for the specific site versions = "1.0.0"; break; } @@ -25,6 +25,7 @@ namespace Oqtane.Infrastructure switch (alias.Name) { case "localhost:44357": + // the version cases should match the list of versions returned above switch (version) { case "1.0.0":