/**
  * @param Event $event
  *
  * @throws \Exception
  */
 public function addEvent(Event $event)
 {
     $expectedSequenceNumber = $this->nextSequenceNumber();
     if (null !== $expectedSequenceNumber && $expectedSequenceNumber !== $event->sequenceNumber()) {
         throw new \Exception('Corrupted sequence number.');
     }
     $this->events[] = $this->applyRegistrationCallbacks($event);
 }
 /**
  * @param Event $event
  *
  * @return mixed
  */
 public function handle(Event $event)
 {
     $payload = $event->payload();
     if ($payload instanceof UserRegistered) {
         $this->handleUserRegistration($payload);
     } elseif ($payload instanceof ChangedUsername) {
         $this->handleUsernameChange($payload);
     }
 }
 /**
  * @param Event $event
  *
  * @return mixed
  */
 public function handle(Event $event)
 {
     $payload = $event->payload();
     if ($payload instanceof UserRegistered) {
         $this->insertRegisteredUser($payload);
     } elseif ($payload instanceof ChangedPassword) {
         $this->updateUserPassword($payload);
     } elseif ($payload instanceof ChangedUsername) {
         $this->updateUsername($payload);
     }
 }
 public function it_should_apply_registration_callbacks_on_registered_events(Event $event1, Event $event2, Event $event3, Event $event4, Event $event5, EventRegistrationCallback $callback, EventRegistrationCallback $callback2)
 {
     $event1->sequenceNumber()->willReturn(1);
     $event2->sequenceNumber()->willReturn(2);
     $event3->sequenceNumber()->willReturn(1);
     $event4->sequenceNumber()->willReturn(2);
     $this->addEvent($event1);
     $this->addEvent($event2);
     $callback->onEventRegistration($event1)->shouldBeCalledTimes(1)->willReturn($event3);
     $callback->onEventRegistration($event2)->shouldBeCalledTimes(1)->willReturn($event4);
     $this->addRegistrationCallback($callback);
     $callback2->onEventRegistration($event3)->shouldBeCalledTimes(1)->willReturn($event3);
     $callback2->onEventRegistration($event4)->shouldBeCalledTimes(1)->willReturn($event4);
     $this->addRegistrationCallback($callback2);
     $event5->sequenceNumber()->willReturn(3);
     $callback->onEventRegistration($event5)->shouldBeCalledTimes(1)->willReturn($event5);
     $callback2->onEventRegistration($event5)->shouldBeCalledTimes(1)->willReturn($event5);
     $this->addEvent($event5);
 }
 /**
  * Mutate the state of the aggregate by applying the domain event contained into the message.
  * Synchronize the aggregate version with the one provided by the message.
  *
  * @param Event $event
  */
 private final function replayChange(Event $event)
 {
     $this->apply($event->payload());
     $this->lastCommittedEventSequenceNumber = $event->sequenceNumber();
 }
 public function it_can_serialize_metadata($serializer, Event $event, Metadata $metadata)
 {
     $event->metadata()->shouldBeCalledTimes(1)->willReturn($metadata);
     $serializer->serialize($metadata)->shouldBeCalledTimes(1)->willReturn('{}');
     $this->serializeMetadata($event)->shouldReturn('{}');
 }
 /**
  * @param Event $event
  *
  * @return mixed
  */
 public function serializeMetadata(Event $event)
 {
     return $this->serializer->serialize($event->metadata());
 }