/** * {@inheritdoc} */ public function wrap(Identifies $aggregateId, DomainEvents $domainEvents) { $lookupKey = $aggregateId->toString(); if (!isset($this->aggregateVersions[$lookupKey])) { $this->aggregateVersions[$lookupKey] = -1; } $envelopeClass = $this->eventEnvelopeClass; $envelopes = []; /** @var DomainEvent $event */ foreach ($domainEvents as $event) { $aggregateVersion = ++$this->aggregateVersions[$lookupKey]; /** @noinspection PhpUndefinedMethodInspection */ $envelopes[] = $envelopeClass::envelop($this->eventIdFactory->generate(), $this->eventNameResolver->resolveEventName($event), $event, $aggregateId, $aggregateVersion, Timestamp::now(), new Metadata([])); } return new EventStream($aggregateId, $envelopes); }
/** * {@inheritdoc} */ public function read(Identifies $aggregateId) { $statement = $this->prepareSelectStatement(); $statement->bindValue('aggregate_id', (string) $aggregateId, Type::GUID); $statement->execute(); $envelopes = []; while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { $eventName = $row['event_name']; $eventClass = $this->eventNameResolver->resolveEventClass($eventName); $event = $this->serializer->deserialize($row['event_payload'], $eventClass); $metadata = $this->serializer->deserialize($row['metadata'], 'SimpleES\\EventSourcing\\Metadata\\Metadata'); $envelopes[] = EventEnvelope::fromStore(EventId::fromString($row['event_id']), $eventName, $event, $aggregateId, (int) $row['aggregate_version'], Timestamp::fromString($row['took_place_at']), $metadata); } if (!$envelopes) { throw AggregateIdNotFound::create($aggregateId); } return new EventStream($aggregateId, $envelopes); }