/** * @param Events $events */ public function play(Events $events) { /* @var $event \Apha\Message\Event */ foreach ($events->getIterator() as $event) { $this->eventBus->publish($event); } }
/** * @param Events $history */ public function loadFromHistory(Events $history) { if ($history->size() == 0) { return; } foreach ($history->getIterator() as $event) { $this->internalApplyChange($event, false); } $historyCopy = $history->getArrayCopy(); /* @var $lastEvent Event */ $lastEvent = end($historyCopy); $this->version = $lastEvent->getVersion(); }
/** * @param Identity $aggregateId * @param string $aggregateType * @param Events $events * @param int $expectedPlayHead * @throws ConcurrencyException */ public function save(Identity $aggregateId, string $aggregateType, Events $events, int $expectedPlayHead) { if (!$this->isValidPlayHead($aggregateId, $expectedPlayHead)) { throw new ConcurrencyException($expectedPlayHead, $this->current[$aggregateId->getValue()]); } $playHead = $expectedPlayHead; foreach ($events->getIterator() as $event) { /* @var $event Event */ $playHead++; $event->setVersion($playHead); $this->saveEvent($aggregateId, $aggregateType, $event); $this->eventBus->publish($event); } }