/** * @param Identifier $id * @return DomainEventStream * @throws EventStreamNotFound */ public function load(Identifier $id) { $cursor = $this->collection->find(['aggregate_id' => (string) $id])->sort(['sequence' => 1]); $messages = []; foreach ($cursor as $message) { $serialized = new SerializedMessageObject($message['aggregate_id'], $message['sequence'], $message['name'], $message['payload'], $message['meta_data'], $message['occurred_on']); $messages[] = $this->serializer->deserialize($serialized); } if (!count($messages)) { throw EventStreamNotFound::forIdentifier($id); } $stream = new GenericDomainEventStream(...$messages); return $stream; }
/** * @param Identifier $id * @return DomainEventStream * @throws EventStreamNotFound */ public function load(Identifier $id) { $statement = $this->pdo->prepare('SELECT * FROM event_store WHERE aggregate_id = ? ORDER BY sequence ASC'); $statement->execute([(string) $id]); $messages = []; foreach ($statement->fetchAll() as $message) { $serialized = new SerializedMessageObject($message['aggregate_id'], $message['sequence'], $message['name'], json_decode($message['payload'], true), json_decode($message['meta_data'], true), $message['occurred_on']); $messages[] = $this->serializer->deserialize($serialized); } if (!count($messages)) { throw EventStreamNotFound::forIdentifier($id); } $stream = new GenericDomainEventStream(...$messages); return $stream; }
/** * @covers \PhpCqrs\Domain\Serializer\Message\MessageSerializer::__construct * @covers \PhpCqrs\Domain\Serializer\Message\MessageSerializer::serialize * @covers \PhpCqrs\Domain\Serializer\Message\MessageSerializer::deserialize * @covers \PhpCqrs\Domain\Serializer\Message\MessageSerializer::payload */ public function testCanSerializeAndDeserialize() { $serializer = new MessageSerializer(new Serializer()); $message = GenericDomainEventMessage::forPayload('1234', 1, new BookPublished('1234')); $object = $serializer->serialize($message); $this->assertEquals($message, $serializer->deserialize($object)); }