diff --git a/Squidex.ruleset b/Squidex.ruleset
index ba0ffa583..6c96f8b6b 100644
--- a/Squidex.ruleset
+++ b/Squidex.ruleset
@@ -54,7 +54,7 @@
-
+
diff --git a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
index 754774561..701e56aa9 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
+++ b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
@@ -17,4 +17,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj
index 10f9c17e4..d69665a81 100644
--- a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj
+++ b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj
@@ -26,4 +26,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj b/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj
index 721bd7392..b3c89d3b9 100644
--- a/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj
+++ b/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj
@@ -23,4 +23,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj b/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
index ebaf89c62..bce4941ad 100644
--- a/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
+++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
@@ -24,4 +24,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj
index d273d2afb..740cccf99 100644
--- a/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj
+++ b/src/Squidex.Domain.Apps.Entities/Squidex.Domain.Apps.Entities.csproj
@@ -22,4 +22,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj b/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj
index de665699c..3fa2fa5db 100644
--- a/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj
+++ b/src/Squidex.Domain.Apps.Events/Squidex.Domain.Apps.Events.csproj
@@ -22,4 +22,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
index 731890266..9d061d44c 100644
--- a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
+++ b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
@@ -24,4 +24,7 @@
..\..\Squidex.ruleset
+
+
+
\ No newline at end of file
diff --git a/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj b/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj
index d0090e18f..96bbaab76 100644
--- a/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj
+++ b/src/Squidex.Domain.Users/Squidex.Domain.Users.csproj
@@ -21,4 +21,7 @@
..\..\Squidex.ruleset
+
+
+
\ No newline at end of file
diff --git a/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj b/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj
index 64cc95079..2a6b10e30 100644
--- a/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj
+++ b/src/Squidex.Infrastructure.Azure/Squidex.Infrastructure.Azure.csproj
@@ -14,4 +14,7 @@
..\..\Squidex.ruleset
+
+
+
\ No newline at end of file
diff --git a/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStore.cs b/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStore.cs
index 7f95c5e92..3ef632c78 100644
--- a/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStore.cs
+++ b/src/Squidex.Infrastructure.GetEventStore/EventSourcing/GetEventStore.cs
@@ -72,7 +72,7 @@ namespace Squidex.Infrastructure.EventSourcing
StreamEventsSlice currentSlice;
do
{
- currentSlice = await connection.ReadStreamEventsForwardAsync(streamName, sliceStart, ReadPageSize, false);
+ currentSlice = await connection.ReadStreamEventsForwardAsync(streamName, sliceStart, ReadPageSize, true);
if (currentSlice.Status == SliceReadStatus.Success)
{
diff --git a/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj b/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj
index c10907d3a..9d576f112 100644
--- a/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj
+++ b/src/Squidex.Infrastructure.GetEventStore/Squidex.Infrastructure.GetEventStore.csproj
@@ -18,4 +18,7 @@
..\..\Squidex.ruleset
+
+
+
\ No newline at end of file
diff --git a/src/Squidex.Infrastructure.GoogleCloud/Squidex.Infrastructure.GoogleCloud.csproj b/src/Squidex.Infrastructure.GoogleCloud/Squidex.Infrastructure.GoogleCloud.csproj
index cce8551a3..23bbc623d 100644
--- a/src/Squidex.Infrastructure.GoogleCloud/Squidex.Infrastructure.GoogleCloud.csproj
+++ b/src/Squidex.Infrastructure.GoogleCloud/Squidex.Infrastructure.GoogleCloud.csproj
@@ -19,4 +19,7 @@
..\..\Squidex.ruleset
+
+
+
\ No newline at end of file
diff --git a/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj b/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
index 9578a77e0..5db5f7158 100644
--- a/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
+++ b/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
@@ -19,4 +19,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Infrastructure.RabbitMq/Squidex.Infrastructure.RabbitMq.csproj b/src/Squidex.Infrastructure.RabbitMq/Squidex.Infrastructure.RabbitMq.csproj
index dd33ddd4f..8c7ffe98d 100644
--- a/src/Squidex.Infrastructure.RabbitMq/Squidex.Infrastructure.RabbitMq.csproj
+++ b/src/Squidex.Infrastructure.RabbitMq/Squidex.Infrastructure.RabbitMq.csproj
@@ -19,4 +19,7 @@
..\..\Squidex.ruleset
+
+
+
\ No newline at end of file
diff --git a/src/Squidex.Infrastructure.Redis/Squidex.Infrastructure.Redis.csproj b/src/Squidex.Infrastructure.Redis/Squidex.Infrastructure.Redis.csproj
index 0a815a472..b811c6667 100644
--- a/src/Squidex.Infrastructure.Redis/Squidex.Infrastructure.Redis.csproj
+++ b/src/Squidex.Infrastructure.Redis/Squidex.Infrastructure.Redis.csproj
@@ -19,4 +19,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Infrastructure/Commands/AggregateHandler.cs b/src/Squidex.Infrastructure/Commands/AggregateHandler.cs
index 78636fb55..fe3745420 100644
--- a/src/Squidex.Infrastructure/Commands/AggregateHandler.cs
+++ b/src/Squidex.Infrastructure/Commands/AggregateHandler.cs
@@ -106,7 +106,18 @@ namespace Squidex.Infrastructure.Commands
await handler(domainObject);
- await domainObject.WriteAsync();
+ try
+ {
+ await domainObject.WriteAsync();
+
+ stateFactory.Synchronize(domainObjectId);
+ }
+ catch
+ {
+ stateFactory.Remove(domainObjectId);
+
+ throw;
+ }
if (!context.IsCompleted)
{
diff --git a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
index 92fbf6503..fdab3f5d8 100644
--- a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
+++ b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
@@ -26,4 +26,7 @@
..\..\Squidex.ruleset
+
+
+
diff --git a/src/Squidex.Infrastructure/States/IStateFactory.cs b/src/Squidex.Infrastructure/States/IStateFactory.cs
index 68a99e1a2..16d72edfc 100644
--- a/src/Squidex.Infrastructure/States/IStateFactory.cs
+++ b/src/Squidex.Infrastructure/States/IStateFactory.cs
@@ -24,5 +24,9 @@ namespace Squidex.Infrastructure.States
Task CreateAsync(Guid key) where T : IStatefulObject;
Task CreateAsync(TKey key) where T : IStatefulObject;
+
+ void Remove(TKey key) where T : IStatefulObject;
+
+ void Synchronize(TKey key) where T : IStatefulObject;
}
}
diff --git a/src/Squidex.Infrastructure/States/Persistence.cs b/src/Squidex.Infrastructure/States/Persistence.cs
index a306e3327..1aa06d1f0 100644
--- a/src/Squidex.Infrastructure/States/Persistence.cs
+++ b/src/Squidex.Infrastructure/States/Persistence.cs
@@ -10,21 +10,17 @@ using System;
using System.Threading.Tasks;
using Squidex.Infrastructure.EventSourcing;
-#pragma warning disable RECS0012 // 'if' statement can be re-written as 'switch' statement
-
namespace Squidex.Infrastructure.States
{
internal sealed class Persistence : Persistence, IPersistence
{
public Persistence(TKey ownerKey,
- Action invalidate,
- Action failed,
IEventStore eventStore,
IEventDataFormatter eventDataFormatter,
ISnapshotStore