Beispiel #1
0
 /**
  * @param  AggregateRootInterface $aggregate
  * @return void
  */
 public function save(AggregateRootInterface $aggregate)
 {
     /** @var Uuid $id */
     $id = $aggregate->getId();
     /** @var array $events */
     $events = $aggregate->pullUncommittedEvents();
     try {
         /** @var EventStream $stream */
         $stream = $this->eventStore->get($id);
         $stream->addEvents($events);
     } catch (EventStreamNotFoundException $e) {
         $stream = new EventStream($aggregate->getId(), get_class($aggregate), $events, 1);
     }
     $this->eventStore->commit($stream);
     /** @var EventInterface $event */
     foreach ($events as $event) {
         $this->eventBus->handle($event);
     }
 }