public function addAggregateRoot($eventSourcedAggregateRoot)
{
$this->assertAggregateType($eventSourcedAggregateRoot);
$domainEvents = $this->aggregateTranslator->extractPendingStreamEvents($eventSourcedAggregateRoot);
$aggregateId = $this->aggregateTranslator->extractAggregateId($eventSourcedAggregateRoot);
$streamName = $this->determineStreamName($aggregateId);
$enrichedEvents = [];
foreach ($domainEvents as $event) {
$enrichedEvents[] = $this->enrichEventMetadata($event, $aggregateId);
}
if ($this->oneStreamPerAggregate) {
$stream = new Stream($streamName, new ArrayIterator($enrichedEvents));
$this->eventStore->create($stream);
} else {
$this->eventStore->appendTo($streamName, new ArrayIterator($enrichedEvents));
}
}