/**
  * @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;
     }
 }