예제 #1
0
 /**
  * @test
  */
 public function itShouldPublishUserRegisteredEvent()
 {
     $id = DomainEventPublisher::instance()->subscribe($subscriber = new SpySubscriber());
     new User($userId = new UserId(), '*****@*****.**', 'password');
     DomainEventPublisher::instance()->unsubscribe($id);
     $this->assertUserRegisteredEventPublished($subscriber, $userId);
 }
예제 #2
0
 /**
  * Constructor.
  *
  * @param \Domain\Model\User\UserId    $anId      The user id
  * @param \Domain\Model\User\UserEmail $anEmail   The email address
  * @param string                       $aPassword The password
  */
 public function __construct(UserId $anId, UserEmail $anEmail, $aPassword)
 {
     $this->userId = $anId;
     $this->email = $anEmail;
     $this->changePassword($aPassword);
     DomainEventPublisher::instance()->publish(new UserRegistered($this->userId));
 }
예제 #3
0
 /**
  * @param UserId $userId
  * @param string $email
  * @param string $password
  */
 public function __construct(UserId $userId, $email, $password)
 {
     $this->userId = $userId;
     $this->setEmail($email);
     $this->changePassword($password);
     $this->createdOn = new \DateTime();
     $this->updatedOn = new \DateTime();
     DomainEventPublisher::instance()->publish(new UserRegistered($this->userId));
 }
예제 #4
0
 public function authenticate($email, $password)
 {
     DomainEventPublisher::instance()->publish(new LogInAttempted($email));
     if ($this->isAlreadyAuthenticated()) {
         return true;
     }
     $user = $this->repository->ofEmail($email);
     if (!$user) {
         return false;
     }
     if ($user->password() !== $password) {
         return false;
     }
     $this->persistAuthentication($user);
     return true;
 }
예제 #5
0
 public function grant()
 {
     DomainEventPublisher::instance()->publish(new WishGranted($this->wishId));
 }
예제 #6
0
        $app['session']->getFlashBag()->add('message', ['info' => 'Error!']);
    }
    return $app->redirect('/dashboard');
})->bind('delete-wish');
$app->get('/wish/{wishId}', function ($wishId) use($app) {
    $userSecurityToken = $app['session']->get('user');
    if (!$userSecurityToken) {
        return $app->redirect('/login');
    }
    $userId = $userSecurityToken->id()->id();
    // \Lw\Application\Service\Wish\ViewWishService
    $response = $app['view_wish_application_service']->execute(new \Lw\Application\Service\Wish\ViewWishRequest($wishId, $userId));
    return $app['twig']->render('view-wish.html.twig', ['wish' => $response]);
})->bind('view-wish');
$app->before(function (Symfony\Component\HttpFoundation\Request $request) use($app) {
    DomainEventPublisher::instance()->subscribe(new PersistDomainEventSubscriber($app['event_store']));
});
// RESTful
/*
$app->post('/wish/{wishId}', function ($wishId, Request $request) use ($app) {
    $userSecurityToken = $app['session']->get('user');
    if (!$userSecurityToken) {
        return $app->redirect('/login');
    }
    $userId = $userSecurityToken->id();
    // \Lw\Application\Service\Wish\AddWishService
    $response = $app['update_wish_application_service']
        ->execute(
            $userId,
            $wishId,
            $request->get('email'),
예제 #7
0
 private function fireEvent($playerId, $message)
 {
     DomainEventPublisher::instance()->publish(new Generic($playerId . ' ' . $message));
 }
예제 #8
0
 public function makeWishNotBeingAnAggregate(WishId $wishId, $address, $content)
 {
     $newWish = new Wish($wishId, $this->id(), $address, $content);
     DomainEventPublisher::instance()->publish(new WishWasMade($newWish->id(), $newWish->userId(), $newWish->address(), $newWish->content()));
     return $newWish;
 }
예제 #9
0
    return $app->redirect('/dashboard');
})->bind('update-wish');
// Delete wish
$app->get('/wish/delete/{wishId}', function ($wishId) use($app) {
    $userSecurityToken = $app['session']->get('user');
    if (!$userSecurityToken) {
        return $app->redirect('/login');
    }
    $userId = $userSecurityToken->id()->id();
    try {
        $app['delete_wish_application_service']->execute(new \Lw\Application\Service\Wish\DeleteWishRequest($wishId, $userId));
        $app['session']->getFlashBag()->add('message', ['info' => 'Deleted!']);
    } catch (\Exception $e) {
        $app['session']->getFlashBag()->add('message', ['info' => 'Error!']);
    }
    return $app->redirect('/dashboard');
})->bind('delete-wish');
$app->get('/wish/{wishId}', function ($wishId) use($app) {
    $userSecurityToken = $app['session']->get('user');
    if (!$userSecurityToken) {
        return $app->redirect('/login');
    }
    $userId = $userSecurityToken->id()->id();
    $response = $app['view_wish_application_service']->execute(new \Lw\Application\Service\Wish\ViewWishRequest($wishId, $userId));
    return $app['twig']->render('view-wish.html.twig', ['wish' => $response]);
})->bind('view-wish');
$app->before(function (Symfony\Component\HttpFoundation\Request $request) use($app) {
    DomainEventPublisher::instance()->subscribe(new PersistDomainEventSubscriber($app['event_store']));
    DomainEventPublisher::instance()->subscribe(new LoggerDomainEventSubscriber());
});
$app->run();
예제 #10
0
 public function letGo()
 {
     static $id = 0;
     AllEventsSubscriber::reset();
     DomainEventPublisher::instance()->unsubscribe($id++);
 }
예제 #11
0
 private function notify(DomainEvent $event)
 {
     DomainEventPublisher::instance()->publish($event);
 }