protected function createAggregateRootFromHistory(AggregateRootEventList $history, $target_revision = null)
 {
     $target_revision = $target_revision ?: $history->getLast()->getSeqNumber();
     if ($history->getLast()->getSeqNumber() > $target_revision) {
         $known_history = $history->filter(function (AggregateRootEventInterface $event) use($target_revision) {
             return $event->getSeqNumber() <= $target_revision;
         });
     } else {
         $known_history = $history;
     }
     $aggregate_root = $this->getAggregateRootType()->createEntity();
     $aggregate_root->reconstituteFrom($known_history);
     return $aggregate_root;
 }
 protected function loadSpecificResourceRevision(AggregateRootEventList $history, $revision)
 {
     $aggregate_root = $this->getAggregateRootType()->createEntity();
     $aggregate_root->reconstituteFrom($history->filter(function (AggregateRootEventInterface $event) use($revision) {
         return $event->getSeqNumber() <= $revision;
     }));
     return $this->getProjectionType()->createEntity($aggregate_root->toNative());
 }