Example #1
0
 /**
  * Takes a snapshot
  * @param StreamName $streamName
  * @param AggregateRootInterface $aggregate
  * @param DomainMessage $message - The domain message
  * @return bool
  */
 public function take(StreamName $streamName, AggregateRootInterface $aggregate, DomainMessage $message)
 {
     $id = $aggregate->getAggregateRootId();
     if (!$this->strategy->isFulfilled($streamName, $aggregate)) {
         return false;
     }
     if (!$this->snapshotStore->has($id, $message->getVersion())) {
         $this->snapshotStore->save(Snapshot::take($id, $aggregate, $message->getVersion()));
     }
     return true;
 }
Example #2
0
 public function save(StreamName $streamName, DomainMessage $event)
 {
     $id = (string) $event->getId();
     $name = (string) $streamName;
     $events = $this->events->get($name);
     if (null === $events) {
         $events = new Map();
         $this->events->add(new Pair($name, $events));
     }
     if (!$events->containsKey($id)) {
         $events->add(new Pair($id, new Vector()));
     }
     $events->get($id)->add($event);
 }
Example #3
0
 /**
  * @test
  * @dataProvider messageProvider
  * @param AggregateIdInterface $aggregateId
  * @param $version
  * @param $payload
  * @param \DateTimeImmutable $date
  */
 public function itShouldCreateAUuidFromNamedConstructor(AggregateIdInterface $aggregateId, $version, $payload, \DateTimeImmutable $date)
 {
     $message = DomainMessage::recordNow($aggregateId, $version, $payload);
     $this->assertInstanceOf(DomainMessage::class, $message);
     $this->assertNotEmpty((int) $message->getRecordedOn()->format('u'), 'Expected microseconds to be set');
     $this->assertEquals(new \DateTimeZone('UTC'), $message->getRecordedOn()->getTimezone());
 }
 private function createEventData(DomainMessage $event)
 {
     return ['aggregate_id' => (string) $event->getId(), 'version' => $event->getVersion(), 'type' => $event->getType(), 'payload' => $this->serializer->serialize($event->getPayload(), 'json'), 'recorded_on' => $event->getRecordedOn()->format('Y-m-d\\TH:i:s.u')];
 }
Example #5
0
 private function record(DomainEventInterface $event)
 {
     $this->uncommittedEvents[] = DomainMessage::recordNow($this->getAggregateRootId(), $this->version, $event);
 }