From 7c6dc6d774f62545a68a58be6b76ed3fdd2104b9 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 1 May 2020 10:27:14 -0400 Subject: [PATCH] Added ability to execute version specific code during framework upgrade (removed ApplicationVersion table and replaced with Version field on Tenant table), updated version number to 0.9.0 and renamed install scripts to match - this will be a baseline release which will be upgradeable --- Oqtane.Client/Oqtane.Client.csproj | 2 +- .../Services/Interfaces/ISettingService.cs | 4 +- Oqtane.Client/Services/SettingService.cs | 8 +- Oqtane.Package/Oqtane.Framework.nuspec | 2 +- .../Controllers/SettingController.cs | 2 +- .../Infrastructure/DatabaseManager.cs | 65 +++++++------ .../Interfaces/IUpgradeManager.cs | 9 ++ .../Infrastructure/UpgradeManager.cs | 93 +++++++++++++++++++ Oqtane.Server/Oqtane.Server.csproj | 8 +- .../Repository/Context/InstallationContext.cs | 2 - .../Repository/Interfaces/ISiteRepository.cs | 1 + Oqtane.Server/Repository/SiteRepository.cs | 2 +- .../{Master.00.00.00.sql => Master.0.9.0.sql} | 12 +-- Oqtane.Server/Scripts/Master.00.00.01.sql | 5 - .../{Tenant.00.00.00.sql => Tenant.0.9.0.sql} | 69 ++++++++++++++ Oqtane.Server/Scripts/Tenant.00.00.01.sql | 68 -------------- Oqtane.Server/Startup.cs | 2 +- Oqtane.Shared/Models/ApplicationVersion.cs | 11 --- Oqtane.Shared/Models/Tenant.cs | 1 + Oqtane.Shared/Oqtane.Shared.csproj | 2 +- Oqtane.Shared/Shared/Constants.cs | 3 +- Oqtane.Shared/Shared/EntityNames.cs | 2 +- Oqtane.Upgrade/Oqtane.Upgrade.csproj | 2 +- 23 files changed, 230 insertions(+), 145 deletions(-) create mode 100644 Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs create mode 100644 Oqtane.Server/Infrastructure/UpgradeManager.cs rename Oqtane.Server/Scripts/{Master.00.00.00.sql => Master.0.9.0.sql} (90%) delete mode 100644 Oqtane.Server/Scripts/Master.00.00.01.sql rename Oqtane.Server/Scripts/{Tenant.00.00.00.sql => Tenant.0.9.0.sql} (86%) delete mode 100644 Oqtane.Server/Scripts/Tenant.00.00.01.sql delete mode 100644 Oqtane.Shared/Models/ApplicationVersion.cs diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj index fbae9656..2e86a59a 100644 --- a/Oqtane.Client/Oqtane.Client.csproj +++ b/Oqtane.Client/Oqtane.Client.csproj @@ -6,7 +6,7 @@ 7.3 3.0 Debug;Release - 0.0.9 + 0.9.0 Oqtane Shaun Walker .NET Foundation diff --git a/Oqtane.Client/Services/Interfaces/ISettingService.cs b/Oqtane.Client/Services/Interfaces/ISettingService.cs index f7c06591..97c6266d 100644 --- a/Oqtane.Client/Services/Interfaces/ISettingService.cs +++ b/Oqtane.Client/Services/Interfaces/ISettingService.cs @@ -6,9 +6,9 @@ namespace Oqtane.Services { public interface ISettingService { - Task> GetHostSettingsAsync(); + Task> GetTenantSettingsAsync(); - Task UpdateHostSettingsAsync(Dictionary hostSettings); + Task UpdateTenantSettingsAsync(Dictionary tenantSettings); Task> GetSiteSettingsAsync(int siteId); diff --git a/Oqtane.Client/Services/SettingService.cs b/Oqtane.Client/Services/SettingService.cs index d966fb92..c1d96915 100644 --- a/Oqtane.Client/Services/SettingService.cs +++ b/Oqtane.Client/Services/SettingService.cs @@ -26,14 +26,14 @@ namespace Oqtane.Services get { return CreateApiUrl(_siteState.Alias, _navigationManager.Uri, "Setting"); } } - public async Task> GetHostSettingsAsync() + public async Task> GetTenantSettingsAsync() { - return await GetSettingsAsync(EntityNames.Host, -1); + return await GetSettingsAsync(EntityNames.Tenant, -1); } - public async Task UpdateHostSettingsAsync(Dictionary hostSettings) + public async Task UpdateTenantSettingsAsync(Dictionary tenantSettings) { - await UpdateSettingsAsync(hostSettings, EntityNames.Host, -1); + await UpdateSettingsAsync(tenantSettings, EntityNames.Tenant, -1); } public async Task> GetSiteSettingsAsync(int siteId) diff --git a/Oqtane.Package/Oqtane.Framework.nuspec b/Oqtane.Package/Oqtane.Framework.nuspec index 20827508..b537a230 100644 --- a/Oqtane.Package/Oqtane.Framework.nuspec +++ b/Oqtane.Package/Oqtane.Framework.nuspec @@ -2,7 +2,7 @@ Oqtane.Framework - 0.0.9 + 0.9.0 Shaun Walker .NET Foundation Oqtane Framework diff --git a/Oqtane.Server/Controllers/SettingController.cs b/Oqtane.Server/Controllers/SettingController.cs index 2599fde7..44437344 100644 --- a/Oqtane.Server/Controllers/SettingController.cs +++ b/Oqtane.Server/Controllers/SettingController.cs @@ -123,7 +123,7 @@ namespace Oqtane.Controllers } switch (entityName) { - case EntityNames.Host: + case EntityNames.Tenant: authorized = User.IsInRole(Constants.HostRole); break; case EntityNames.Site: diff --git a/Oqtane.Server/Infrastructure/DatabaseManager.cs b/Oqtane.Server/Infrastructure/DatabaseManager.cs index 863a8ce4..61b62589 100644 --- a/Oqtane.Server/Infrastructure/DatabaseManager.cs +++ b/Oqtane.Server/Infrastructure/DatabaseManager.cs @@ -26,7 +26,6 @@ namespace Oqtane.Infrastructure private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IMemoryCache _cache; - public DatabaseManager(IConfigurationRoot config, IServiceScopeFactory serviceScopeFactory, IMemoryCache cache) { _config = config; @@ -217,7 +216,6 @@ namespace Oqtane.Infrastructure if (result.Success) { - CreateApplicationVersion(install.ConnectionString); UpdateConnectionString(install.ConnectionString); } } @@ -277,21 +275,43 @@ namespace Oqtane.Infrastructure { var result = new Installation { Success = false, Message = string.Empty }; - using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))) - { - foreach (var tenant in db.Tenant.ToList()) - { - var upgradeConfig = DeployChanges.To.SqlDatabase(NormalizeConnectionString(tenant.DBConnectionString)) - .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly(), s => s.Contains("Tenant") && s.EndsWith(".sql",StringComparison.OrdinalIgnoreCase)); + string[] versions = Constants.ReleaseVersions.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - var upgrade = upgradeConfig.Build(); - if (upgrade.IsUpgradeRequired()) + using (var scope = _serviceScopeFactory.CreateScope()) + { + var upgrades = scope.ServiceProvider.GetRequiredService(); + + using (var db = new InstallationContext(NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))) + { + foreach (var tenant in db.Tenant.ToList()) { - var upgradeResult = upgrade.PerformUpgrade(); - result.Success = upgradeResult.Successful; - if (!result.Success) + var upgradeConfig = DeployChanges.To.SqlDatabase(NormalizeConnectionString(tenant.DBConnectionString)) + .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly(), s => s.Contains("Tenant.") && s.EndsWith(".sql", StringComparison.OrdinalIgnoreCase)); + + var upgrade = upgradeConfig.Build(); + if (upgrade.IsUpgradeRequired()) { - result.Message = upgradeResult.Error.Message; + var upgradeResult = upgrade.PerformUpgrade(); + result.Success = upgradeResult.Successful; + if (!result.Success) + { + result.Message = upgradeResult.Error.Message; + } + } + + // execute any version specific upgrade logic + string version = tenant.Version; + int index = Array.FindIndex(versions, item => item == version); + if (index != (versions.Length - 1)) + { + if (index == -1) index = 0; + for (int i = index; i < versions.Length; i++) + { + upgrades.Upgrade(tenant, versions[i]); + } + tenant.Version = versions[versions.Length - 1]; + db.Entry(tenant).State = EntityState.Modified; + db.SaveChanges(); } } } @@ -460,6 +480,9 @@ namespace Oqtane.Infrastructure aliases.UpdateAlias(alias); } + tenant.Version = Constants.Version; + tenants.UpdateTenant(tenant); + log.Log(site.SiteId, LogLevel.Trace, this, LogFunction.Create, "Site Created {Site}", site); } } @@ -469,20 +492,6 @@ namespace Oqtane.Infrastructure return result; } - - private void CreateApplicationVersion(string connectionString) - { - using (var db = new InstallationContext(NormalizeConnectionString(connectionString))) - { - var version = db.ApplicationVersion.FirstOrDefault(item => item.Version == Constants.Version); - if (version == null) - { - version = new ApplicationVersion { Version = Constants.Version, CreatedOn = DateTime.UtcNow }; - db.ApplicationVersion.Add(version); - db.SaveChanges(); - } - } - } private string NormalizeConnectionString(string connectionString) { diff --git a/Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs b/Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs new file mode 100644 index 00000000..e941bbfd --- /dev/null +++ b/Oqtane.Server/Infrastructure/Interfaces/IUpgradeManager.cs @@ -0,0 +1,9 @@ +using Oqtane.Models; + +namespace Oqtane.Infrastructure +{ + public interface IUpgradeManager + { + void Upgrade(Tenant tenant, string version); + } +} diff --git a/Oqtane.Server/Infrastructure/UpgradeManager.cs b/Oqtane.Server/Infrastructure/UpgradeManager.cs new file mode 100644 index 00000000..2c538d97 --- /dev/null +++ b/Oqtane.Server/Infrastructure/UpgradeManager.cs @@ -0,0 +1,93 @@ +using Microsoft.Extensions.DependencyInjection; +using Oqtane.Extensions; +using Oqtane.Models; +using Oqtane.Repository; +using Oqtane.Shared; +using System.Collections.Generic; +using System.Linq; + +namespace Oqtane.Infrastructure +{ + public class UpgradeManager : IUpgradeManager + { + private readonly IAliasRepository _aliases; + private readonly IServiceScopeFactory _serviceScopeFactory; + + public UpgradeManager(IAliasRepository aliases, IServiceScopeFactory serviceScopeFactory) + { + _aliases = aliases; + _serviceScopeFactory = serviceScopeFactory; + } + + public void Upgrade(Tenant tenant, string version) + { + // core framework upgrade logic - note that you can check if current tenant is Master if you only want to execute logic once + var pageTemplates = new List(); + + switch (version) + { + case "0.9.0": + // add a page to all existing sites on upgrade + + //pageTemplates.Add(new PageTemplate + //{ + // Name = "Test", + // Parent = "", + // Path = "test", + // Icon = Icons.Badge, + // IsNavigation = true, + // IsPersonalizable = false, + // EditMode = false, + // PagePermissions = new List + // { + // new Permission(PermissionNames.View, Constants.AdminRole, true), + // new Permission(PermissionNames.View, Constants.AllUsersRole, true), + // new Permission(PermissionNames.Edit, Constants.AdminRole, true) + // }.EncodePermissions(), + // PageTemplateModules = new List + // { + // new PageTemplateModule + // { + // ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Login.Index).ToModuleDefinitionName(), Title = "Test", Pane = "Content", + // ModulePermissions = new List + // { + // new Permission(PermissionNames.View, Constants.AdminRole, true), + // new Permission(PermissionNames.View, Constants.AllUsersRole, true), + // new Permission(PermissionNames.Edit, Constants.AdminRole, true) + // }.EncodePermissions(), + // Content = "" + // } + // } + //}); + CreateSitePages(tenant, pageTemplates); + break; + } + } + + private void CreateSitePages(Tenant tenant, List pageTemplates) + { + if (pageTemplates.Count != 0) + { + var processed = new List(); + foreach (Alias alias in _aliases.GetAliases().Where(item => item.TenantId == tenant.TenantId)) + { + if (!processed.Exists(item => item.SiteId == alias.SiteId)) + { + using (var scope = _serviceScopeFactory.CreateScope()) + { + var siteState = scope.ServiceProvider.GetRequiredService(); + siteState.Alias = alias; + var sites = scope.ServiceProvider.GetRequiredService(); + var site = sites.GetSite(alias.SiteId); + if (site != null) + { + sites.CreatePages(site, pageTemplates); + } + processed.Add(site); + } + } + } + } + } + } +} diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj index 347e9fc0..43102d3c 100644 --- a/Oqtane.Server/Oqtane.Server.csproj +++ b/Oqtane.Server/Oqtane.Server.csproj @@ -4,7 +4,7 @@ netcoreapp3.1 7.3 Debug;Release - 0.0.9 + 0.9.0 Oqtane Shaun Walker .NET Foundation @@ -20,10 +20,8 @@ - - - - + + diff --git a/Oqtane.Server/Repository/Context/InstallationContext.cs b/Oqtane.Server/Repository/Context/InstallationContext.cs index 18694939..29bfc281 100644 --- a/Oqtane.Server/Repository/Context/InstallationContext.cs +++ b/Oqtane.Server/Repository/Context/InstallationContext.cs @@ -21,7 +21,5 @@ namespace Oqtane.Repository public virtual DbSet Tenant { get; set; } public virtual DbSet ModuleDefinition { get; set; } public virtual DbSet Job { get; set; } - - public virtual DbSet ApplicationVersion { get; set; } } } diff --git a/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs b/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs index 5e05dccf..c8cfec23 100644 --- a/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs +++ b/Oqtane.Server/Repository/Interfaces/ISiteRepository.cs @@ -10,5 +10,6 @@ namespace Oqtane.Repository Site UpdateSite(Site site); Site GetSite(int siteId); void DeleteSite(int siteId); + void CreatePages(Site site, List pageTemplates); } } diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index 0e39a6bf..3dea955c 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -731,7 +731,7 @@ namespace Oqtane.Repository CreatePages(site, CreateAdminPages()); } - private void CreatePages(Site site, List pageTemplates) + public void CreatePages(Site site, List pageTemplates) { List moduledefinitions = _moduleDefinitionRepository.GetModuleDefinitions(site.SiteId).ToList(); foreach (PageTemplate pagetemplate in pageTemplates) diff --git a/Oqtane.Server/Scripts/Master.00.00.00.sql b/Oqtane.Server/Scripts/Master.0.9.0.sql similarity index 90% rename from Oqtane.Server/Scripts/Master.00.00.00.sql rename to Oqtane.Server/Scripts/Master.0.9.0.sql index fcfdd3ef..8f569dbb 100644 --- a/Oqtane.Server/Scripts/Master.00.00.00.sql +++ b/Oqtane.Server/Scripts/Master.0.9.0.sql @@ -7,6 +7,7 @@ CREATE TABLE [dbo].[Tenant]( [TenantId] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](100) NOT NULL, [DBConnectionString] [nvarchar](1024) NOT NULL, + [Version] [nvarchar](50) NULL, [CreatedBy] [nvarchar](256) NOT NULL, [CreatedOn] [datetime] NOT NULL, [ModifiedBy] [nvarchar](256) NOT NULL, @@ -91,17 +92,6 @@ CREATE TABLE [dbo].[JobLog] ( ) GO -CREATE TABLE [dbo].[ApplicationVersion]( - [ApplicationVersionId] [int] IDENTITY(1,1) NOT NULL, - [Version] [nvarchar](50) NOT NULL, - [CreatedOn] [datetime] NOT NULL - CONSTRAINT [PK_ApplicationVersion] PRIMARY KEY CLUSTERED - ( - [ApplicationVersionId] ASC - ) -) -GO - /* Create foreign key relationships diff --git a/Oqtane.Server/Scripts/Master.00.00.01.sql b/Oqtane.Server/Scripts/Master.00.00.01.sql deleted file mode 100644 index 49ec882c..00000000 --- a/Oqtane.Server/Scripts/Master.00.00.01.sql +++ /dev/null @@ -1,5 +0,0 @@ -/* - -schema updates - -*/ diff --git a/Oqtane.Server/Scripts/Tenant.00.00.00.sql b/Oqtane.Server/Scripts/Tenant.0.9.0.sql similarity index 86% rename from Oqtane.Server/Scripts/Tenant.00.00.00.sql rename to Oqtane.Server/Scripts/Tenant.0.9.0.sql index 1d0e540f..81a0df24 100644 --- a/Oqtane.Server/Scripts/Tenant.00.00.00.sql +++ b/Oqtane.Server/Scripts/Tenant.0.9.0.sql @@ -457,3 +457,72 @@ CREATE UNIQUE NONCLUSTERED INDEX IX_Folder ON [dbo].Folder [Path] ) ON [PRIMARY] GO + +/* + +ASP.NET Identity Minimal Schema + +*/ + +CREATE TABLE [dbo].[AspNetUsers]( + [Id] [nvarchar](450) NOT NULL, + [UserName] [nvarchar](256) NULL, + [NormalizedUserName] [nvarchar](256) NULL, + [Email] [nvarchar](256) NULL, + [NormalizedEmail] [nvarchar](256) NULL, + [EmailConfirmed] [bit] NOT NULL, + [PasswordHash] [nvarchar](max) NULL, + [SecurityStamp] [nvarchar](max) NULL, + [ConcurrencyStamp] [nvarchar](max) NULL, + [PhoneNumber] [nvarchar](max) NULL, + [PhoneNumberConfirmed] [bit] NOT NULL, + [TwoFactorEnabled] [bit] NOT NULL, + [LockoutEnd] [datetimeoffset](7) NULL, + [LockoutEnabled] [bit] NOT NULL, + [AccessFailedCount] [int] NOT NULL, + CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED +( + [Id] ASC +) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[AspNetUserClaims]( + [Id] [int] IDENTITY(1,1) NOT NULL, + [UserId] [nvarchar](450) NOT NULL, + [ClaimType] [nvarchar](max) NULL, + [ClaimValue] [nvarchar](max) NULL, + CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY CLUSTERED +( + [Id] ASC +) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE NONCLUSTERED INDEX [IX_AspNetUserClaims_UserId] ON [dbo].[AspNetUserClaims] +( + [UserId] ASC +) ON [PRIMARY] +GO + +CREATE NONCLUSTERED INDEX [EmailIndex] ON [dbo].[AspNetUsers] +( + [NormalizedEmail] ASC +) ON [PRIMARY] +GO + +CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex] ON [dbo].[AspNetUsers] +( + [NormalizedUserName] ASC +) +WHERE ([NormalizedUserName] IS NOT NULL) +ON [PRIMARY] +GO + +ALTER TABLE [dbo].[AspNetUserClaims] WITH CHECK ADD CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY([UserId]) +REFERENCES [dbo].[AspNetUsers] ([Id]) +ON DELETE CASCADE +GO + +ALTER TABLE [dbo].[AspNetUserClaims] CHECK CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] +GO diff --git a/Oqtane.Server/Scripts/Tenant.00.00.01.sql b/Oqtane.Server/Scripts/Tenant.00.00.01.sql deleted file mode 100644 index 90118490..00000000 --- a/Oqtane.Server/Scripts/Tenant.00.00.01.sql +++ /dev/null @@ -1,68 +0,0 @@ -/* - -ASP.NET Identity Minimal Schema - -*/ - -CREATE TABLE [dbo].[AspNetUsers]( - [Id] [nvarchar](450) NOT NULL, - [UserName] [nvarchar](256) NULL, - [NormalizedUserName] [nvarchar](256) NULL, - [Email] [nvarchar](256) NULL, - [NormalizedEmail] [nvarchar](256) NULL, - [EmailConfirmed] [bit] NOT NULL, - [PasswordHash] [nvarchar](max) NULL, - [SecurityStamp] [nvarchar](max) NULL, - [ConcurrencyStamp] [nvarchar](max) NULL, - [PhoneNumber] [nvarchar](max) NULL, - [PhoneNumberConfirmed] [bit] NOT NULL, - [TwoFactorEnabled] [bit] NOT NULL, - [LockoutEnd] [datetimeoffset](7) NULL, - [LockoutEnabled] [bit] NOT NULL, - [AccessFailedCount] [int] NOT NULL, - CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED -( - [Id] ASC -) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] -GO - -CREATE TABLE [dbo].[AspNetUserClaims]( - [Id] [int] IDENTITY(1,1) NOT NULL, - [UserId] [nvarchar](450) NOT NULL, - [ClaimType] [nvarchar](max) NULL, - [ClaimValue] [nvarchar](max) NULL, - CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY CLUSTERED -( - [Id] ASC -) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] -GO - -CREATE NONCLUSTERED INDEX [IX_AspNetUserClaims_UserId] ON [dbo].[AspNetUserClaims] -( - [UserId] ASC -) ON [PRIMARY] -GO - -CREATE NONCLUSTERED INDEX [EmailIndex] ON [dbo].[AspNetUsers] -( - [NormalizedEmail] ASC -) ON [PRIMARY] -GO - -CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex] ON [dbo].[AspNetUsers] -( - [NormalizedUserName] ASC -) -WHERE ([NormalizedUserName] IS NOT NULL) -ON [PRIMARY] -GO - -ALTER TABLE [dbo].[AspNetUserClaims] WITH CHECK ADD CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY([UserId]) -REFERENCES [dbo].[AspNetUsers] ([Id]) -ON DELETE CASCADE -GO - -ALTER TABLE [dbo].[AspNetUserClaims] CHECK CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] -GO diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 9e24a6fa..00b5f188 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -9,7 +9,6 @@ using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -186,6 +185,7 @@ namespace Oqtane services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); // load the external assemblies into the app domain services.AddOqtaneModules(); diff --git a/Oqtane.Shared/Models/ApplicationVersion.cs b/Oqtane.Shared/Models/ApplicationVersion.cs deleted file mode 100644 index 9babb7cd..00000000 --- a/Oqtane.Shared/Models/ApplicationVersion.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Oqtane.Models -{ - public class ApplicationVersion - { - public int ApplicationVersionId { get; set; } - public string Version { get; set; } - public DateTime CreatedOn { get; set; } - } -} diff --git a/Oqtane.Shared/Models/Tenant.cs b/Oqtane.Shared/Models/Tenant.cs index ed392544..645f1e97 100644 --- a/Oqtane.Shared/Models/Tenant.cs +++ b/Oqtane.Shared/Models/Tenant.cs @@ -7,6 +7,7 @@ namespace Oqtane.Models public int TenantId { get; set; } public string Name { get; set; } public string DBConnectionString { get; set; } + public string Version { get; set; } public string CreatedBy { get; set; } public DateTime CreatedOn { get; set; } public string ModifiedBy { get; set; } diff --git a/Oqtane.Shared/Oqtane.Shared.csproj b/Oqtane.Shared/Oqtane.Shared.csproj index 6a0c0d87..131d6055 100644 --- a/Oqtane.Shared/Oqtane.Shared.csproj +++ b/Oqtane.Shared/Oqtane.Shared.csproj @@ -4,7 +4,7 @@ netstandard2.1 7.3 Debug;Release - 0.0.9 + 0.9.0 Oqtane Shaun Walker .NET Foundation diff --git a/Oqtane.Shared/Shared/Constants.cs b/Oqtane.Shared/Shared/Constants.cs index f4edd1ce..847e7a9e 100644 --- a/Oqtane.Shared/Shared/Constants.cs +++ b/Oqtane.Shared/Shared/Constants.cs @@ -3,7 +3,8 @@ public class Constants { public const string PackageId = "Oqtane.Framework"; - public const string Version = "0.0.9"; + public const string Version = "0.9.0"; + public const string ReleaseVersions = "0.9.0"; public const string PageComponent = "Oqtane.UI.ThemeBuilder, Oqtane.Client"; public const string ContainerComponent = "Oqtane.UI.ContainerBuilder, Oqtane.Client"; diff --git a/Oqtane.Shared/Shared/EntityNames.cs b/Oqtane.Shared/Shared/EntityNames.cs index 569e0603..345267f3 100644 --- a/Oqtane.Shared/Shared/EntityNames.cs +++ b/Oqtane.Shared/Shared/EntityNames.cs @@ -5,7 +5,7 @@ public const string Module = "Module"; public const string ModuleDefinition = "ModuleDefinition"; public const string PageModule = "PageModule"; - public const string Host = "Host"; + public const string Tenant = "Tenant"; public const string Site = "Site"; public const string Page = "Page"; public const string Folder = "Folder"; diff --git a/Oqtane.Upgrade/Oqtane.Upgrade.csproj b/Oqtane.Upgrade/Oqtane.Upgrade.csproj index dad498df..f4437db3 100644 --- a/Oqtane.Upgrade/Oqtane.Upgrade.csproj +++ b/Oqtane.Upgrade/Oqtane.Upgrade.csproj @@ -4,7 +4,7 @@ netcoreapp3.1 7.3 Exe - 0.0.9 + 0.9.0 Oqtane Shaun Walker .NET Foundation