diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Utils/MongoCollectionExtensions.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Utils/MongoCollectionExtensions.cs index f03af6867..320ff8d4c 100644 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Utils/MongoCollectionExtensions.cs +++ b/src/Squidex.Domain.Apps.Read.MongoDb/Utils/MongoCollectionExtensions.cs @@ -45,6 +45,35 @@ namespace Squidex.Domain.Apps.Read.MongoDb.Utils throw new DomainObjectNotFoundException(headers.AggregateId().ToString(), typeof(T)); } + await collection.UpdateAsync(@event, headers, entity, updater); + } + + public static async Task TryUpdateAsync(this IMongoCollection collection, SquidexEvent @event, EnvelopeHeaders headers, Action updater) where T : class, IMongoEntity, new() + { + var entity = await collection.Find(t => t.Id == headers.AggregateId()).FirstOrDefaultAsync(); + + if (entity != null) + { + if (entity is IEntityWithVersion withVersion) + { + var eventVersion = headers.EventStreamNumber(); + + if (eventVersion <= withVersion.Version) + { + return false; + } + } + + await collection.UpdateAsync(@event, headers, entity, updater); + + return true; + } + + return false; + } + + private static async Task UpdateAsync(this IMongoCollection collection, SquidexEvent @event, EnvelopeHeaders headers, T entity, Action updater) where T : class, IMongoEntity, new() + { EntityMapper.Update(@event, headers, entity); updater(entity); diff --git a/src/Squidex/Config/Domain/ReadModule.cs b/src/Squidex/Config/Domain/ReadModule.cs index a5848d062..c9cd02801 100644 --- a/src/Squidex/Config/Domain/ReadModule.cs +++ b/src/Squidex/Config/Domain/ReadModule.cs @@ -56,7 +56,6 @@ namespace Squidex.Config.Domain builder.RegisterType() .As() - .As() .AsSelf() .InstancePerDependency(); diff --git a/src/Squidex/Config/Domain/StoreMongoDbModule.cs b/src/Squidex/Config/Domain/StoreMongoDbModule.cs index 36ad801b5..f232207f3 100644 --- a/src/Squidex/Config/Domain/StoreMongoDbModule.cs +++ b/src/Squidex/Config/Domain/StoreMongoDbModule.cs @@ -160,7 +160,6 @@ namespace Squidex.Config.Domain builder.RegisterType() .WithParameter(ResolvedParameter.ForNamed(MongoDatabaseRegistration)) .As() - .As() .As() .AsSelf() .SingleInstance(); @@ -168,7 +167,6 @@ namespace Squidex.Config.Domain builder.RegisterType() .WithParameter(ResolvedParameter.ForNamed(MongoDatabaseRegistration)) .As() - .As() .As() .AsSelf() .SingleInstance(); @@ -181,6 +179,14 @@ namespace Squidex.Config.Domain .AsSelf() .SingleInstance(); + builder.Register(c => + new CompoundEventConsumer( + c.Resolve(), + c.Resolve())) + .As() + .AsSelf() + .SingleInstance(); + builder.Register(c => new CompoundEventConsumer( c.Resolve(),