/** * @param ContainerInterface $container * @return EventStore */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); if (!isset($config['prooph'])) { throw ConfigurationException::configurationError('Missing prooph config key in application config'); } if (!isset($config['prooph']['event_store'])) { throw ConfigurationException::configurationError('Missing key event_store in prooph configuration'); } $config = $config['prooph']['event_store']; if (!isset($config['adapter']['type'])) { throw ConfigurationException::configurationError(sprintf('Event store adapter is missing in configuration')); } $adapter = $container->get($config['adapter']['type']); if (!isset($config['event_emitter'])) { $eventEmitter = new ProophActionEventEmitter(); } else { $eventEmitter = $container->get($config['event_emitter']); } $eventStore = new EventStore($adapter, $eventEmitter); $plugins = isset($config['plugins']) ? $config['plugins'] : []; foreach ($plugins as $pluginAlias) { $plugin = $container->get($pluginAlias); if (!$plugin instanceof Plugin) { throw ConfigurationException::configurationError(sprintf('Plugin %s does not implement the Plugin interface', $pluginAlias)); } $plugin->setUp($eventStore); } return $eventStore; }
/** * @param ContainerInterface $container * @return EventStore */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $config = $this->options($config); $adapter = $container->get($config['adapter']['type']); if (!isset($config['event_emitter'])) { $eventEmitter = new ProophActionEventEmitter(); } else { $eventEmitter = $container->get($config['event_emitter']); } $eventStore = new EventStore($adapter, $eventEmitter); foreach ($config['plugins'] as $pluginAlias) { $plugin = $container->get($pluginAlias); if (!$plugin instanceof Plugin) { throw ConfigurationException::configurationError(sprintf('Plugin %s does not implement the Plugin interface', $pluginAlias)); } $plugin->setUp($eventStore); } if (count($config['metadata_enrichers']) > 0) { $metadataEnrichers = []; foreach ($config['metadata_enrichers'] as $metadataEnricherAlias) { $metadataEnricher = $container->get($metadataEnricherAlias); if (!$metadataEnricher instanceof MetadataEnricher) { throw ConfigurationException::configurationError(sprintf('Metadata enricher %s does not implement the MetadataEnricher interface', $metadataEnricherAlias)); } $metadataEnrichers[] = $metadataEnricher; } $plugin = new MetadataEnricherPlugin(new MetadataEnricherAggregate($metadataEnrichers)); $plugin->setUp($eventStore); } return $eventStore; }
/** * @param ContainerInterface $container * * @throws ConfigurationException * * @return FlywheelEventStoreAdapter */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $config = $this->options($config)['adapter']['options']; if (!is_dir($config['dir'])) { throw ConfigurationException::configurationError(sprintf('%s was not able to locate %s', __CLASS__, $config['dir'])); } $messageFactory = $container->has(MessageFactory::class) ? $container->get(MessageFactory::class) : new FQCNMessageFactory(); $messageConverter = $container->has(MessageConverter::class) ? $container->get(MessageConverter::class) : new NoOpMessageConverter(); return new FlywheelEventStoreAdapter($config['dir'], $messageFactory, $messageConverter); }
/** * @param ContainerInterface $container * @return DoctrineSnapshotAdapter */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $config = $this->options($config)['adapter']['options']; if (isset($config['connection_alias']) && $container->has($config['connection_alias'])) { $connection = $container->get($config['connection_alias']); } elseif (isset($config['connection']) && is_array($config['connection'])) { $connection = DriverManager::getConnection($config['connection']); } if (!isset($connection)) { throw ConfigurationException::configurationError(sprintf('%s was not able to locate or create a valid Doctrine\\DBAL\\Connection', __CLASS__)); } return new DoctrineSnapshotAdapter($connection, $config['snapshot_table_map']); }
/** * @param ContainerInterface $container * @return DoctrineEventStoreAdapter * @throws \Prooph\EventStore\Exception\ConfigurationException */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $config = $this->options($config)['adapter']['options']; $connection = null; if (isset($config['connection_alias']) && $container->has($config['connection_alias'])) { $connection = $container->get($config['connection_alias']); } elseif (isset($config['connection']) && is_array($config['connection'])) { $connection = DriverManager::getConnection($config['connection']); } if (!$connection instanceof Connection) { throw ConfigurationException::configurationError(sprintf('%s was not able to locate or create a valid Doctrine\\DBAL\\Connection', __CLASS__)); } $messageFactory = $container->has(MessageFactory::class) ? $container->get(MessageFactory::class) : new FQCNMessageFactory(); $messageConverter = $container->has(MessageConverter::class) ? $container->get(MessageConverter::class) : new NoOpMessageConverter(); $payloadSerializer = $container->has(PayloadSerializer::class) ? $container->get(PayloadSerializer::class) : new PayloadSerializer\JsonPayloadSerializer(); return new DoctrineEventStoreAdapter($connection, $messageFactory, $messageConverter, $payloadSerializer, $config['stream_table_map'], $config['load_batch_size']); }
/** * @param ContainerInterface $container * @throws ConfigurationException * @return AggregateRepository */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $config = $this->options($config); $repositoryClass = $config['repository_class']; if (!class_exists($repositoryClass)) { throw ConfigurationException::configurationError(sprintf('Repository class %s cannot be found', $repositoryClass)); } if (!is_subclass_of($repositoryClass, AggregateRepository::class)) { throw ConfigurationException::configurationError(sprintf('Repository class %s must be a sub class of %s', $repositoryClass, AggregateRepository::class)); } $eventStore = $container->get(EventStore::class); $aggregateType = AggregateType::fromAggregateRootClass($config['aggregate_type']); $aggregateTranslator = $container->get($config['aggregate_translator']); $snapshotStore = isset($config['snapshot_store']) ? $container->get($config['snapshot_store']) : null; $streamName = isset($config['stream_name']) ? new StreamName($config['stream_name']) : null; $oneStreamPerAggregate = isset($config['one_stream_per_aggregate']) ? (bool) $config['one_stream_per_aggregate'] : false; return new $repositoryClass($eventStore, $aggregateType, $aggregateTranslator, $snapshotStore, $streamName, $oneStreamPerAggregate); }
/** * @param ContainerInterface $container * @return EventStore */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $config = $this->options($config); $adapter = $container->get($config['adapter']['type']); if (!isset($config['event_emitter'])) { $eventEmitter = new ProophActionEventEmitter(); } else { $eventEmitter = $container->get($config['event_emitter']); } $eventStore = new EventStore($adapter, $eventEmitter); foreach ($config['plugins'] as $pluginAlias) { $plugin = $container->get($pluginAlias); if (!$plugin instanceof Plugin) { throw ConfigurationException::configurationError(sprintf('Plugin %s does not implement the Plugin interface', $pluginAlias)); } $plugin->setUp($eventStore); } return $eventStore; }
/** * @param ContainerInterface $container * @return MongoDbEventStoreAdapter */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); if (!isset($config['prooph']['event_store']['adapter'])) { throw ConfigurationException::configurationError('Missing adapter configuration in prooph event_store configuration'); } $adapterOptions = isset($config['prooph']['event_store']['adapter']['options']) ? $config['prooph']['event_store']['adapter']['options'] : []; $mongoClient = isset($adapterOptions['mongo_connection_alias']) ? $container->get($adapterOptions['mongo_connection_alias']) : new \MongoClient(); if (!isset($adapterOptions['db_name'])) { throw ConfigurationException::configurationError('Mongo database name is missing '); } $dbName = $adapterOptions['db_name']; $messageFactory = $container->has(MessageFactory::class) ? $container->get(MessageFactory::class) : new FQCNMessageFactory(); $messageConverter = $container->has(MessageConverter::class) ? $container->get(MessageConverter::class) : new NoOpMessageConverter(); $writeConcern = isset($adapterOptions['write_concern']) ? $adapterOptions['write_concern'] : []; $streamCollectionName = isset($adapterOptions['collection_name']) ? $adapterOptions['collection_name'] : null; $timeout = isset($adapterOptions['transaction_timeout']) ? $adapterOptions['transaction_timeout'] : null; return new MongoDbEventStoreAdapter($messageFactory, $messageConverter, $mongoClient, $dbName, $writeConcern, $streamCollectionName, $timeout); }