// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using EventStore.Client; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Diagnostics; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing.Grains; using Squidex.Infrastructure.States; namespace Squidex.Config.Domain { public static class EventSourcingServices { public static void AddSquidexEventSourcing(this IServiceCollection services, IConfiguration config) { config.ConfigureByOption("eventStore:type", new Alternatives { ["MongoDb"] = () => { var mongoConfiguration = config.GetRequiredValue("eventStore:mongoDb:configuration"); var mongoDatabaseName = config.GetRequiredValue("eventStore:mongoDb:database"); services.AddSingletonAs(c => { var mongoClient = StoreServices.GetMongoClient(mongoConfiguration); var mongoDatabase = mongoClient.GetDatabase(mongoDatabaseName); return new MongoEventStore(mongoDatabase, c.GetRequiredService()); }) .As(); }, ["GetEventStore"] = () => { var configuration = config.GetRequiredValue("eventStore:getEventStore:configuration"); services.AddSingletonAs(_ => EventStoreClientSettings.Create(configuration)) .AsSelf(); services.AddSingletonAs() .As(); services.AddHealthChecks() .AddCheck("EventStore", tags: new[] { "node" }); } }); services.AddSingletonAs() .As(); services.AddTransientAs() .AsSelf(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); } } }