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