public PostgreSQLEventStoreMigration( ILogger <PostgreSQLEventStoreMigration> logger, DbUpMigration.Factory factory, IClaptrapIdentity identity, IDbFactory dbFactory, IStorageMigrationContainer storageMigrationContainer, IPostgreSQLEventStoreOptions options) { var(connectionName, schemaName, eventTableName) = options.RelationalEventStoreLocator.GetNames(identity); var migrationOptions = new DbUpMigrationOptions( new[] { Assembly.GetExecutingAssembly() }, fileName => fileName.EndsWith("-event.sql"), new Dictionary <string, string> { { "SchemaName", schemaName }, { "EventTableName", eventTableName } }, () => (DeployChanges .To.PostgresqlDatabase(dbFactory.GetConnectionString(connectionName)), null)); var migration = factory.Invoke(logger, migrationOptions); var migrationKey = $"{nameof(PostgreSQLEventStoreMigration)}_{connectionName}_{schemaName}_{eventTableName}"; _migrationTask = storageMigrationContainer.CreateTask(migrationKey, migration); }
public PostgreSQLEventEntitySaver( ChannelBatchOperator <EventEntity> .Factory batchOperatorFactory, IMasterOrSelfIdentity identity, IDbFactory dbFactory, IPostgreSQLEventStoreOptions options, IBatchOperatorContainer batchOperatorContainer) { _dbFactory = dbFactory; var(connectionName, schemaName, eventTableName) = options.RelationalEventStoreLocator.GetNames(identity.Identity); _connectionName = connectionName; _schemaName = schemaName; _eventTableName = eventTableName; var operatorKey = new BatchOperatorKey() .With(nameof(PostgreSQLEventEntitySaver)) .With(_connectionName) .With(_schemaName) .With(_eventTableName); _batchOperator = (IBatchOperator <EventEntity>)batchOperatorContainer.GetOrAdd( operatorKey, () => batchOperatorFactory.Invoke( new BatchOperatorOptions <EventEntity>(options) { DoManyFunc = (entities, cacheData) => SaveManyAsync(entities), DoManyFuncName = $"event batch saver for {operatorKey.AsStringKey()}" })); }