/**
  * @param MarkTodoAsDone $command
  */
 public function __invoke(MarkTodoAsDone $command)
 {
     $todo = $this->todoList->get($command->todoId());
     if (!$todo) {
         throw TodoNotFound::withTodoId($command->todoId());
     }
     $todo->markAsDone();
 }
 /**
  * @param MarkTodoAsDone $command
  */
 public function __invoke(MarkTodoAsDone $command)
 {
     $todo = $this->todoList->get($command->todoId());
     $todo->markAsDone();
 }
        return $duration / $commandCount;
    }
    $container = (require 'config/container.php');
    $commandBus = $container->get(\Prooph\ServiceBus\CommandBus::class);
    $openTodos = [];
    $stopWatch = new Stopwatch();
    $stopWatch->start('generate_model');
    for ($i = 1; $i <= NUMBER_OF_USERS; $i++) {
        $userId = UserId::generate();
        $username = getUserName($i);
        $email = $username . '@acme.com';
        $commandBus->dispatch(RegisterUser::withData($userId->toString(), $username, $email));
        for ($j = 0; $j < NUMBER_OF_TODO_PER_USER; $j++) {
            $todoId = TodoId::generate();
            $commandBus->dispatch(PostTodo::forUser($userId->toString(), randTodoText(), $todoId->toString()));
            $openTodos[] = $todoId->toString();
        }
        echo "User: "******"(" . $userId->toString() . ") was registered\n";
    }
    $generatedEvent = $stopWatch->stop('generate_model');
    echo "\nModel generated in: " . $generatedEvent->getDuration() . " ms\n";
    echo "Command execution average: " . calcCommandAverage($generatedEvent->getDuration()) . " ms\n";
    echo "\nGoing to close todo randomly now\n";
    foreach ($openTodos as $openTodoId) {
        $close = rand(0, 1);
        if ($close) {
            $commandBus->dispatch(MarkTodoAsDone::forTodo($openTodoId));
        }
    }
    echo "Done! Check out proophessor-do";
}