Skip to content

Instantly share code, notes, and snippets.

@jahan-addison
Forked from JosephMoniz/trait.js
Created December 28, 2013 21:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jahan-addison/8164556 to your computer and use it in GitHub Desktop.
Save jahan-addison/8164556 to your computer and use it in GitHub Desktop.
var trait = require("../../util/trait");
module.exports = trait("UserServiceInterface", [
"createUser",
"createUserFromForm",
"getUserByEmail",
"authenticateUser",
"authenticateUserFromForm",
"isUserAdmin"
]);
var RxMap = require("rx-map");
var UserService = require("./users/service");
var LoggingUserService = require("./users/logging");
var map = new RxMap();
function factory(container) {
return map.putIfAbsent("_", function() {
return container("config").flatMap(function(configs) {
var http = container("http");
var logger = container("logger");
return http.combineLatest(logger, function(h, l) {
return new LoggingUserService(l, new UserService(h));
});
});
});
};
module.exports = factory;
var util = require("util");
var Rx = require("rx");
var UserServiceInterface = require("../../interfaces/users");
var CreateUserAction = require("../../../models/actions/user/create");
var GetUserAction = require("../../../models/actions/user/get");
var AuthenticationAction = require("../../../models/actions/user/authenticate");
var IsAdminAction = require("../../../models/actions/user/is-admin");
function LoggingUserService(logger, userService) {
this._logger = logger;
this._userService = userService;
}
module.exports = UserServiceInterface.implement(LoggingUserService, {
createUser: function(email, password) {
var action = new CreateUserAction(email);
var result = this._userService.createUser(email, password);
action
.fromObservableValidation(result)
.subscribe(this._logger.observer());
return result;
},
createUserFromForm: function(data) {
var action = new CreateUserAction(data.email);
var result = this._userService.createUserFromForm(data);
action
.fromObservableForm(result)
.subscribe(this._logger.observer());
return result;
},
getUserByEmail: function(email) {
var action = new GetUserAction(email);
var result = this._userService.getUserByEmail(email);
action
.fromObservableValidation(result)
.subscribe(this._logger.observer());
return result;
},
authenticateUser: function(email, password) {
var action = new AuthenticationAction(email);
var result = this._userService.authenticateUser(email, password);
action
.fromObservableValidation(result)
.subscribe(this._logger.observer());
return result;
},
authenticateUserFromForm: function(data) {
var action = new AuthenticationAction(data.email);
var result = this._userService.authenticateUserFromForm(data);
action
.fromObservableForm(result)
.subscribe(this._logger.observer());
return result;
},
isUserAdmin: function(email) {
var action = new IsAdminAction(email);
var result = this._userService.isUserAdmin(email);
action
.fromObservableBoolean(result)
.subscribe(this._logger.observer());
return result;
}
});
var util = require("util");
var Rx = require("rx");
var Success = require("functional-validation/success");
var Failure = require("functional-validation/failure");
var LoginForm = require("../../../forms/login");
var SignUpForm = require("../../../forms/sign-up");
var api = require("../../../util/api");
var formThenApi = require("../../../util/api").formThenApi;
var UserServiceInterface = require("../../interfaces/users");
function UserService(http) {
this._http = http;
}
module.exports = UserServiceInterface.implement(UserService, {
createUser: api(
"http://user-service/create",
["email", "password"],
function(self) { return self._http; }
),
createUserFromForm: formThenApi(
new SignUpForm(),
"http://user-service/create",
["email", "password", "password2"],
function(self) { return self._http; }
),
getUserByEmail: api(
"http://user-service/get",
["email"],
function(self) { return self._http; }
),
authenticateUser: api(
"http://user-service/auth",
["email", "password"],
function(self) { return self._http; }
),
authenticateUserFromForm: formThenApi(
new LoginForm(),
"http://user-service/auth",
["email", "password"],
function(self) { return self._http; }
),
isUserAdmin: api(
"http://user-service/is_admin",
["email"],
function(self) { return self._http; }
)
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment