/**
  * @param ConsumerRegistrationRequestInterface $request
  *
  * @return Consumer
  *
  * @throws DomainException
  */
 public function handle(ConsumerRegistrationRequestInterface $request)
 {
     $consumerEntity = $request->getConsumerEntity();
     $gguid = UUID::generate();
     $username = new Username($consumerEntity->getUsername());
     $password = new Password($consumerEntity->getPassword());
     $this->validateUsernameIsUnique($username);
     $consumer = new Consumer($gguid, $username, $password);
     $this->consumerRepository->persist($consumer);
     $this->getEventDispatcher()->trigger(new ConsumerRegisteredEvent($gguid));
     return $consumer;
 }
 /**
  * @param HttpRequest $httpRequest
  */
 protected function validateHttpRequest(HttpRequest $httpRequest)
 {
     parent::validateHttpRequest($httpRequest);
     if ($httpRequest->attributes->has('uuid') === false) {
         throw new NotFoundHttpException('Missing required attribute \'uuid\'');
     }
     $uuid = $httpRequest->attributes->get('uuid');
     $consumer = $this->consumerRepository->getOneByUUID($uuid);
     if ($consumer instanceof Consumer === false) {
         throw new NotFoundHttpException('No consumer found with id: ' . $uuid);
     }
     $this->consumer = $consumer;
 }
 /**
  * @param Username $username
  *
  * @return bool
  */
 public function isStatisfiedBy(Username $username)
 {
     return $this->consumerRepository->hasConsumerWithUsername($username) === false;
 }