/**
* @param string $aggregateId
* @return null|object
*/
protected function loadFromSnapshotStore($aggregateId)
{
$snapshot = $this->snapshotStore->get($this->aggregateType, $aggregateId);
if (!$snapshot) {
return;
}
$aggregateRoot = $snapshot->aggregateRoot();
$streamName = $this->determineStreamName($aggregateId);
$streamEvents = $this->eventStore->loadEventsByMetadataFrom($streamName, ['aggregate_type' => $this->aggregateType->toString(), 'aggregate_id' => $aggregateId], $snapshot->lastVersion() + 1);
if (!$streamEvents->valid()) {
return $aggregateRoot;
}
$this->aggregateTranslator->replayStreamEvents($aggregateRoot, $streamEvents);
return $aggregateRoot;
}