Author: Alexander Miertsch (contact@prooph.de)
Inheritance: extends RuntimeException, implements EventStoreException
 /**
  * @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);
 }