/** * @param Identity $identity * @param EventStorage $eventStorage * @param Serializer $serializer */ private function prepareSomeEvents(Identity $identity, EventStorage $eventStorage, Serializer $serializer) { // This is not the preferred way, but used for simplicity! You should use commands to achieve this. $event = new CreatedEvent($identity); $event->setVersion(1); $eventStorage->append(EventDescriptor::record($identity->getValue(), 'aggregateType', $event->getEventName(), $serializer->serialize($event), $event->getVersion())); $event = new DemonstratedEvent($identity); $event->setVersion(2); $eventStorage->append(EventDescriptor::record($identity->getValue(), 'aggregateType', $event->getEventName(), $serializer->serialize($event), $event->getVersion())); }
/** * @param Identity $sagaIdentity * @param string $sagaType * @return Saga */ public function load(Identity $sagaIdentity, string $sagaType) { $sagaData = $this->storage->findById($sagaIdentity->getValue()); if (empty($sagaData)) { return null; } return $this->serializer->deserialize($sagaData, $sagaType); }
/** * @param Identity $aggregateId */ public function __construct(Identity $aggregateId) { parent::__construct(sprintf(static::$messageTemplate, $aggregateId->getValue())); }
/** * @param Identity $aggregateId * @return Events * @throws AggregateNotFoundException */ public function getEventsForAggregate(Identity $aggregateId) : Events { if (!$this->storage->contains($aggregateId->getValue())) { throw new AggregateNotFoundException($aggregateId); } $eventData = $this->storage->find($aggregateId->getValue()); $events = array_map(function (EventDescriptor $data) : Event { return $this->serializer->deserialize($data->getPayload(), $this->eventMap->getClassByEventName($data->getEvent())); }, $eventData); return new Events($events); }