/** * @param string $data * @param string $type * @return mixed */ public function deserialize(string $data, string $type) { /* @var $deserialized Saga */ $deserialized = $this->serializer->deserialize($data, $type); $this->factory->hydrate($deserialized); return $deserialized; }
/** * @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 * @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); }
/** * @param array $query * @param int $offset * @param int $limit * @return Document[] */ private function query(array $query, int $offset, int $limit) : array { $params = $this->createParams(); $params['body'] = ['query' => $query]; $params['from'] = $offset; $params['size'] = $limit; $result = $this->client->search($params); if (empty($result['hits']['hits'])) { return []; } return array_map(function (array $hit) : Document { return $this->serializer->deserialize($this->serializer->serialize($hit['_source']), $this->documentClass); }, $result['hits']['hits']); }