/** * @param Saga $saga * @return void */ public function commit(Saga $saga) { if (!$saga->isActive()) { $this->storage->delete($saga->getId()->getValue()); return; } $associationValues = $this->associationValuesToArray($saga->getAssociationValues()); $this->storage->update(get_class($saga), $saga->getId()->getValue(), $associationValues, $this->serializer->serialize($saga)); }
/** * @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 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']); }
/** * @param int $count * @param ElasticClient $client * @param \Apha\Serializer\Serializer $serializer * @return Document[] */ public function documentsProvider(int $count, ElasticClient $client, \Apha\Serializer\Serializer $serializer) : array { $documents = []; $result = []; for ($i = 0; $i < $count; $i++) { $documents[$i] = new ElasticSearchStateStorageTest_Document('foo', 'bar'); $result[] = ['_source' => $serializer->serialize($documents[$i])]; } return $result; }
/** * @param mixed $value * @return string */ public function serialize($value) : string { return $this->serializer->serialize($value); }
/** * @param Identity $aggregateId * @param string $aggregateType * @param Event $event */ private function saveEvent(Identity $aggregateId, string $aggregateType, Event $event) { $eventData = EventDescriptor::record($aggregateId->getValue(), $aggregateType, $event->getEventName(), $this->serializer->serialize($event), $event->getVersion()); $this->storage->append($eventData); }