Browse Source

Event Consumers optimized.

pull/118/head
Sebastian Stehle 9 years ago
parent
commit
5c845f15f0
  1. 29
      src/Squidex.Domain.Apps.Read.MongoDb/Utils/MongoCollectionExtensions.cs
  2. 1
      src/Squidex/Config/Domain/ReadModule.cs
  3. 10
      src/Squidex/Config/Domain/StoreMongoDbModule.cs

29
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<bool> TryUpdateAsync<T>(this IMongoCollection<T> collection, SquidexEvent @event, EnvelopeHeaders headers, Action<T> 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<T>(this IMongoCollection<T> collection, SquidexEvent @event, EnvelopeHeaders headers, T entity, Action<T> updater) where T : class, IMongoEntity, new()
{
EntityMapper.Update(@event, headers, entity);
updater(entity);

1
src/Squidex/Config/Domain/ReadModule.cs

@ -56,7 +56,6 @@ namespace Squidex.Config.Domain
builder.RegisterType<CachingGraphQLService>()
.As<IGraphQLService>()
.As<IEventConsumer>()
.AsSelf()
.InstancePerDependency();

10
src/Squidex/Config/Domain/StoreMongoDbModule.cs

@ -160,7 +160,6 @@ namespace Squidex.Config.Domain
builder.RegisterType<MongoAssetStatsRepository>()
.WithParameter(ResolvedParameter.ForNamed<IMongoDatabase>(MongoDatabaseRegistration))
.As<IAssetStatsRepository>()
.As<IEventConsumer>()
.As<IExternalSystem>()
.AsSelf()
.SingleInstance();
@ -168,7 +167,6 @@ namespace Squidex.Config.Domain
builder.RegisterType<MongoAssetRepository>()
.WithParameter(ResolvedParameter.ForNamed<IMongoDatabase>(MongoDatabaseRegistration))
.As<IAssetRepository>()
.As<IEventConsumer>()
.As<IExternalSystem>()
.AsSelf()
.SingleInstance();
@ -181,6 +179,14 @@ namespace Squidex.Config.Domain
.AsSelf()
.SingleInstance();
builder.Register(c =>
new CompoundEventConsumer(
c.Resolve<MongoAssetRepository>(),
c.Resolve<MongoAssetStatsRepository>()))
.As<IEventConsumer>()
.AsSelf()
.SingleInstance();
builder.Register(c =>
new CompoundEventConsumer(
c.Resolve<MongoSchemaRepository>(),

Loading…
Cancel
Save