/**
  * @param Command $command
  *
  * @return mixed
  */
 public function handle(Command $command)
 {
     $payload = $command->payload();
     if ($payload instanceof RegisterUserCommand) {
         $this->handleRegisterUser($payload);
     }
 }
 /**
  * @param Command $command
  *
  * @return CommandHandler
  *
  * @throws CommandHandlerNotFoundException
  */
 public function findCommandHandlerFor(Command $command)
 {
     if (!isset($this->subscriptions[$command->commandName()])) {
         throw new CommandHandlerNotFoundException();
     }
     return $this->subscriptions[$command->commandName()];
 }
 /**
  * @param Command $command
  *
  * @return mixed
  */
 public function handle(Command $command)
 {
     $payload = $command->payload();
     if ($payload instanceof ChangeUserPasswordCommand) {
         $this->handleChangeUserPassword($payload);
     }
 }
 /**
  * @param Command $command
  *
  * @return mixed
  */
 public function handle(Command $command)
 {
     $payload = $command->payload();
     if ($payload instanceof ChangeUsernameCommand) {
         $this->handleUsernameChange($payload);
     }
 }
 /**
  * @param Command $command
  *
  * @return CommandHandler
  *
  * @throws CommandHandlerNotFoundException
  */
 public function findCommandHandlerFor(Command $command)
 {
     if (!isset($this->subscriptions[$command->commandName()])) {
         throw new CommandHandlerNotFoundException(sprintf('No handler was found for command %s', $command->commandName()));
     }
     return $this->subscriptions[$command->commandName()];
 }
 /**
  * @param \Exception $cause
  */
 public function onFailure(\Exception $cause)
 {
     $this->logger->warning('Command execution failed', ['commandName' => $this->command->commandName(), 'cause' => $cause]);
 }
 public function it_can_find_a_command_handler_for_a_command(Command $command, CommandHandler $handler)
 {
     $command->commandName()->willReturn('commandName');
     $this->subscribe('commandName', $handler);
     $this->findCommandHandlerFor($command)->shouldReturn($handler);
 }
 /**
  * @param Command $command
  *
  * @return array
  */
 public function provideAuditDataFor(Command $command)
 {
     return $command->metadata()->all();
 }
 /**
  * @param Command $command
  *
  * @return array
  */
 public function provideAuditDataFor(Command $command)
 {
     return ['command_name' => $command->commandName(), 'command_identifier' => $command->identifier()->toString()];
 }