/** * @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; }