remove unique index of TenantId and Name from Site table as site name does not need to be unique. Remove TenantId column from Site table as it is not necessary and should be obtained from the Alias.
This commit is contained in:
@@ -683,7 +683,7 @@
|
|||||||
{
|
{
|
||||||
var tenants = await TenantService.GetTenantsAsync();
|
var tenants = await TenantService.GetTenantsAsync();
|
||||||
var _databases = await DatabaseService.GetDatabasesAsync();
|
var _databases = await DatabaseService.GetDatabasesAsync();
|
||||||
var tenant = tenants.Find(item => item.TenantId == site.TenantId);
|
var tenant = tenants.Find(item => item.TenantId == PageState.Alias.TenantId);
|
||||||
if (tenant != null)
|
if (tenant != null)
|
||||||
{
|
{
|
||||||
_tenant = tenant.Name;
|
_tenant = tenant.Name;
|
||||||
@@ -886,17 +886,17 @@
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var aliases = await AliasService.GetAliasesAsync();
|
var aliases = await AliasService.GetAliasesAsync();
|
||||||
if (aliases.Any(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Site.TenantId))
|
if (aliases.Any(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Alias.TenantId))
|
||||||
{
|
{
|
||||||
await SiteService.DeleteSiteAsync(PageState.Site.SiteId);
|
await SiteService.DeleteSiteAsync(PageState.Site.SiteId);
|
||||||
await logger.LogInformation("Site Deleted {SiteId}", PageState.Site.SiteId);
|
await logger.LogInformation("Site Deleted {SiteId}", PageState.Site.SiteId);
|
||||||
|
|
||||||
foreach (Alias alias in aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Site.TenantId))
|
foreach (Alias alias in aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Alias.TenantId))
|
||||||
{
|
{
|
||||||
await AliasService.DeleteAliasAsync(alias.AliasId);
|
await AliasService.DeleteAliasAsync(alias.AliasId);
|
||||||
}
|
}
|
||||||
|
|
||||||
var redirect = aliases.First(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Site.TenantId);
|
var redirect = aliases.First(item => item.SiteId != PageState.Site.SiteId || item.TenantId != PageState.Alias.TenantId);
|
||||||
NavigationManager.NavigateTo(PageState.Uri.Scheme + "://" + redirect.Name, true);
|
NavigationManager.NavigateTo(PageState.Uri.Scheme + "://" + redirect.Name, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -993,7 +993,7 @@
|
|||||||
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
||||||
{
|
{
|
||||||
_aliases = await AliasService.GetAliasesAsync();
|
_aliases = await AliasService.GetAliasesAsync();
|
||||||
_aliases = _aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Site.TenantId).OrderBy(item => item.AliasId).ToList();
|
_aliases = _aliases.Where(item => item.SiteId == PageState.Site.SiteId && item.TenantId == PageState.Alias.TenantId).OrderBy(item => item.AliasId).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1046,7 +1046,7 @@
|
|||||||
{
|
{
|
||||||
if (_aliasid == 0)
|
if (_aliasid == 0)
|
||||||
{
|
{
|
||||||
alias = new Alias { SiteId = PageState.Site.SiteId, TenantId = PageState.Site.TenantId, Name = _aliasname, IsDefault = bool.Parse(_defaultalias) };
|
alias = new Alias { SiteId = PageState.Site.SiteId, TenantId = PageState.Alias.TenantId, Name = _aliasname, IsDefault = bool.Parse(_defaultalias) };
|
||||||
await AliasService.AddAliasAsync(alias);
|
await AliasService.AddAliasAsync(alias);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -271,7 +271,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tenants = await TenantService.GetTenantsAsync();
|
var tenants = await TenantService.GetTenantsAsync();
|
||||||
_tenant = tenants.Find(item => item.TenantId == PageState.Site.TenantId).Name;
|
_tenant = tenants.Find(item => item.TenantId == PageState.Alias.TenantId).Name;
|
||||||
_history = await MigrationHistoryService.GetMigrationHistoryAsync();
|
_history = await MigrationHistoryService.GetMigrationHistoryAsync();
|
||||||
|
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
|
|||||||
@@ -579,7 +579,6 @@ namespace Oqtane.Infrastructure
|
|||||||
|
|
||||||
site = new Site
|
site = new Site
|
||||||
{
|
{
|
||||||
TenantId = tenant.TenantId,
|
|
||||||
Name = install.SiteName,
|
Name = install.SiteName,
|
||||||
LogoFileId = null,
|
LogoFileId = null,
|
||||||
FaviconFileId = null,
|
FaviconFileId = null,
|
||||||
@@ -596,7 +595,8 @@ namespace Oqtane.Infrastructure
|
|||||||
RenderMode = rendermode,
|
RenderMode = rendermode,
|
||||||
Runtime = runtime,
|
Runtime = runtime,
|
||||||
Prerender = (rendermode == RenderModes.Interactive),
|
Prerender = (rendermode == RenderModes.Interactive),
|
||||||
Hybrid = false
|
Hybrid = false,
|
||||||
|
TenantId = tenant.TenantId
|
||||||
};
|
};
|
||||||
site = sites.AddSite(site);
|
site = sites.AddSite(site);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Oqtane.Databases.Interfaces;
|
||||||
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
|
using Oqtane.Repository;
|
||||||
|
|
||||||
|
namespace Oqtane.Migrations.Tenant
|
||||||
|
{
|
||||||
|
[DbContext(typeof(TenantDBContext))]
|
||||||
|
[Migration("Tenant.10.00.01.02")]
|
||||||
|
public class RemoveSiteTenantId : MultiDatabaseMigration
|
||||||
|
{
|
||||||
|
public RemoveSiteTenantId(IDatabase database) : base(database)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||||
|
siteEntityBuilder.DropIndex("IX_Site"); // TenantId, Name
|
||||||
|
siteEntityBuilder.DropColumn("TenantId");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
// not implemented
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -148,6 +148,8 @@ namespace Oqtane.Services
|
|||||||
|
|
||||||
// installation date used for fingerprinting static assets
|
// installation date used for fingerprinting static assets
|
||||||
site.Fingerprint = Utilities.GenerateSimpleHash(_configManager.GetSetting("InstallationDate", DateTime.UtcNow.ToString("yyyyMMddHHmm")));
|
site.Fingerprint = Utilities.GenerateSimpleHash(_configManager.GetSetting("InstallationDate", DateTime.UtcNow.ToString("yyyyMMddHHmm")));
|
||||||
|
|
||||||
|
site.TenantId = alias.TenantId;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -181,7 +183,7 @@ namespace Oqtane.Services
|
|||||||
{
|
{
|
||||||
var alias = _tenantManager.GetAlias();
|
var alias = _tenantManager.GetAlias();
|
||||||
var current = _sites.GetSite(site.SiteId, false);
|
var current = _sites.GetSite(site.SiteId, false);
|
||||||
if (site.SiteId == alias.SiteId && site.TenantId == alias.TenantId && current != null)
|
if (site.SiteId == alias.SiteId && current != null)
|
||||||
{
|
{
|
||||||
site = _sites.UpdateSite(site);
|
site = _sites.UpdateSite(site);
|
||||||
_syncManager.AddSyncEvent(alias, EntityNames.Site, site.SiteId, SyncEventActions.Update);
|
_syncManager.AddSyncEvent(alias, EntityNames.Site, site.SiteId, SyncEventActions.Update);
|
||||||
|
|||||||
@@ -16,11 +16,6 @@ namespace Oqtane.Models
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int SiteId { get; set; }
|
public int SiteId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reference to the <see cref="Tenant"/> the Site is in
|
|
||||||
/// </summary>
|
|
||||||
public int TenantId { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The site Name
|
/// The site Name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -203,12 +198,17 @@ namespace Oqtane.Models
|
|||||||
[NotMapped]
|
[NotMapped]
|
||||||
public string Fingerprint { get; set; }
|
public string Fingerprint { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reference to the <see cref="Tenant"/> the Site belongs to
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public int TenantId { get; set; }
|
||||||
|
|
||||||
public Site Clone()
|
public Site Clone()
|
||||||
{
|
{
|
||||||
return new Site
|
return new Site
|
||||||
{
|
{
|
||||||
SiteId = SiteId,
|
SiteId = SiteId,
|
||||||
TenantId = TenantId,
|
|
||||||
Name = Name,
|
Name = Name,
|
||||||
TimeZoneId = TimeZoneId,
|
TimeZoneId = TimeZoneId,
|
||||||
LogoFileId = LogoFileId,
|
LogoFileId = LogoFileId,
|
||||||
@@ -246,7 +246,8 @@ namespace Oqtane.Models
|
|||||||
Pages = Pages.ConvertAll(page => page.Clone()),
|
Pages = Pages.ConvertAll(page => page.Clone()),
|
||||||
Languages = Languages.ConvertAll(language => language.Clone()),
|
Languages = Languages.ConvertAll(language => language.Clone()),
|
||||||
Themes = Themes,
|
Themes = Themes,
|
||||||
Fingerprint = Fingerprint
|
Fingerprint = Fingerprint,
|
||||||
|
TenantId = TenantId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user