diff --git a/src/PinkParrot.Events/TenantEvent.cs b/src/PinkParrot.Events/AppEvent.cs similarity index 81% rename from src/PinkParrot.Events/TenantEvent.cs rename to src/PinkParrot.Events/AppEvent.cs index 4debe0f8f..176a3fbb6 100644 --- a/src/PinkParrot.Events/TenantEvent.cs +++ b/src/PinkParrot.Events/AppEvent.cs @@ -1,5 +1,5 @@ // ========================================================================== -// TenantEvent.cs +// AppEvent.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -11,8 +11,8 @@ using PinkParrot.Infrastructure.CQRS.Events; namespace PinkParrot.Events { - public class TenantEvent : IEvent + public class AppEvent : IEvent { - public Guid TenantId { get; set; } + public Guid AppId { get; set; } } } diff --git a/src/PinkParrot.Events/Apps/AppCreated.cs b/src/PinkParrot.Events/Apps/AppCreated.cs index edd6b3bff..e358e3235 100644 --- a/src/PinkParrot.Events/Apps/AppCreated.cs +++ b/src/PinkParrot.Events/Apps/AppCreated.cs @@ -6,10 +6,12 @@ // All rights reserved. // ========================================================================== +using PinkParrot.Infrastructure; using PinkParrot.Infrastructure.CQRS.Events; namespace PinkParrot.Events.Apps { + [TypeName("AppCreated")] public class AppCreated : IEvent { public string Name { get; set; } diff --git a/src/PinkParrot.Events/Schemas/FieldAdded.cs b/src/PinkParrot.Events/Schemas/FieldAdded.cs index f706561c8..a2b2526b8 100644 --- a/src/PinkParrot.Events/Schemas/FieldAdded.cs +++ b/src/PinkParrot.Events/Schemas/FieldAdded.cs @@ -12,7 +12,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldAddedEvent")] - public class FieldAdded : TenantEvent + public class FieldAdded : AppEvent { public long FieldId { get; set; } diff --git a/src/PinkParrot.Events/Schemas/FieldDeleted.cs b/src/PinkParrot.Events/Schemas/FieldDeleted.cs index 431f7915e..a0c15bcd8 100644 --- a/src/PinkParrot.Events/Schemas/FieldDeleted.cs +++ b/src/PinkParrot.Events/Schemas/FieldDeleted.cs @@ -11,7 +11,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldDeletedEvent")] - public class FieldDeleted : TenantEvent + public class FieldDeleted : AppEvent { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Events/Schemas/FieldDisabled.cs b/src/PinkParrot.Events/Schemas/FieldDisabled.cs index de1698c9b..13959641a 100644 --- a/src/PinkParrot.Events/Schemas/FieldDisabled.cs +++ b/src/PinkParrot.Events/Schemas/FieldDisabled.cs @@ -11,7 +11,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldDisabledEvent")] - public class FieldDisabled : TenantEvent + public class FieldDisabled : AppEvent { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Events/Schemas/FieldEnabled.cs b/src/PinkParrot.Events/Schemas/FieldEnabled.cs index 2bc088b54..aa3062829 100644 --- a/src/PinkParrot.Events/Schemas/FieldEnabled.cs +++ b/src/PinkParrot.Events/Schemas/FieldEnabled.cs @@ -11,7 +11,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldEnabledEvent")] - public class FieldEnabled : TenantEvent + public class FieldEnabled : AppEvent { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Events/Schemas/FieldHidden.cs b/src/PinkParrot.Events/Schemas/FieldHidden.cs index 6c3b62666..d24fd6c8f 100644 --- a/src/PinkParrot.Events/Schemas/FieldHidden.cs +++ b/src/PinkParrot.Events/Schemas/FieldHidden.cs @@ -11,7 +11,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldHiddenEvent")] - public class FieldHidden : TenantEvent + public class FieldHidden : AppEvent { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Events/Schemas/FieldShown.cs b/src/PinkParrot.Events/Schemas/FieldShown.cs index 668c71f81..00ef75e65 100644 --- a/src/PinkParrot.Events/Schemas/FieldShown.cs +++ b/src/PinkParrot.Events/Schemas/FieldShown.cs @@ -11,7 +11,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldShownEvent")] - public class FieldShown : TenantEvent + public class FieldShown : AppEvent { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Events/Schemas/FieldUpdated.cs b/src/PinkParrot.Events/Schemas/FieldUpdated.cs index 7452979b0..594e517e8 100644 --- a/src/PinkParrot.Events/Schemas/FieldUpdated.cs +++ b/src/PinkParrot.Events/Schemas/FieldUpdated.cs @@ -12,7 +12,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("FieldUpdatedEvent")] - public class FieldUpdated : TenantEvent + public class FieldUpdated : AppEvent { public long FieldId { get; set; } diff --git a/src/PinkParrot.Events/Schemas/SchemaCreated.cs b/src/PinkParrot.Events/Schemas/SchemaCreated.cs index cca321c77..990dbb3d1 100644 --- a/src/PinkParrot.Events/Schemas/SchemaCreated.cs +++ b/src/PinkParrot.Events/Schemas/SchemaCreated.cs @@ -12,7 +12,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("SchemaCreatedEvent")] - public class SchemaCreated : TenantEvent + public class SchemaCreated : AppEvent { public string Name { get; set; } diff --git a/src/PinkParrot.Events/Schemas/SchemaDeleted.cs b/src/PinkParrot.Events/Schemas/SchemaDeleted.cs index 3d05a1f77..0ed6e76be 100644 --- a/src/PinkParrot.Events/Schemas/SchemaDeleted.cs +++ b/src/PinkParrot.Events/Schemas/SchemaDeleted.cs @@ -11,7 +11,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("SchemaDeleted")] - public class SchemaDeleted : TenantEvent + public class SchemaDeleted : AppEvent { } } diff --git a/src/PinkParrot.Events/Schemas/SchemaUpdated.cs b/src/PinkParrot.Events/Schemas/SchemaUpdated.cs index 4651a7e60..9f61651a9 100644 --- a/src/PinkParrot.Events/Schemas/SchemaUpdated.cs +++ b/src/PinkParrot.Events/Schemas/SchemaUpdated.cs @@ -12,7 +12,7 @@ using PinkParrot.Infrastructure; namespace PinkParrot.Events.Schemas { [TypeName("SchemaUpdated")] - public class SchemaUpdated : TenantEvent + public class SchemaUpdated : AppEvent { public SchemaProperties Properties { get; set; } } diff --git a/src/PinkParrot.Infrastructure/CQRS/CommonHeaders.cs b/src/PinkParrot.Infrastructure/CQRS/CommonHeaders.cs index 4c1c529d1..6d368583c 100644 --- a/src/PinkParrot.Infrastructure/CQRS/CommonHeaders.cs +++ b/src/PinkParrot.Infrastructure/CQRS/CommonHeaders.cs @@ -12,7 +12,7 @@ namespace PinkParrot.Infrastructure.CQRS public const string AggregateId = "AggregateId"; public const string CommitId = "CommitId"; public const string Timestamp = "Timestamp"; - public const string TenantId = "TenantId"; + public const string AppId = "AppId"; public const string EventId = "EventId"; public const string EventNumber = "EventNumber"; } diff --git a/src/PinkParrot.Infrastructure/CQRS/EnvelopeExtensions.cs b/src/PinkParrot.Infrastructure/CQRS/EnvelopeExtensions.cs index 98b6bcbde..6f9751d5c 100644 --- a/src/PinkParrot.Infrastructure/CQRS/EnvelopeExtensions.cs +++ b/src/PinkParrot.Infrastructure/CQRS/EnvelopeExtensions.cs @@ -62,14 +62,14 @@ namespace PinkParrot.Infrastructure.CQRS return envelope; } - public static Guid TenantId(this EnvelopeHeaders headers) + public static Guid AppId(this EnvelopeHeaders headers) { - return headers[CommonHeaders.TenantId].ToGuid(CultureInfo.InvariantCulture); + return headers[CommonHeaders.AppId].ToGuid(CultureInfo.InvariantCulture); } - public static Envelope SetTenantId(this Envelope envelope, Guid value) where T : class + public static Envelope SetAppId(this Envelope envelope, Guid value) where T : class { - envelope.Headers.Set(CommonHeaders.TenantId, value); + envelope.Headers.Set(CommonHeaders.AppId, value); return envelope; } diff --git a/src/PinkParrot.Infrastructure/CQRS/EnvelopeFactory.cs b/src/PinkParrot.Infrastructure/CQRS/EnvelopeFactory.cs index d523d1587..21334625a 100644 --- a/src/PinkParrot.Infrastructure/CQRS/EnvelopeFactory.cs +++ b/src/PinkParrot.Infrastructure/CQRS/EnvelopeFactory.cs @@ -24,11 +24,11 @@ namespace PinkParrot.Infrastructure.CQRS .SetEventId(eventId) .SetTimestamp(SystemClock.Instance.GetCurrentInstant()); - var tenantAggregate = aggregate as ITenantAggregate; + var appAggregate = aggregate as IAppAggregate; - if (tenantAggregate != null) + if (appAggregate != null) { - envelope = envelope.SetTenantId(tenantAggregate.TenantId); + envelope = envelope.SetAppId(appAggregate.AppId); } return envelope; diff --git a/src/PinkParrot.Infrastructure/CQRS/ITenantAggregate.cs b/src/PinkParrot.Infrastructure/CQRS/IAppAggregate.cs similarity index 78% rename from src/PinkParrot.Infrastructure/CQRS/ITenantAggregate.cs rename to src/PinkParrot.Infrastructure/CQRS/IAppAggregate.cs index 702fd4c1e..07c2761e4 100644 --- a/src/PinkParrot.Infrastructure/CQRS/ITenantAggregate.cs +++ b/src/PinkParrot.Infrastructure/CQRS/IAppAggregate.cs @@ -1,5 +1,5 @@ // ========================================================================== -// ITenantAggregate.cs +// IAppAggregate.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -10,8 +10,8 @@ using System; namespace PinkParrot.Infrastructure.CQRS { - public interface ITenantAggregate : IAggregate + public interface IAppAggregate : IAggregate { - Guid TenantId { get; } + Guid AppId { get; } } } diff --git a/src/PinkParrot.Read/Apps/IAppEntity.cs b/src/PinkParrot.Read/Apps/IAppEntity.cs new file mode 100644 index 000000000..a8895e5b6 --- /dev/null +++ b/src/PinkParrot.Read/Apps/IAppEntity.cs @@ -0,0 +1,14 @@ +// ========================================================================== +// IAppEntity.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== +namespace PinkParrot.Read.Apps +{ + public interface IAppEntity : IEntity + { + string Name { get; } + } +} diff --git a/src/PinkParrot.Read/Apps/Repositories/IAppRepository.cs b/src/PinkParrot.Read/Apps/Repositories/IAppRepository.cs new file mode 100644 index 000000000..02c0f295b --- /dev/null +++ b/src/PinkParrot.Read/Apps/Repositories/IAppRepository.cs @@ -0,0 +1,17 @@ +// ========================================================================== +// IAppRepository.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using System.Threading.Tasks; + +namespace PinkParrot.Read.Apps.Repositories +{ + public interface IAppRepository + { + Task FindAppByNameAsync(string name); + } +} diff --git a/src/PinkParrot.Read/Infrastructure/Services/ITenantProvider.cs b/src/PinkParrot.Read/Apps/Services/IAppProvider.cs similarity index 68% rename from src/PinkParrot.Read/Infrastructure/Services/ITenantProvider.cs rename to src/PinkParrot.Read/Apps/Services/IAppProvider.cs index b1e1cdfcb..ddbffe0f4 100644 --- a/src/PinkParrot.Read/Infrastructure/Services/ITenantProvider.cs +++ b/src/PinkParrot.Read/Apps/Services/IAppProvider.cs @@ -1,5 +1,5 @@ // ========================================================================== -// ITenantProvider.cs +// IAppProvider.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -9,10 +9,10 @@ using System; using System.Threading.Tasks; -namespace PinkParrot.Read.Infrastructure.Services +namespace PinkParrot.Read.Apps.Services { - public interface ITenantProvider + public interface IAppProvider { - Task ProvideTenantIdByDomainAsync(string domain); + Task FindAppIdByNameAsync(string name); } } diff --git a/src/PinkParrot.Read/Apps/Services/Implementations/CachingAppProvider.cs b/src/PinkParrot.Read/Apps/Services/Implementations/CachingAppProvider.cs new file mode 100644 index 000000000..2ae634f0c --- /dev/null +++ b/src/PinkParrot.Read/Apps/Services/Implementations/CachingAppProvider.cs @@ -0,0 +1,61 @@ +// ========================================================================== +// CachingAppProvider.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Memory; +using PinkParrot.Infrastructure; +using PinkParrot.Read.Apps.Repositories; +using PinkParrot.Read.Utils; +// ReSharper disable InvertIf + +namespace PinkParrot.Read.Apps.Services.Implementations +{ + public class CachingAppProvider : CachingProvider, IAppProvider + { + private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(30); + private readonly IAppRepository appRepository; + + private sealed class CacheItem + { + public IAppEntity Entity; + } + + public CachingAppProvider(IMemoryCache cache, IAppRepository appRepository) + : base(cache) + { + Guard.NotNull(cache, nameof(cache)); + + this.appRepository = appRepository; + } + + public async Task FindAppIdByNameAsync(string name) + { + Guard.NotNullOrEmpty(name, nameof(name)); + + var cacheKey = BulidCacheKey(name); + var cacheItem = Cache.Get(cacheKey); + + if (cacheItem == null) + { + var app = await appRepository.FindAppByNameAsync(name); + + cacheItem = new CacheItem { Entity = app }; + + Cache.Set(cacheKey, cacheItem, new MemoryCacheEntryOptions { SlidingExpiration = CacheDuration }); + } + + return cacheItem.Entity?.Id; + } + + private static string BulidCacheKey(string name) + { + return $"App_{name}"; + } + } +} diff --git a/src/PinkParrot.Read/Schemas/Repositories/ITenantEntity.cs b/src/PinkParrot.Read/IAppEntity.cs similarity index 70% rename from src/PinkParrot.Read/Schemas/Repositories/ITenantEntity.cs rename to src/PinkParrot.Read/IAppEntity.cs index f4f2cab7a..51baa377c 100644 --- a/src/PinkParrot.Read/Schemas/Repositories/ITenantEntity.cs +++ b/src/PinkParrot.Read/IAppEntity.cs @@ -1,5 +1,5 @@ // ========================================================================== -// ITenantEntity.cs +// IAppEntity.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -8,10 +8,10 @@ using System; -namespace PinkParrot.Read.Schemas.Repositories +namespace PinkParrot.Read { - public interface ITenantEntity : IEntity + public interface IAppEntity : IEntity { - Guid TenantId { get; set; } + Guid AppId { get; set; } } } \ No newline at end of file diff --git a/src/PinkParrot.Read/Schemas/Repositories/IEntity.cs b/src/PinkParrot.Read/IEntity.cs similarity index 91% rename from src/PinkParrot.Read/Schemas/Repositories/IEntity.cs rename to src/PinkParrot.Read/IEntity.cs index 7db15490f..9b07c9d56 100644 --- a/src/PinkParrot.Read/Schemas/Repositories/IEntity.cs +++ b/src/PinkParrot.Read/IEntity.cs @@ -8,7 +8,7 @@ using System; -namespace PinkParrot.Read.Schemas.Repositories +namespace PinkParrot.Read { public interface IEntity { diff --git a/src/PinkParrot.Read/Infrastructure/Services/Implementations/TenantProvider.cs b/src/PinkParrot.Read/Infrastructure/Services/Implementations/TenantProvider.cs deleted file mode 100644 index 65bc5637f..000000000 --- a/src/PinkParrot.Read/Infrastructure/Services/Implementations/TenantProvider.cs +++ /dev/null @@ -1,21 +0,0 @@ -// ========================================================================== -// TenantProvider.cs -// PinkParrot Headless CMS -// ========================================================================== -// Copyright (c) PinkParrot Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Threading.Tasks; - -namespace PinkParrot.Read.Infrastructure.Services.Implementations -{ - public sealed class TenantProvider : ITenantProvider - { - public Task ProvideTenantIdByDomainAsync(string domain) - { - return Task.FromResult(Guid.Empty); - } - } -} diff --git a/src/PinkParrot.Read/Schemas/Repositories/ISchemaEntity.cs b/src/PinkParrot.Read/Schemas/Repositories/ISchemaEntity.cs index 1bae35aed..4c686e50c 100644 --- a/src/PinkParrot.Read/Schemas/Repositories/ISchemaEntity.cs +++ b/src/PinkParrot.Read/Schemas/Repositories/ISchemaEntity.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Read.Schemas.Repositories { - public interface ISchemaEntity : ITenantEntity + public interface ISchemaEntity : IAppEntity { string Name { get; } } diff --git a/src/PinkParrot.Read/Schemas/Repositories/ISchemaRepository.cs b/src/PinkParrot.Read/Schemas/Repositories/ISchemaRepository.cs index 597164033..647fa800f 100644 --- a/src/PinkParrot.Read/Schemas/Repositories/ISchemaRepository.cs +++ b/src/PinkParrot.Read/Schemas/Repositories/ISchemaRepository.cs @@ -14,11 +14,11 @@ namespace PinkParrot.Read.Schemas.Repositories { public interface ISchemaRepository { - Task> QueryAllAsync(Guid tenantId); + Task> QueryAllAsync(Guid appId); - Task FindSchemaIdAsync(Guid tenantId, string name); + Task FindSchemaIdAsync(Guid appId, string name); - Task FindSchemaAsync(Guid tenantId, string name); + Task FindSchemaAsync(Guid appId, string name); Task FindSchemaAsync(Guid schemaId); } diff --git a/src/PinkParrot.Read/Schemas/Services/ISchemaProvider.cs b/src/PinkParrot.Read/Schemas/Services/ISchemaProvider.cs index 34576e382..0490c6c95 100644 --- a/src/PinkParrot.Read/Schemas/Services/ISchemaProvider.cs +++ b/src/PinkParrot.Read/Schemas/Services/ISchemaProvider.cs @@ -13,6 +13,6 @@ namespace PinkParrot.Read.Schemas.Services { public interface ISchemaProvider { - Task FindSchemaIdByNameAsync(Guid tenantId, string name); + Task FindSchemaIdByNameAsync(Guid appId, string name); } } diff --git a/src/PinkParrot.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs b/src/PinkParrot.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs index 466365a57..777a01b46 100644 --- a/src/PinkParrot.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs +++ b/src/PinkParrot.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs @@ -14,74 +14,72 @@ using PinkParrot.Infrastructure; using PinkParrot.Infrastructure.CQRS; using PinkParrot.Infrastructure.CQRS.Events; using PinkParrot.Read.Schemas.Repositories; +using PinkParrot.Read.Utils; // ReSharper disable InvertIf namespace PinkParrot.Read.Schemas.Services.Implementations { - public class CachingSchemaProvider : ISchemaProvider, ILiveEventConsumer + public class CachingSchemaProvider : CachingProvider, ISchemaProvider, ILiveEventConsumer { private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10); - private readonly IMemoryCache cache; private readonly ISchemaRepository repository; - public sealed class CacheItem + private sealed class CacheItem { public ISchemaEntityWithSchema Entity; } public CachingSchemaProvider(IMemoryCache cache, ISchemaRepository repository) + : base(cache) { - Guard.NotNull(cache, nameof(cache)); Guard.NotNull(repository, nameof(repository)); - this.cache = cache; - this.repository = repository; } - public async Task FindSchemaIdByNameAsync(Guid tenantId, string name) + public async Task FindSchemaIdByNameAsync(Guid appId, string name) { Guard.NotNullOrEmpty(name, nameof(name)); - var cacheKey = BuildModelsCacheKey(tenantId, name); - var cacheItem = cache.Get(cacheKey); + var cacheKey = BuildModelsCacheKey(appId, name); + var cacheItem = Cache.Get(cacheKey); if (cacheItem == null) { - var schema = await repository.FindSchemaAsync(tenantId, name); + var schema = await repository.FindSchemaAsync(appId, name); cacheItem = new CacheItem { Entity = schema }; - cache.Set(cacheKey, cacheItem, CacheDuration); + Cache.Set(cacheKey, cacheItem, CacheDuration); if (cacheItem.Entity != null) { - cache.Set(BuildNamesCacheKey(cacheItem.Entity.Id), cacheItem.Entity.Name, CacheDuration); + Cache.Set(BuildNamesCacheKey(cacheItem.Entity.Id), cacheItem.Entity.Name, CacheDuration); } } - return cacheItem?.Entity?.Id; + return cacheItem.Entity?.Id; } public Task On(Envelope @event) { if (@event.Payload is SchemaUpdated || @event.Payload is SchemaDeleted) { - var oldName = cache.Get(BuildNamesCacheKey(@event.Headers.AggregateId())); + var oldName = Cache.Get(BuildNamesCacheKey(@event.Headers.AggregateId())); if (oldName != null) { - cache.Remove(BuildModelsCacheKey(@event.Headers.TenantId(), oldName)); + Cache.Remove(BuildModelsCacheKey(@event.Headers.AppId(), oldName)); } } return Task.FromResult(true); } - private static string BuildModelsCacheKey(Guid tenantId, string name) + private static string BuildModelsCacheKey(Guid appId, string name) { - return $"Schemas_Models_{tenantId}_{name}"; + return $"Schemas_Models_{appId}_{name}"; } private static string BuildNamesCacheKey(Guid schemaId) diff --git a/src/PinkParrot.Read/Utils/CachingProvider.cs b/src/PinkParrot.Read/Utils/CachingProvider.cs new file mode 100644 index 000000000..9885cf0b2 --- /dev/null +++ b/src/PinkParrot.Read/Utils/CachingProvider.cs @@ -0,0 +1,30 @@ +// ========================================================================== +// CachingProvider.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using Microsoft.Extensions.Caching.Memory; +using PinkParrot.Infrastructure; + +namespace PinkParrot.Read.Utils +{ + public abstract class CachingProvider + { + private readonly IMemoryCache cache; + + protected IMemoryCache Cache + { + get { return cache; } + } + + protected CachingProvider(IMemoryCache cache) + { + Guard.NotNull(cache, nameof(cache)); + + this.cache = cache; + } + } +} diff --git a/src/PinkParrot.Store.MongoDb/Properties/AssemblyInfo.cs b/src/PinkParrot.Store.MongoDb/Properties/AssemblyInfo.cs index 01fc833cc..db38c8889 100644 --- a/src/PinkParrot.Store.MongoDb/Properties/AssemblyInfo.cs +++ b/src/PinkParrot.Store.MongoDb/Properties/AssemblyInfo.cs @@ -1,5 +1,12 @@ -using System.Reflection; -using System.Runtime.CompilerServices; +// ========================================================================== +// AssemblyInfo.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using System.Reflection; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaEntity.cs b/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaEntity.cs index 05d7d715a..c9d321c15 100644 --- a/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaEntity.cs +++ b/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaEntity.cs @@ -40,7 +40,7 @@ namespace PinkParrot.Store.MongoDb.Schemas [BsonRequired] [BsonElement] - public Guid TenantId { get; set; } + public Guid AppId { get; set; } [BsonRequired] [BsonElement] diff --git a/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaRepository.cs b/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaRepository.cs index 4255b2e81..2784906dc 100644 --- a/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaRepository.cs +++ b/src/PinkParrot.Store.MongoDb/Schemas/MongoSchemaRepository.cs @@ -44,17 +44,17 @@ namespace PinkParrot.Store.MongoDb.Schemas return collection.Indexes.CreateOneAsync(IndexKeys.Ascending(x => x.Name)); } - public async Task> QueryAllAsync(Guid tenantId) + public async Task> QueryAllAsync(Guid appId) { - var entities = await Collection.Find(s => s.TenantId == tenantId && !s.IsDeleted).ToListAsync(); + var entities = await Collection.Find(s => s.AppId == appId && !s.IsDeleted).ToListAsync(); return entities.OfType().ToList(); } - public async Task FindSchemaAsync(Guid tenantId, string name) + public async Task FindSchemaAsync(Guid appId, string name) { var entity = - await Collection.Find(s => s.Name == name && s.TenantId == tenantId && !s.IsDeleted) + await Collection.Find(s => s.Name == name && s.AppId == appId && !s.IsDeleted) .FirstOrDefaultAsync(); entity?.DeserializeSchema(serializerSettings, fieldRegistry); @@ -73,10 +73,10 @@ namespace PinkParrot.Store.MongoDb.Schemas return entity; } - public async Task FindSchemaIdAsync(Guid tenantId, string name) + public async Task FindSchemaIdAsync(Guid appId, string name) { var entity = - await Collection.Find(s => s.Name == name & s.TenantId == tenantId && !s.IsDeleted) + await Collection.Find(s => s.Name == name & s.AppId == appId && !s.IsDeleted) .Project(Projection.Include(x => x.Id)).FirstOrDefaultAsync(); return entity?.Id; diff --git a/src/PinkParrot.Store.MongoDb/Utils/EntityMapper.cs b/src/PinkParrot.Store.MongoDb/Utils/EntityMapper.cs index d58f0770a..0d8563293 100644 --- a/src/PinkParrot.Store.MongoDb/Utils/EntityMapper.cs +++ b/src/PinkParrot.Store.MongoDb/Utils/EntityMapper.cs @@ -12,7 +12,7 @@ using MongoDB.Bson; using MongoDB.Driver; using Newtonsoft.Json; using PinkParrot.Infrastructure.CQRS; -using PinkParrot.Read.Schemas.Repositories; +using PinkParrot.Read; namespace PinkParrot.Store.MongoDb.Utils { @@ -24,11 +24,11 @@ namespace PinkParrot.Store.MongoDb.Utils var entity = new T { Id = headers.AggregateId(), Created = timestamp }; - var tenantEntity = entity as ITenantEntity; + var appEntity = entity as IAppEntity; - if (tenantEntity != null) + if (appEntity != null) { - tenantEntity.TenantId = headers.TenantId(); + appEntity.AppId = headers.AppId(); } return Update(entity, headers); diff --git a/src/PinkParrot.Write/TenantCommand.cs b/src/PinkParrot.Write/AppCommand.cs similarity index 75% rename from src/PinkParrot.Write/TenantCommand.cs rename to src/PinkParrot.Write/AppCommand.cs index 83311c4f9..8f61437ea 100644 --- a/src/PinkParrot.Write/TenantCommand.cs +++ b/src/PinkParrot.Write/AppCommand.cs @@ -1,5 +1,5 @@ // ========================================================================== -// TenantCommand.cs +// AppCommand.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -11,8 +11,8 @@ using PinkParrot.Infrastructure.CQRS.Commands; namespace PinkParrot.Write { - public abstract class TenantCommand : AggregateCommand, ITenantCommand + public abstract class AppCommand : AggregateCommand, IAppCommand { - public Guid TenantId { get; set; } + public Guid AppId { get; set; } } } diff --git a/src/PinkParrot.Write/ITenantCommand.cs b/src/PinkParrot.Write/IAppCommand.cs similarity index 80% rename from src/PinkParrot.Write/ITenantCommand.cs rename to src/PinkParrot.Write/IAppCommand.cs index 013d9e8a4..548e9e60c 100644 --- a/src/PinkParrot.Write/ITenantCommand.cs +++ b/src/PinkParrot.Write/IAppCommand.cs @@ -1,5 +1,5 @@ // ========================================================================== -// ITenantCommand.cs +// IAppCommand.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -11,8 +11,8 @@ using PinkParrot.Infrastructure.CQRS.Commands; namespace PinkParrot.Write { - public interface ITenantCommand : ICommand + public interface IAppCommand : ICommand { - Guid TenantId { get; set; } + Guid AppId { get; set; } } } \ No newline at end of file diff --git a/src/PinkParrot.Write/Schemas/Commands/AddField.cs b/src/PinkParrot.Write/Schemas/Commands/AddField.cs index 44d72b814..49c056fc5 100644 --- a/src/PinkParrot.Write/Schemas/Commands/AddField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/AddField.cs @@ -10,7 +10,7 @@ using Newtonsoft.Json.Linq; namespace PinkParrot.Write.Schemas.Commands { - public class AddField : TenantCommand + public class AddField : AppCommand { public string Name { get; set; } diff --git a/src/PinkParrot.Write/Schemas/Commands/CreateSchema.cs b/src/PinkParrot.Write/Schemas/Commands/CreateSchema.cs index 472dab565..30f6d4acf 100644 --- a/src/PinkParrot.Write/Schemas/Commands/CreateSchema.cs +++ b/src/PinkParrot.Write/Schemas/Commands/CreateSchema.cs @@ -10,7 +10,7 @@ using PinkParrot.Core.Schemas; namespace PinkParrot.Write.Schemas.Commands { - public class CreateSchema : TenantCommand + public class CreateSchema : AppCommand { public string Name { get; set; } diff --git a/src/PinkParrot.Write/Schemas/Commands/DeleteField.cs b/src/PinkParrot.Write/Schemas/Commands/DeleteField.cs index cbf2950ff..bfd9b8e5e 100644 --- a/src/PinkParrot.Write/Schemas/Commands/DeleteField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/DeleteField.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Write.Schemas.Commands { - public class DeleteField : TenantCommand + public class DeleteField : AppCommand { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Write/Schemas/Commands/DeleteSchema.cs b/src/PinkParrot.Write/Schemas/Commands/DeleteSchema.cs index 61f30be9f..80b5b68b1 100644 --- a/src/PinkParrot.Write/Schemas/Commands/DeleteSchema.cs +++ b/src/PinkParrot.Write/Schemas/Commands/DeleteSchema.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Write.Schemas.Commands { - public class DeleteSchema : TenantCommand + public class DeleteSchema : AppCommand { } } \ No newline at end of file diff --git a/src/PinkParrot.Write/Schemas/Commands/DisableField.cs b/src/PinkParrot.Write/Schemas/Commands/DisableField.cs index fff582301..24e6987c7 100644 --- a/src/PinkParrot.Write/Schemas/Commands/DisableField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/DisableField.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Write.Schemas.Commands { - public class DisableField : TenantCommand + public class DisableField : AppCommand { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Write/Schemas/Commands/EnableField.cs b/src/PinkParrot.Write/Schemas/Commands/EnableField.cs index 17417d552..4d707af6a 100644 --- a/src/PinkParrot.Write/Schemas/Commands/EnableField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/EnableField.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Write.Schemas.Commands { - public class EnableField : TenantCommand + public class EnableField : AppCommand { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Write/Schemas/Commands/HideField.cs b/src/PinkParrot.Write/Schemas/Commands/HideField.cs index 1d9f25c83..e59c11e89 100644 --- a/src/PinkParrot.Write/Schemas/Commands/HideField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/HideField.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Write.Schemas.Commands { - public class HideField : TenantCommand + public class HideField : AppCommand { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Write/Schemas/Commands/ShowField.cs b/src/PinkParrot.Write/Schemas/Commands/ShowField.cs index 231098c13..06789805d 100644 --- a/src/PinkParrot.Write/Schemas/Commands/ShowField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/ShowField.cs @@ -7,7 +7,7 @@ // ========================================================================== namespace PinkParrot.Write.Schemas.Commands { - public class ShowField : TenantCommand + public class ShowField : AppCommand { public long FieldId { get; set; } } diff --git a/src/PinkParrot.Write/Schemas/Commands/UpdateField.cs b/src/PinkParrot.Write/Schemas/Commands/UpdateField.cs index 8e307182f..968da781a 100644 --- a/src/PinkParrot.Write/Schemas/Commands/UpdateField.cs +++ b/src/PinkParrot.Write/Schemas/Commands/UpdateField.cs @@ -10,7 +10,7 @@ using Newtonsoft.Json.Linq; namespace PinkParrot.Write.Schemas.Commands { - public class UpdateField : TenantCommand + public class UpdateField : AppCommand { public long FieldId { get; set; } diff --git a/src/PinkParrot.Write/Schemas/Commands/UpdateSchema.cs b/src/PinkParrot.Write/Schemas/Commands/UpdateSchema.cs index dfd36b11e..781372833 100644 --- a/src/PinkParrot.Write/Schemas/Commands/UpdateSchema.cs +++ b/src/PinkParrot.Write/Schemas/Commands/UpdateSchema.cs @@ -10,7 +10,7 @@ using PinkParrot.Core.Schemas; namespace PinkParrot.Write.Schemas.Commands { - public class UpdateSchema : TenantCommand + public class UpdateSchema : AppCommand { public SchemaProperties Properties { get; set; } } diff --git a/src/PinkParrot.Write/Schemas/SchemaCommandHandler.cs b/src/PinkParrot.Write/Schemas/SchemaCommandHandler.cs index fad18eb18..83bf725a4 100644 --- a/src/PinkParrot.Write/Schemas/SchemaCommandHandler.cs +++ b/src/PinkParrot.Write/Schemas/SchemaCommandHandler.cs @@ -45,13 +45,13 @@ namespace PinkParrot.Write.Schemas public async Task On(CreateSchema command) { - if (await schemaProvider.FindSchemaIdByNameAsync(command.TenantId, command.Name) != null) + if (await schemaProvider.FindSchemaIdByNameAsync(command.AppId, command.Name) != null) { var error = new ValidationError($"A schema with name '{command.Name}' already exists", "Name"); throw new ValidationException("Cannot create a new schema", error); } - await CreateAsync(command, s => s.Create(command.TenantId, command.Name, command.Properties)); + await CreateAsync(command, s => s.Create(command.AppId, command.Name, command.Properties)); } public Task On(DeleteSchema command) diff --git a/src/PinkParrot.Write/Schemas/SchemaDomainObject.cs b/src/PinkParrot.Write/Schemas/SchemaDomainObject.cs index 3dd286354..eeb7ffcf3 100644 --- a/src/PinkParrot.Write/Schemas/SchemaDomainObject.cs +++ b/src/PinkParrot.Write/Schemas/SchemaDomainObject.cs @@ -16,10 +16,10 @@ using PinkParrot.Infrastructure.Dispatching; namespace PinkParrot.Write.Schemas { - public class SchemaDomainObject : DomainObject, ITenantAggregate + public class SchemaDomainObject : DomainObject, IAppAggregate { private readonly FieldRegistry registry; - private Guid tenantId; + private Guid appId; private bool isDeleted; private long totalFields; private Schema schema; @@ -29,9 +29,9 @@ namespace PinkParrot.Write.Schemas get { return schema; } } - public Guid TenantId + public Guid AppId { - get { return tenantId; } + get { return appId; } } public bool IsDeleted @@ -56,7 +56,7 @@ namespace PinkParrot.Write.Schemas public void On(SchemaCreated @event) { - tenantId = @event.TenantId; + appId = @event.AppId; schema = Schema.Create(@event.Name, @event.Properties); } @@ -108,11 +108,11 @@ namespace PinkParrot.Write.Schemas RaiseEvent(new FieldAdded { FieldId = ++totalFields, Name = name, Properties = properties }); } - public void Create(Guid newTenantId, string name, SchemaProperties properties) + public void Create(Guid newAppId, string name, SchemaProperties properties) { VerifyNotCreated(); - RaiseEvent(new SchemaCreated { TenantId = newTenantId, Name = name, Properties = properties }); + RaiseEvent(new SchemaCreated { AppId = newAppId, Name = name, Properties = properties }); } public void Update(SchemaProperties properties) diff --git a/src/PinkParrot/Configurations/InfrastructureUsage.cs b/src/PinkParrot/Configurations/InfrastructureUsage.cs index 22fa27146..e306458dc 100644 --- a/src/PinkParrot/Configurations/InfrastructureUsage.cs +++ b/src/PinkParrot/Configurations/InfrastructureUsage.cs @@ -13,9 +13,9 @@ namespace PinkParrot.Configurations { public static class InfrastructureUsage { - public static void UseTenants(this IApplicationBuilder app) + public static void UseApps(this IApplicationBuilder app) { - app.UseMiddleware(); + app.UseMiddleware(); } } } diff --git a/src/PinkParrot/Configurations/ReadModule.cs b/src/PinkParrot/Configurations/ReadModule.cs index c214d0938..855ad8932 100644 --- a/src/PinkParrot/Configurations/ReadModule.cs +++ b/src/PinkParrot/Configurations/ReadModule.cs @@ -8,8 +8,8 @@ using Autofac; using PinkParrot.Infrastructure.CQRS.Events; -using PinkParrot.Read.Infrastructure.Services; -using PinkParrot.Read.Infrastructure.Services.Implementations; +using PinkParrot.Read.Apps.Services; +using PinkParrot.Read.Apps.Services.Implementations; using PinkParrot.Read.Schemas.Repositories; using PinkParrot.Read.Schemas.Services; using PinkParrot.Read.Schemas.Services.Implementations; @@ -21,8 +21,8 @@ namespace PinkParrot.Configurations { protected override void Load(ContainerBuilder builder) { - builder.RegisterType() - .As() + builder.RegisterType() + .As() .SingleInstance(); builder.RegisterType() diff --git a/src/PinkParrot/Configurations/WriteModule.cs b/src/PinkParrot/Configurations/WriteModule.cs index 30a08f683..eb66d406f 100644 --- a/src/PinkParrot/Configurations/WriteModule.cs +++ b/src/PinkParrot/Configurations/WriteModule.cs @@ -21,7 +21,7 @@ namespace PinkParrot.Configurations .As() .SingleInstance(); - builder.RegisterType() + builder.RegisterType() .As() .SingleInstance(); diff --git a/src/PinkParrot/Modules/Api/Schemas/SchemasController.cs b/src/PinkParrot/Modules/Api/Schemas/SchemasController.cs index 63f48ead7..47df02b81 100644 --- a/src/PinkParrot/Modules/Api/Schemas/SchemasController.cs +++ b/src/PinkParrot/Modules/Api/Schemas/SchemasController.cs @@ -37,7 +37,7 @@ namespace PinkParrot.Modules.Api.Schemas [Route("api/schemas/")] public async Task> Query() { - var schemas = await schemaRepository.QueryAllAsync(TenantId); + var schemas = await schemaRepository.QueryAllAsync(AppId); return schemas.Select(s => SimpleMapper.Map(s, new ListSchemaDto())).ToList(); } @@ -46,7 +46,7 @@ namespace PinkParrot.Modules.Api.Schemas [Route("api/schemas/{name}/")] public async Task Get(string name) { - var entity = await schemaRepository.FindSchemaAsync(TenantId, name); + var entity = await schemaRepository.FindSchemaAsync(AppId, name); if (entity == null) { diff --git a/src/PinkParrot/Modules/ControllerBase.cs b/src/PinkParrot/Modules/ControllerBase.cs index 3cc00c7c7..5f8d37b4c 100644 --- a/src/PinkParrot/Modules/ControllerBase.cs +++ b/src/PinkParrot/Modules/ControllerBase.cs @@ -22,18 +22,18 @@ namespace PinkParrot.Modules CommandBus = commandBus; } - public Guid TenantId + public Guid AppId { get { - var tenantFeature = HttpContext.Features.Get(); + var appFeature = HttpContext.Features.Get(); - if (tenantFeature == null) + if (appFeature == null) { - throw new InvalidOperationException("Not in a tenant context"); + throw new InvalidOperationException("Not in a app context"); } - return tenantFeature.TenantId; + return appFeature.AppId; } } } diff --git a/src/PinkParrot/Pipeline/AppFeature.cs b/src/PinkParrot/Pipeline/AppFeature.cs new file mode 100644 index 000000000..7c786226f --- /dev/null +++ b/src/PinkParrot/Pipeline/AppFeature.cs @@ -0,0 +1,14 @@ +using System; + +namespace PinkParrot.Pipeline +{ + public sealed class AppFeature : IAppFeature + { + public Guid AppId { get; } + + public AppFeature(Guid appId) + { + AppId = appId; + } + } +} \ No newline at end of file diff --git a/src/PinkParrot/Pipeline/AppMiddleware.cs b/src/PinkParrot/Pipeline/AppMiddleware.cs new file mode 100644 index 000000000..89d575cc8 --- /dev/null +++ b/src/PinkParrot/Pipeline/AppMiddleware.cs @@ -0,0 +1,39 @@ +// ========================================================================== +// AppMiddleware.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using PinkParrot.Read.Apps.Services; + +namespace PinkParrot.Pipeline +{ + public sealed class AppMiddleware + { + private readonly IAppProvider appProvider; + private readonly RequestDelegate next; + + public AppMiddleware(RequestDelegate next, IAppProvider appProvider) + { + this.next = next; + + this.appProvider = appProvider; + } + + public async Task Invoke(HttpContext context) + { + var appId = await appProvider.FindAppIdByNameAsync(context.Request.Host.ToString().Split('.')[0]); + + if (appId.HasValue) + { + context.Features.Set(new AppFeature(appId.Value)); + } + + await next(context); + } + } +} diff --git a/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAggregateIdHandler.cs b/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAggregateIdHandler.cs index a96b4a77c..ec333bb30 100644 --- a/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAggregateIdHandler.cs +++ b/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAggregateIdHandler.cs @@ -40,9 +40,9 @@ namespace PinkParrot.Pipeline.CommandHandlers return false; } - var tenantCommand = context.Command as ITenantCommand; + var appCommand = context.Command as IAppCommand; - if (tenantCommand == null) + if (appCommand == null) { return false; } @@ -53,7 +53,7 @@ namespace PinkParrot.Pipeline.CommandHandlers { var schemaName = routeValues["name"].ToString(); - var id = await schemaProvider.FindSchemaIdByNameAsync(tenantCommand.TenantId, schemaName); + var id = await schemaProvider.FindSchemaIdByNameAsync(appCommand.AppId, schemaName); if (!id.HasValue) { diff --git a/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithTenantIdHandler.cs b/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAppIdHandler.cs similarity index 65% rename from src/PinkParrot/Pipeline/CommandHandlers/EnrichWithTenantIdHandler.cs rename to src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAppIdHandler.cs index 3128dc7ae..739229625 100644 --- a/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithTenantIdHandler.cs +++ b/src/PinkParrot/Pipeline/CommandHandlers/EnrichWithAppIdHandler.cs @@ -1,5 +1,5 @@ // ========================================================================== -// EnrichWithTenantIdHandler.cs +// EnrichWithAppIdHandler.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -16,29 +16,29 @@ using PinkParrot.Write; namespace PinkParrot.Pipeline.CommandHandlers { - public sealed class EnrichWithTenantIdHandler : ICommandHandler + public sealed class EnrichWithAppIdHandler : ICommandHandler { private readonly IHttpContextAccessor httpContextAccessor; - public EnrichWithTenantIdHandler(IHttpContextAccessor httpContextAccessor) + public EnrichWithAppIdHandler(IHttpContextAccessor httpContextAccessor) { this.httpContextAccessor = httpContextAccessor; } public Task HandleAsync(CommandContext context) { - var tenantCommand = context.Command as ITenantCommand; + var appCommand = context.Command as IAppCommand; - if (tenantCommand != null) + if (appCommand != null) { - var tenantFeature = httpContextAccessor.HttpContext.Features.Get(); + var appFeature = httpContextAccessor.HttpContext.Features.Get(); - if (tenantFeature == null) + if (appFeature == null) { - throw new InvalidOperationException("Cannot reslolve tenant"); + throw new InvalidOperationException("Cannot resolve app"); } - tenantCommand.TenantId = tenantFeature.TenantId; + appCommand.AppId = appFeature.AppId; } return Task.FromResult(false); diff --git a/src/PinkParrot/Pipeline/ITenantFeature.cs b/src/PinkParrot/Pipeline/IAppFeature.cs similarity index 81% rename from src/PinkParrot/Pipeline/ITenantFeature.cs rename to src/PinkParrot/Pipeline/IAppFeature.cs index 465169d7a..88c7498fb 100644 --- a/src/PinkParrot/Pipeline/ITenantFeature.cs +++ b/src/PinkParrot/Pipeline/IAppFeature.cs @@ -1,5 +1,5 @@ // ========================================================================== -// ITenantFeature.cs +// IAppFeature.cs // PinkParrot Headless CMS // ========================================================================== // Copyright (c) PinkParrot Group @@ -10,8 +10,8 @@ using System; namespace PinkParrot.Pipeline { - public interface ITenantFeature + public interface IAppFeature { - Guid TenantId { get; } + Guid AppId { get; } } } diff --git a/src/PinkParrot/Pipeline/TenantMiddleware.cs b/src/PinkParrot/Pipeline/TenantMiddleware.cs deleted file mode 100644 index b52093692..000000000 --- a/src/PinkParrot/Pipeline/TenantMiddleware.cs +++ /dev/null @@ -1,45 +0,0 @@ -// ========================================================================== -// TenantMiddleware.cs -// PinkParrot Headless CMS -// ========================================================================== -// Copyright (c) PinkParrot Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using PinkParrot.Read.Infrastructure.Services; - -namespace PinkParrot.Pipeline -{ - public sealed class TenantMiddleware - { - private readonly ITenantProvider tenantProvider; - private readonly RequestDelegate next; - - public TenantMiddleware(RequestDelegate next, ITenantProvider tenantProvider) - { - this.next = next; - - this.tenantProvider = tenantProvider; - } - - private class TenantFeature : ITenantFeature - { - public Guid TenantId { get; set; } - } - - public async Task Invoke(HttpContext context) - { - var tenantId = await tenantProvider.ProvideTenantIdByDomainAsync(context.Request.Host.ToString()); - - if (tenantId.HasValue) - { - context.Features.Set(new TenantFeature { TenantId = tenantId.Value }); - } - - await next(context); - } - } -} diff --git a/src/PinkParrot/Startup.cs b/src/PinkParrot/Startup.cs index 43db88f30..fa767f3ae 100644 --- a/src/PinkParrot/Startup.cs +++ b/src/PinkParrot/Startup.cs @@ -69,7 +69,7 @@ namespace PinkParrot app.UseDeveloperExceptionPage(); } - app.UseTenants(); + app.UseApps(); app.UseMvc(); app.UseStaticFiles(); app.UseEventStore(); diff --git a/tests/PinkParrot.Write.Tests/Apps/AppDomainObjectTest.cs b/tests/PinkParrot.Write.Tests/Apps/AppDomainObjectTest.cs index 36fd9eaf2..8af8b9603 100644 --- a/tests/PinkParrot.Write.Tests/Apps/AppDomainObjectTest.cs +++ b/tests/PinkParrot.Write.Tests/Apps/AppDomainObjectTest.cs @@ -1,7 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +// ========================================================================== +// AppDomainObjectTest.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using System; using PinkParrot.Infrastructure; using PinkParrot.Write.Apps; using PinkParrot.Write.Apps.Commands; diff --git a/tests/PinkParrot.Write.Tests/Properties/AssemblyInfo.cs b/tests/PinkParrot.Write.Tests/Properties/AssemblyInfo.cs index 1b84cf89d..d3e3ee973 100644 --- a/tests/PinkParrot.Write.Tests/Properties/AssemblyInfo.cs +++ b/tests/PinkParrot.Write.Tests/Properties/AssemblyInfo.cs @@ -1,5 +1,12 @@ -using System.Reflection; -using System.Runtime.CompilerServices; +// ========================================================================== +// AssemblyInfo.cs +// PinkParrot Headless CMS +// ========================================================================== +// Copyright (c) PinkParrot Group +// All rights reserved. +// ========================================================================== + +using System.Reflection; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following