/** * @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)); }
/** * @param DomainEventStream $stream * @return void */ public function save(DomainEventStream $stream) { $docs = []; foreach ($stream as $message) { $serialized = $this->serializer->serialize($message); $docs[] = ['aggregate_id' => $serialized->aggregateId(), 'sequence' => $serialized->sequence(), 'name' => $serialized->name(), 'payload' => $serialized->payload(), 'meta_data' => $serialized->metaData(), 'occurred_on' => $serialized->occurredOn()]; } $this->collection->batchInsert($docs, ['w' => 1, 'j' => true]); }
/** * @param DomainEventStream $stream * @return void */ public function save(DomainEventStream $stream) { $this->pdo->beginTransaction(); try { $statement = $this->pdo->prepare('INSERT INTO event_store (aggregate_id, sequence, name, payload, meta_data, occurred_on) VALUES (?, ?, ?, ?, ?, ?)'); foreach ($stream as $message) { $serialized = $this->serializer->serialize($message); $statement->execute([$serialized->aggregateId(), $serialized->sequence(), $serialized->name(), json_encode($serialized->payload(), JSON_FORCE_OBJECT), json_encode($serialized->metaData(), JSON_FORCE_OBJECT), $serialized->occurredOn()]); } $this->pdo->commit(); } catch (PDOException $exception) { $this->pdo->rollBack(); throw $exception; } }