The shared factory for user data was created.

It seems here that your tournamentCtrl is actually depending on the internal implementation of the users factory. I believe we can get rid of that with the usage of $q as we discussed the other day:

How about something like this?

In tournamentCtrl:

```javascript
usersFactory.getAllUsers().then(function(users) {
    $scope.users = users;
});
```

In the usersFactory:

```javascript
var loaded = false;
var usersCache = null;

var loadAllUsers = function() {
  return $http.get('/api/users');
};

return {
  getAllUsers: function() {
    if (loaded) {
      // resolve immediately
      var deferred = $q.defer();
      deferred.resolve(usersCache);
      return deferred.promise;
    } else {
      // resolve when we actually get the data
      return $http.get('/api/users').then(function(loadedUsers) {
        loaded = true;
        usersCache = loadedUsers;
      });
    }
  }
};
```