diff --git a/Squidex.ruleset b/Squidex.ruleset
index a90cb38ec..71faa1a84 100644
--- a/Squidex.ruleset
+++ b/Squidex.ruleset
@@ -74,8 +74,9 @@
+
-
+
\ No newline at end of file
diff --git a/Squidex.sln.DotSettings b/Squidex.sln.DotSettings
index dd880d5ac..0f875a4d0 100644
--- a/Squidex.sln.DotSettings
+++ b/Squidex.sln.DotSettings
@@ -8,6 +8,5 @@
==========================================================================
Copyright (c) Squidex Group
All rights reserved.
-==========================================================================
-
+==========================================================================
\ No newline at end of file
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/AssetsFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/AssetsFieldProperties.cs
index 9043bea08..b57ebb249 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/AssetsFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/AssetsFieldProperties.cs
@@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("AssetsField")]
+ [TypeName(nameof(AssetsField))]
public sealed class AssetsFieldProperties : FieldProperties
{
private int? minItems;
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/BooleanFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/BooleanFieldProperties.cs
index 949ddcb95..8a3baa590 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/BooleanFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/BooleanFieldProperties.cs
@@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("BooleanField")]
+ [TypeName(nameof(BooleanField))]
public sealed class BooleanFieldProperties : FieldProperties
{
private BooleanFieldEditor editor;
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/DateTimeFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/DateTimeFieldProperties.cs
index 97fc37d2d..b725debe4 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/DateTimeFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/DateTimeFieldProperties.cs
@@ -14,7 +14,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("DateTime")]
+ [TypeName(nameof(DateTimeField))]
public sealed class DateTimeFieldProperties : FieldProperties
{
private DateTimeFieldEditor editor;
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/FieldRegistry.cs b/src/Squidex.Domain.Apps.Core/Schemas/FieldRegistry.cs
index 9bb178828..aedfb23cb 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/FieldRegistry.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/FieldRegistry.cs
@@ -78,6 +78,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
Add(
(id, name, partitioning, properties) =>
new GeolocationField(id, name, partitioning, (GeolocationFieldProperties)properties));
+
+ typeNameRegistry.MapObsolete(typeof(ReferencesFieldProperties), "DateTime");
+ typeNameRegistry.MapObsolete(typeof(DateTimeFieldProperties), "References");
}
private void Add(FactoryFunction fieldFactory)
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/GeolocationFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/GeolocationFieldProperties.cs
index 701f5d23b..d52f124d2 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/GeolocationFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/GeolocationFieldProperties.cs
@@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("GeolocationField")]
+ [TypeName(nameof(GeolocationField))]
public sealed class GeolocationFieldProperties : FieldProperties
{
private GeolocationFieldEditor editor;
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/JsonFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/JsonFieldProperties.cs
index a6db0b1d1..3dfcf1252 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/JsonFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/JsonFieldProperties.cs
@@ -12,7 +12,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("JsonField")]
+ [TypeName(nameof(JsonField))]
public sealed class JsonFieldProperties : FieldProperties
{
public override JToken GetDefaultValue()
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/NumberFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/NumberFieldProperties.cs
index 594ec2834..3d4cf9ff4 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/NumberFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/NumberFieldProperties.cs
@@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("NumberField")]
+ [TypeName(nameof(NumberField))]
public sealed class NumberFieldProperties : FieldProperties
{
private double? maxValue;
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/ReferencesFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/ReferencesFieldProperties.cs
index 25d73d70e..22279b93d 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/ReferencesFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/ReferencesFieldProperties.cs
@@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("References")]
+ [TypeName(nameof(ReferencesField))]
public sealed class ReferencesFieldProperties : FieldProperties
{
private int? minItems;
diff --git a/src/Squidex.Domain.Apps.Core/Schemas/StringFieldProperties.cs b/src/Squidex.Domain.Apps.Core/Schemas/StringFieldProperties.cs
index 5750a8480..eb70680ac 100644
--- a/src/Squidex.Domain.Apps.Core/Schemas/StringFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core/Schemas/StringFieldProperties.cs
@@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
{
- [TypeName("StringField")]
+ [TypeName(nameof(StringField))]
public sealed class StringFieldProperties : FieldProperties
{
private int? minLength;
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppClientAttached.cs b/src/Squidex.Domain.Apps.Events/Apps/AppClientAttached.cs
index b6e0bb1e1..04c07f839 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppClientAttached.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppClientAttached.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppClientAttachedEvent")]
+ [EventType(nameof(AppClientAttached))]
public sealed class AppClientAttached : AppEvent
{
public string Id { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppClientChanged.cs b/src/Squidex.Domain.Apps.Events/Apps/AppClientChanged.cs
index ed785ff5d..89aeb2b7a 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppClientChanged.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppClientChanged.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppClientChangedEvent")]
+ [EventType(nameof(AppClientChanged))]
public sealed class AppClientChanged : AppEvent
{
public string Id { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppClientRenamed.cs b/src/Squidex.Domain.Apps.Events/Apps/AppClientRenamed.cs
index bc4f8fd79..7e238f4b5 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppClientRenamed.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppClientRenamed.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppClientRenamedEvent")]
+ [EventType(nameof(AppClientRenamed))]
public sealed class AppClientRenamed : AppEvent
{
public string Id { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppClientRevoked.cs b/src/Squidex.Domain.Apps.Events/Apps/AppClientRevoked.cs
index 2f669017a..4dedfa106 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppClientRevoked.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppClientRevoked.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppClientRevokedEvent")]
+ [EventType(nameof(AppClientRevoked))]
public sealed class AppClientRevoked : AppEvent
{
public string Id { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs b/src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs
index 256748e6c..3924c2ef1 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Apps;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppContributorAssignedEvent")]
+ [EventType(nameof(AppContributorAssigned))]
public sealed class AppContributorAssigned : AppEvent
{
public string ContributorId { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppContributorRemoved.cs b/src/Squidex.Domain.Apps.Events/Apps/AppContributorRemoved.cs
index 48de37e3e..ade3e8582 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppContributorRemoved.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppContributorRemoved.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppContributorRemovedEvent")]
+ [EventType(nameof(AppContributorRemoved))]
public sealed class AppContributorRemoved : AppEvent
{
public string ContributorId { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppCreated.cs b/src/Squidex.Domain.Apps.Events/Apps/AppCreated.cs
index 803bc435f..6ec2efb8d 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppCreated.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppCreated.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppCreatedEvent")]
+ [EventType(nameof(AppCreated))]
public sealed class AppCreated : AppEvent
{
public string Name { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppLanguageAdded.cs b/src/Squidex.Domain.Apps.Events/Apps/AppLanguageAdded.cs
index 5ac9af148..72c6a2b88 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppLanguageAdded.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppLanguageAdded.cs
@@ -7,10 +7,11 @@
// ==========================================================================
using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppLanguageAddedEvent")]
+ [EventType(nameof(AppLanguageAdded))]
public sealed class AppLanguageAdded : AppEvent
{
public Language Language { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppLanguageRemoved.cs b/src/Squidex.Domain.Apps.Events/Apps/AppLanguageRemoved.cs
index 90b6cfc3e..740023863 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppLanguageRemoved.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppLanguageRemoved.cs
@@ -7,10 +7,11 @@
// ==========================================================================
using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppLanguageRemovedEvent")]
+ [EventType(nameof(AppLanguageRemoved))]
public sealed class AppLanguageRemoved : AppEvent
{
public Language Language { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Apps/AppMasterLanguageSet.cs b/src/Squidex.Domain.Apps.Events/Apps/AppMasterLanguageSet.cs
index 28ed5df9b..14000e296 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/AppMasterLanguageSet.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/AppMasterLanguageSet.cs
@@ -7,10 +7,11 @@
// ==========================================================================
using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Apps
{
- [TypeName("AppMasterLanguageSetEvent")]
+ [EventType(nameof(AppMasterLanguageSet))]
public sealed class AppMasterLanguageSet : AppEvent
{
public Language Language { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs b/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs
index ba4a266ed..3af7d4e33 100644
--- a/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs
+++ b/src/Squidex.Domain.Apps.Events/Assets/AssetCreated.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Assets
{
- [TypeName("AssetCreatedEvent")]
+ [EventType(nameof(AssetCreated))]
public sealed class AssetCreated : AssetEvent
{
public string FileName { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Assets/AssetDeleted.cs b/src/Squidex.Domain.Apps.Events/Assets/AssetDeleted.cs
index b0b3bd2cf..5dba605e0 100644
--- a/src/Squidex.Domain.Apps.Events/Assets/AssetDeleted.cs
+++ b/src/Squidex.Domain.Apps.Events/Assets/AssetDeleted.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Assets
{
- [TypeName("AssetDeletedEvent")]
+ [EventType(nameof(AssetDeleted))]
public sealed class AssetDeleted : AssetEvent
{
public long DeletedSize { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Assets/AssetRenamed.cs b/src/Squidex.Domain.Apps.Events/Assets/AssetRenamed.cs
index 3f82732a6..fe6b65184 100644
--- a/src/Squidex.Domain.Apps.Events/Assets/AssetRenamed.cs
+++ b/src/Squidex.Domain.Apps.Events/Assets/AssetRenamed.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Assets
{
- [TypeName("AssetRenamedEvent")]
+ [EventType(nameof(AssetRenamed))]
public sealed class AssetRenamed : AssetEvent
{
public string FileName { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Contents/ContentCreated.cs b/src/Squidex.Domain.Apps.Events/Contents/ContentCreated.cs
index 6c43803d5..61d5b8ce2 100644
--- a/src/Squidex.Domain.Apps.Events/Contents/ContentCreated.cs
+++ b/src/Squidex.Domain.Apps.Events/Contents/ContentCreated.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Contents;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents
{
- [TypeName("ContentCreatedEvent")]
+ [EventType(nameof(ContentCreated))]
public sealed class ContentCreated : ContentEvent
{
public NamedContentData Data { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Contents/ContentDeleted.cs b/src/Squidex.Domain.Apps.Events/Contents/ContentDeleted.cs
index bcad5c030..568deb9a3 100644
--- a/src/Squidex.Domain.Apps.Events/Contents/ContentDeleted.cs
+++ b/src/Squidex.Domain.Apps.Events/Contents/ContentDeleted.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents
{
- [TypeName("ContentDeletedEvent")]
+ [EventType(nameof(ContentDeleted))]
public sealed class ContentDeleted : ContentEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Contents/ContentPublished.cs b/src/Squidex.Domain.Apps.Events/Contents/ContentPublished.cs
index dd2f077a5..f8b6f8278 100644
--- a/src/Squidex.Domain.Apps.Events/Contents/ContentPublished.cs
+++ b/src/Squidex.Domain.Apps.Events/Contents/ContentPublished.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents
{
- [TypeName("ContentPublishedEvent")]
+ [EventType(nameof(ContentPublished))]
public sealed class ContentPublished : ContentEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Contents/ContentUnpublished.cs b/src/Squidex.Domain.Apps.Events/Contents/ContentUnpublished.cs
index e2e564ba2..2b8d0306d 100644
--- a/src/Squidex.Domain.Apps.Events/Contents/ContentUnpublished.cs
+++ b/src/Squidex.Domain.Apps.Events/Contents/ContentUnpublished.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents
{
- [TypeName("ContentUnpublishedEvent")]
+ [EventType(nameof(ContentUnpublished))]
public sealed class ContentUnpublished : ContentEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Contents/ContentUpdated.cs b/src/Squidex.Domain.Apps.Events/Contents/ContentUpdated.cs
index c6148021d..0a9c993a1 100644
--- a/src/Squidex.Domain.Apps.Events/Contents/ContentUpdated.cs
+++ b/src/Squidex.Domain.Apps.Events/Contents/ContentUpdated.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Contents;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Contents
{
- [TypeName("ContentUpdatedEvent")]
+ [EventType(nameof(ContentUpdated))]
public sealed class ContentUpdated : ContentEvent
{
public NamedContentData Data { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldAdded.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldAdded.cs
index 3e61be21d..91a7e3f63 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldAdded.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldAdded.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Schemas;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldAddedEvent")]
+ [EventType(nameof(FieldAdded))]
public sealed class FieldAdded : FieldEvent
{
public string Name { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldDeleted.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldDeleted.cs
index fa4cb0e72..01f6bc92d 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldDeleted.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldDeleted.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldDeletedEvent")]
+ [EventType(nameof(FieldDeleted))]
public sealed class FieldDeleted : FieldEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldDisabled.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldDisabled.cs
index 7df2c668b..c58198b4d 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldDisabled.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldDisabled.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldDisabledEvent")]
+ [EventType(nameof(FieldDisabled))]
public sealed class FieldDisabled : FieldEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldEnabled.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldEnabled.cs
index 3123f5b0f..0a72075f3 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldEnabled.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldEnabled.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldEnabledEvent")]
+ [EventType(nameof(FieldEnabled))]
public sealed class FieldEnabled : FieldEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldHidden.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldHidden.cs
index db7c8e953..3b6aeacca 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldHidden.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldHidden.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldHiddenEvent")]
+ [EventType(nameof(FieldHidden))]
public sealed class FieldHidden : FieldEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldLocked.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldLocked.cs
index be4c6b7e1..5a8437b62 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldLocked.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldLocked.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldLockedEvent")]
+ [EventType(nameof(FieldLocked))]
public sealed class FieldLocked : FieldEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldShown.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldShown.cs
index 734111436..fc9f67d02 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldShown.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldShown.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldShownEvent")]
+ [EventType(nameof(FieldShown))]
public sealed class FieldShown : FieldEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/FieldUpdated.cs b/src/Squidex.Domain.Apps.Events/Schemas/FieldUpdated.cs
index dbdfe5153..bc530def2 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/FieldUpdated.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/FieldUpdated.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Schemas;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("FieldUpdatedEvent")]
+ [EventType(nameof(FieldUpdated))]
public sealed class FieldUpdated : FieldEvent
{
public FieldProperties Properties { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookAdded.cs b/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookAdded.cs
index 3cfa9e0d0..39926a737 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookAdded.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookAdded.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using System;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas.Old
{
- [TypeName("WebhookAddedEvent")]
+ [EventType(nameof(WebhookAdded))]
[Obsolete]
public sealed class WebhookAdded : SchemaEvent
{
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookDeleted.cs b/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookDeleted.cs
index 367cc3fb5..df94a1e4c 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookDeleted.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/Old/WebhookDeleted.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using System;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas.Old
{
- [TypeName("WebhookDeletedEvent")]
+ [EventType(nameof(WebhookDeleted))]
[Obsolete]
public sealed class WebhookDeleted : SchemaEvent
{
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/SchemaCreated.cs b/src/Squidex.Domain.Apps.Events/Schemas/SchemaCreated.cs
index eaa3a18ee..85afd34bd 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/SchemaCreated.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/SchemaCreated.cs
@@ -7,12 +7,12 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Schemas;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
using SchemaFields = System.Collections.Generic.List;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("SchemaCreatedEvent")]
+ [EventType(nameof(SchemaCreated))]
public sealed class SchemaCreated : SchemaEvent
{
public string Name { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/SchemaDeleted.cs b/src/Squidex.Domain.Apps.Events/Schemas/SchemaDeleted.cs
index abe401aae..2de168b39 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/SchemaDeleted.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/SchemaDeleted.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("SchemaDeletedEvent")]
+ [EventType(nameof(SchemaDeleted))]
public sealed class SchemaDeleted : SchemaEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/SchemaFieldsReordered.cs b/src/Squidex.Domain.Apps.Events/Schemas/SchemaFieldsReordered.cs
index 50d5affdb..6d96e0752 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/SchemaFieldsReordered.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/SchemaFieldsReordered.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using System.Collections.Generic;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("SchemaFieldsReorderedEvent")]
+ [EventType(nameof(SchemaFieldsReordered))]
public sealed class SchemaFieldsReordered : SchemaEvent
{
public List FieldIds { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/SchemaPublished.cs b/src/Squidex.Domain.Apps.Events/Schemas/SchemaPublished.cs
index cc0aa8554..d6c9ee1c9 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/SchemaPublished.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/SchemaPublished.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("SchemaPublishedEvent")]
+ [EventType(nameof(SchemaPublished))]
public sealed class SchemaPublished : SchemaEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/SchemaUnpublished.cs b/src/Squidex.Domain.Apps.Events/Schemas/SchemaUnpublished.cs
index 14d023525..1618d63b2 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/SchemaUnpublished.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/SchemaUnpublished.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("SchemaUnpublishedEvent")]
+ [EventType(nameof(SchemaUnpublished))]
public sealed class SchemaUnpublished : SchemaEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/SchemaUpdated.cs b/src/Squidex.Domain.Apps.Events/Schemas/SchemaUpdated.cs
index 300058870..aebed5b61 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/SchemaUpdated.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/SchemaUpdated.cs
@@ -7,11 +7,11 @@
// ==========================================================================
using Squidex.Domain.Apps.Core.Schemas;
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("SchemaUpdatedEvent")]
+ [EventType(nameof(SchemaUpdated))]
public sealed class SchemaUpdated : SchemaEvent
{
public SchemaProperties Properties { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Schemas/ScriptsConfigured.cs b/src/Squidex.Domain.Apps.Events/Schemas/ScriptsConfigured.cs
index e0160a330..093197d28 100644
--- a/src/Squidex.Domain.Apps.Events/Schemas/ScriptsConfigured.cs
+++ b/src/Squidex.Domain.Apps.Events/Schemas/ScriptsConfigured.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Schemas
{
- [TypeName("ScriptsConfiguredEvent")]
+ [EventType(nameof(ScriptsConfigured))]
public sealed class ScriptsConfigured : SchemaEvent
{
public string ScriptQuery { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs
index e65f9ca56..1cab7fdce 100644
--- a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs
+++ b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookCreated.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Webhooks
{
- [TypeName("WebhookCreatedEvent")]
+ [EventType(nameof(WebhookCreated))]
public sealed class WebhookCreated : WebhookEditEvent
{
public string SharedSecret { get; set; }
diff --git a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs
index c958c8272..a01d60dc3 100644
--- a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs
+++ b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookDeleted.cs
@@ -7,10 +7,11 @@
// ==========================================================================
using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Webhooks
{
- [TypeName("WebhookDeletedEventV2")]
+ [EventType(nameof(WebhookUpdated), 2)]
public sealed class WebhookDeleted : WebhookEvent
{
}
diff --git a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookUpdated.cs b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookUpdated.cs
index d05fd1a09..c40793935 100644
--- a/src/Squidex.Domain.Apps.Events/Webhooks/WebhookUpdated.cs
+++ b/src/Squidex.Domain.Apps.Events/Webhooks/WebhookUpdated.cs
@@ -6,11 +6,11 @@
// All rights reserved.
// ==========================================================================
-using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Events.Webhooks
{
- [TypeName("WebhookUpdatedEvent")]
+ [EventType(nameof(WebhookUpdated))]
public sealed class WebhookUpdated : WebhookEditEvent
{
}
diff --git a/src/Squidex.Infrastructure/CQRS/Events/EventTypeAttribute.cs b/src/Squidex.Infrastructure/CQRS/Events/EventTypeAttribute.cs
new file mode 100644
index 000000000..9723c1bdf
--- /dev/null
+++ b/src/Squidex.Infrastructure/CQRS/Events/EventTypeAttribute.cs
@@ -0,0 +1,26 @@
+// ==========================================================================
+// EventTypeAttribute.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+using System;
+
+namespace Squidex.Infrastructure.CQRS.Events
+{
+ [AttributeUsage(AttributeTargets.Class, Inherited = false)]
+ public sealed class EventTypeAttribute : TypeNameAttribute
+ {
+ public EventTypeAttribute(string typeName, int version = 1)
+ : base(CreateTypeName(typeName, version))
+ {
+ }
+
+ private static string CreateTypeName(string typeName, int version)
+ {
+ return $"{typeName}Event" + (version > 1 ? $"V{version}" : string.Empty);
+ }
+ }
+}
diff --git a/src/Squidex.Infrastructure/TypeNameAttribute.cs b/src/Squidex.Infrastructure/TypeNameAttribute.cs
index 6eee44aec..068a78f15 100644
--- a/src/Squidex.Infrastructure/TypeNameAttribute.cs
+++ b/src/Squidex.Infrastructure/TypeNameAttribute.cs
@@ -11,7 +11,7 @@ using System;
namespace Squidex.Infrastructure
{
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
- public sealed class TypeNameAttribute : Attribute
+ public class TypeNameAttribute : Attribute
{
public string TypeName { get; }
diff --git a/src/Squidex.Infrastructure/TypeNameRegistry.cs b/src/Squidex.Infrastructure/TypeNameRegistry.cs
index 3027139c8..8a457010f 100644
--- a/src/Squidex.Infrastructure/TypeNameRegistry.cs
+++ b/src/Squidex.Infrastructure/TypeNameRegistry.cs
@@ -31,6 +31,31 @@ namespace Squidex.Infrastructure
return this;
}
+ public TypeNameRegistry MapObsolete(Type type, string name)
+ {
+ Guard.NotNull(type, nameof(type));
+ Guard.NotNull(name, nameof(name));
+
+ lock (namesByType)
+ {
+ try
+ {
+ typesByName.Add(name, type);
+ }
+ catch (ArgumentException)
+ {
+ if (typesByName[name] != type)
+ {
+ var message = $"The name '{name}' is already registered with type '{typesByName[name]}'";
+
+ throw new ArgumentException(message, nameof(type));
+ }
+ }
+ }
+
+ return this;
+ }
+
public TypeNameRegistry Map(Type type, string name)
{
Guard.NotNull(type, nameof(type));
diff --git a/src/Squidex/Controllers/Api/Docs/DocsController.cs b/src/Squidex/Controllers/Api/Docs/DocsController.cs
index 738aaec07..0a37fbb9d 100644
--- a/src/Squidex/Controllers/Api/Docs/DocsController.cs
+++ b/src/Squidex/Controllers/Api/Docs/DocsController.cs
@@ -20,9 +20,9 @@ namespace Squidex.Controllers.Api.Docs
[ApiCosts(0)]
public IActionResult Docs()
{
- ViewBag.Specification = "~/swagger/v1/swagger.json";
+ var vm = new DocsVM { Specification = "~/swagger/v1/swagger.json" };
- return View("Docs");
+ return View(nameof(Docs), vm);
}
}
}
diff --git a/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs b/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs
index f3e531248..fe86d7a5b 100644
--- a/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs
+++ b/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs
@@ -17,6 +17,7 @@ using Squidex.Pipeline;
namespace Squidex.Controllers.ContentApi
{
[ApiExceptionFilter]
+ [AppApi(false)]
[SwaggerIgnore]
public sealed class ContentSwaggerController : ControllerBase
{
@@ -35,9 +36,9 @@ namespace Squidex.Controllers.ContentApi
[ApiCosts(0)]
public IActionResult Docs(string app)
{
- ViewBag.Specification = $"~/content/{app}/swagger/v1/swagger.json";
+ var vm = new DocsVM { Specification = $"~/content/{app}/swagger/v1/swagger.json" };
- return View("Docs");
+ return View(nameof(Docs), vm);
}
[HttpGet]
diff --git a/src/Squidex/Controllers/DocsVM.cs b/src/Squidex/Controllers/DocsVM.cs
new file mode 100644
index 000000000..f71fd1b58
--- /dev/null
+++ b/src/Squidex/Controllers/DocsVM.cs
@@ -0,0 +1,15 @@
+// ==========================================================================
+// DocsVM.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+namespace Squidex.Controllers
+{
+ public sealed class DocsVM
+ {
+ public string Specification { get; set; }
+ }
+}
diff --git a/src/Squidex/Controllers/UI/Account/AccountController.cs b/src/Squidex/Controllers/UI/Account/AccountController.cs
index 8f8b8856e..97cbc1b77 100644
--- a/src/Squidex/Controllers/UI/Account/AccountController.cs
+++ b/src/Squidex/Controllers/UI/Account/AccountController.cs
@@ -79,11 +79,18 @@ namespace Squidex.Controllers.UI.Account
throw new SecurityException("User is not allowed to login.");
}
+ [HttpGet]
+ [Route("account/lockedout")]
+ public IActionResult LockedOut()
+ {
+ return View();
+ }
+
[HttpGet]
[Route("account/accessdenied")]
public IActionResult AccessDenied()
{
- return View("AccessDenied");
+ return View();
}
[HttpGet]
@@ -177,7 +184,7 @@ namespace Squidex.Controllers.UI.Account
ReturnUrl = returnUrl
};
- return View("Login", vm);
+ return View(nameof(Login), vm);
}
[HttpPost]
@@ -206,7 +213,7 @@ namespace Squidex.Controllers.UI.Account
if (!result.Succeeded && result.IsLockedOut)
{
- return View("LockedOut");
+ return View(nameof(LockedOut));
}
var isLoggedIn = result.Succeeded;
@@ -238,7 +245,7 @@ namespace Squidex.Controllers.UI.Account
if (user.IsLocked)
{
- return View("LockedOut");
+ return View(nameof(LockedOut));
}
}
}
diff --git a/src/Squidex/Controllers/UI/Profile/ProfileController.cs b/src/Squidex/Controllers/UI/Profile/ProfileController.cs
index 1e83e891f..c13227dcb 100644
--- a/src/Squidex/Controllers/UI/Profile/ProfileController.cs
+++ b/src/Squidex/Controllers/UI/Profile/ProfileController.cs
@@ -155,7 +155,7 @@ namespace Squidex.Controllers.UI.Profile
if (!ModelState.IsValid)
{
- return View("Profile", await GetProfileVM(user, model));
+ return View(nameof(Profile), await GetProfileVM(user, model));
}
string errorMessage;
@@ -177,7 +177,7 @@ namespace Squidex.Controllers.UI.Profile
errorMessage = "An unexpected exception occurred.";
}
- return View("Profile", await GetProfileVM(user, model, errorMessage));
+ return View(nameof(Profile), await GetProfileVM(user, model, errorMessage));
}
private async Task GetProfileVM(IUser user, ChangeProfileModel model = null, string errorMessage = null, string successMessage = null)
diff --git a/src/Squidex/Pipeline/AppApiAttribute.cs b/src/Squidex/Pipeline/AppApiAttribute.cs
index d0e6fff8a..20b92b65b 100644
--- a/src/Squidex/Pipeline/AppApiAttribute.cs
+++ b/src/Squidex/Pipeline/AppApiAttribute.cs
@@ -12,9 +12,12 @@ namespace Squidex.Pipeline
{
public sealed class AppApiAttribute : ServiceFilterAttribute
{
- public AppApiAttribute()
+ public bool CheckPermissions { get; }
+
+ public AppApiAttribute(bool checkPermissions = true)
: base(typeof(AppApiFilter))
{
+ CheckPermissions = checkPermissions;
}
}
}
diff --git a/src/Squidex/Pipeline/AppApiFilter.cs b/src/Squidex/Pipeline/AppApiFilter.cs
index 6ab3a979b..96eb967c8 100644
--- a/src/Squidex/Pipeline/AppApiFilter.cs
+++ b/src/Squidex/Pipeline/AppApiFilter.cs
@@ -21,12 +21,22 @@ using Squidex.Shared.Identity;
namespace Squidex.Pipeline
{
- public sealed class AppApiFilter : IAsyncAuthorizationFilter
+ public sealed class AppApiFilter : IAsyncAuthorizationFilter, IFilterContainer
{
private readonly IAppProvider appProvider;
private readonly IAppPlansProvider appPlanProvider;
private readonly IUsageTracker usageTracker;
+ IFilterMetadata IFilterContainer.FilterDefinition { get; set; }
+
+ public AppApiAttribute FilterDefinition
+ {
+ get
+ {
+ return (AppApiAttribute)((IFilterContainer)this).FilterDefinition;
+ }
+ }
+
public AppApiFilter(IAppProvider appProvider, IAppPlansProvider appPlanProvider, IUsageTracker usageTracker)
{
this.appProvider = appProvider;
@@ -49,6 +59,12 @@ namespace Squidex.Pipeline
return;
}
+ if (!FilterDefinition.CheckPermissions)
+ {
+ context.HttpContext.Features.Set(new AppFeature(app));
+ return;
+ }
+
var user = context.HttpContext.User;
var permission =
diff --git a/src/Squidex/Views/Shared/Docs.cshtml b/src/Squidex/Views/Shared/Docs.cshtml
index 9e0837507..15b0e282a 100644
--- a/src/Squidex/Views/Shared/Docs.cshtml
+++ b/src/Squidex/Views/Shared/Docs.cshtml
@@ -1,4 +1,6 @@
-@{
+@model Squidex.Controllers.DocsVM
+
+@{
Layout = null;
}
@@ -31,7 +33,7 @@
-
+
diff --git a/tests/Squidex.Infrastructure.Tests/TypeNameRegistryTests.cs b/tests/Squidex.Infrastructure.Tests/TypeNameRegistryTests.cs
index 3f6ab1eea..d798a3957 100644
--- a/tests/Squidex.Infrastructure.Tests/TypeNameRegistryTests.cs
+++ b/tests/Squidex.Infrastructure.Tests/TypeNameRegistryTests.cs
@@ -8,6 +8,7 @@
using System;
using System.Reflection;
+using Squidex.Infrastructure.CQRS.Events;
using Xunit;
namespace Squidex.Infrastructure
@@ -21,6 +22,11 @@ namespace Squidex.Infrastructure
{
}
+ [EventType(nameof(MyAdded), 2)]
+ public sealed class MyAdded
+ {
+ }
+
[Fact]
public void Should_register_and_retrieve_types()
{
@@ -57,6 +63,28 @@ namespace Squidex.Infrastructure
Assert.Equal(typeof(MyType), sut.GetType("My"));
}
+ [Fact]
+ public void Should_register_event_type_from_assembly()
+ {
+ sut.Map(typeof(TypeNameRegistryTests).GetTypeInfo().Assembly);
+
+ Assert.Equal("MyAddedEventV2", sut.GetName());
+ Assert.Equal("MyAddedEventV2", sut.GetName(typeof(MyAdded)));
+
+ Assert.Equal(typeof(MyAdded), sut.GetType("myAddedEventV2"));
+ Assert.Equal(typeof(MyAdded), sut.GetType("MyAddedEventV2"));
+ }
+
+ [Fact]
+ public void Should_register_fallback_name()
+ {
+ sut.Map(typeof(MyType));
+ sut.MapObsolete(typeof(MyType), "my-old");
+
+ Assert.Equal(typeof(MyType), sut.GetType("my"));
+ Assert.Equal(typeof(MyType), sut.GetType("my-old"));
+ }
+
[Fact]
public void Should_not_throw_exception_if_type_is_already_registered_with_same_name()
{
@@ -80,6 +108,14 @@ namespace Squidex.Infrastructure
Assert.Throws(() => sut.Map(typeof(byte), "short"));
}
+ [Fact]
+ public void Should_throw_exception_if_obsolete_name_is_already_registered()
+ {
+ sut.MapObsolete(typeof(short), "short2");
+
+ Assert.Throws(() => sut.MapObsolete(typeof(byte), "short2"));
+ }
+
[Fact]
public void Should_throw_exception_if_name_is_not_supported()
{