umpack-express
Version:
user management pack for express framework app
251 lines (209 loc) • 6.21 kB
JavaScript
var Promise = require('bluebird');
var Password = require('../domain/password');
var config = require('../config');
var API_ERRORS = require('../exceptions/apiErrorsEnum');
var User = require('../models/user');
var UserName = require('../domain/userName');
var UserDevice = require('../models/userDevice');
var ResetRequest = require('../models/resetRequest');
exports.getUsers = function() {
return User.find({}).exec()
.then(function(result) {
var userList = result.map(function(item) {
return {
id: item._id,
userName: item.userName,
isActivated: item.isActivated,
roles: item.roles
};
});
return userList;
});
};
exports.updateUserStatus = function(id, isActivated) {
return User.findById(id).exec()
.then(function(user) {
user.isActivated = isActivated;
return user.save();
})
.then(function(user) {
return {
id: user._id,
isActivated: user.isActivated,
userName: user.userName,
roles: user.roles
};
});
};
exports.updateUserRoles = function(userId, roleName, enable) {
return User.findById(userId).exec()
.then(function(user) {
if (!user.roles)
user.roles = [];
if (enable === true) {
user.roles.push(roleName);
return user.save();
}
var roleIndex = user.roles.indexOf(roleName);
if (roleIndex === -1) {
throw API_ERRORS.WRONG_ROLE_NAME;
}
user.roles.splice(roleIndex, 1);
return user.save();
})
.then(function(user) {
return {
id: user._id,
userName: user.userName,
isActivated: user.isActivated,
roles: user.roles
};
});
};
exports.getUserById = function(id) {
return User.findById(id).exec()
.then(function(user) {
return {
id: user._id,
userName: user.userName,
password: user.password,
firstName: user.firstName,
lastName: user.lastName,
email: user.email,
phone: user.phone,
address: user.address,
additionalInfo: user.additionalInfo,
metaData: user.metaData,
isActivated: user.isActivated,
roles: user.roles
};
});
};
exports.getUserByUserName = function(userName) {
var userNameObject;
return Promise.try(function() {
userNameObject = new UserName(userName);
return User.findByUserName(userNameObject);
})
.then(function(user) {
var userObject = user.toObject();
return Object.keys(userObject).filter(function(key) {
return key !== '_id' && key !== 'id';
})
.reduce(function(accumulator, key) {
accumulator[key] = userObject[key];
return accumulator;
}, {
id: userObject._id
});
});
};
exports.deleteUserById = function(id) {
return User.findByIdAndRemove(id);
};
exports.changeUserInfo = function(id, body) {
var info = {
firstName: body.firstName,
lastName: body.lastName,
email: body.email,
phone: body.phone,
address: body.address,
additionalInfo: body.additionalInfo
};
return User.findByIdAndUpdate(id, info);
};
exports.changeUserName = function(id, userName) {
var userNameObject;
return Promise.try(function() {
userNameObject = new UserName(userName);
return User.findByUserName(userNameObject);
})
.then(function(user) {
if (user) throw API_ERRORS.USER_ALREADY_EXISTS;
return User.findById(id);
})
.then(function (user) {
var oldUserName = new UserName(user.userName);
user.userName = userNameObject.value;
return Promise.all([
user.save(),
UserDevice.findOneAndUpdate({userName: oldUserName.value}, {userName: userNameObject.value}).exec(),
ResetRequest.find({userName: oldUserName.value}).setOptions({multi: true}).update({userName: userNameObject.value}).exec()
]);
});
};
exports.resetUserPassword = function(id) {
return User.findById(id).exec()
.then(function(user) {
var password = new Password();
user.setNewPassword(password);
return user.save()
.then(function() {
return password;
});
});
};
exports.updateUserMetaData = function(userName, metaDataObject) {
return User.findByUserName(userName)
.then(function(user) {
user.metaData = metaDataObject;
return user.save();
});
};
exports.getUserMetaDataByUserName = function(userName) {
return User.findByUserName(userName)
.then(function(user) {
return user.metaData;
});
};
exports.filterUsersMetaData = function(key, value) {
var metaObject = {};
metaObject['metaData.' + key] = value;
return User.find(metaObject).exec()
.then(function(result) {
return result.map(toFullUserObject);
});
};
exports.getFullName = function(userName) {
return User.findByUserName(userName)
.then(function(user) {
return user.firstName + ' ' + user.lastName;
});
};
exports.getFullUserObject = function(userName) {
return User.findByUserName(userName)
.then(toFullUserObject);
};
exports.getUserRolesByUserName = function(userName) {
return User.findByUserName(userName)
.then(function(user) {
return {
userName: user.userName,
roles: user.roles
};
});
};
exports.filterUsersByRole = function(role) {
return User.find({
'roles': role
}).exec()
.then(function(result) {
return result.map(toFullUserObject);
});
};
function toFullUserObject(user) {
if (!user) return user;
return {
id: user._id,
userName: user.userName,
firstName: user.firstName,
lastName: user.lastName,
isActivated: user.isActivated,
additionalInfo: user.additionalInfo,
address: user.address,
email: user.email,
phone: user.phone,
roles: user.roles,
metaData: user.metaData
};
}