Created
January 28, 2015 15:56
-
-
Save adamrneary/d219eff0f2e881d21539 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| UserService.prototype.find = function (params, callback) { | |
| /* | |
| Need: | |
| - sort | |
| - search | |
| */ | |
| var query = {}, | |
| sort = params.sort || 'displayName', | |
| options = { | |
| 'sort': (params.descending ? '-' : '') + sort | |
| }, | |
| searchCriteria = params.searchCriteria, | |
| filters = params.searchFilters, | |
| projectKey = params.projectKey; | |
| if(filters) { | |
| for(var key in filters) { | |
| if(filters[key]) { | |
| query[key]=filters[key]; | |
| } | |
| } | |
| } | |
| // if(params.after) { | |
| // var afterDate = moment(params.after); | |
| // if(params.descending) { | |
| // query[sort] = { $lt: afterDate.toDate() }; | |
| // } else { | |
| // query[sort] = { $gt: afterDate.toDate() }; | |
| // } | |
| // } | |
| query["$or"] = [{deleted: {$exists: false}}, {deleted: false}]; | |
| if(isFinite(params.limit)) { | |
| // options.limit = params.limit; | |
| if(isFinite(params.page)) { | |
| // options.skip = (params.page-1) * params.limit; | |
| } | |
| } | |
| if(searchCriteria && (searchCriteria.length > 1 || searchCriteria[0].term !== '')) { | |
| searchly.findConsultants(searchCriteria, function(err, result) { | |
| if(err) log(err); | |
| var userKeys = []; | |
| if(result) { | |
| result.forEach(function(consultant) { | |
| userKeys.push(consultant.id); | |
| }); | |
| } | |
| query['key'] = {$in: userKeys}; | |
| findUsers(projectKey, query, sort, options, function(err, result) { | |
| var users = result.users; | |
| var sortedUsers = users.sort(function(u1, u2) { | |
| var u1Index = userKeys.indexOf(u1.key); | |
| var u2Index = userKeys.indexOf(u2.key); | |
| return u1Index - u2Index; | |
| }); | |
| result.users = sortedUsers.splice((params.page-1) * params.limit, params.limit); | |
| callback(err, result); | |
| }); | |
| }) | |
| } else { | |
| findUsers(projectKey, query, sort, options, function(err, result) { | |
| result.users = result.users.splice((params.page-1) * params.limit, params.limit); | |
| callback(err, result); | |
| }); | |
| } | |
| }; | |
| var findUsers = function(projectKey, query, sort, options, callback) { | |
| options.populate = 'company'; | |
| User.find(query, null, options, function(err, users) { | |
| if(err) { | |
| callback(err, null); | |
| } else { | |
| delete query[sort]; | |
| delete query['accountType']; | |
| User.find(query, 'accountType', null, function(err, totalUsers) { | |
| if(err) { | |
| callback(err, null); | |
| } else { | |
| var companies = 0; | |
| var consultants = 0; | |
| totalUsers.forEach(function(user) { | |
| if(!user.isAdmin()) { | |
| if(user.isCompany()) { | |
| companies++; | |
| } else { | |
| consultants++; | |
| } | |
| } | |
| }); | |
| if(projectKey) { | |
| var userIds = []; | |
| users.forEach(function(user) { | |
| if(user.key) { | |
| userIds.push(user._id); | |
| } | |
| }); | |
| findUserProjectScores(projectKey, userIds, function(err, userProjects) { | |
| var sortedUsers = []; | |
| if(userProjects && userProjects.length > 0) { | |
| userProjects.forEach(function(userProject) { | |
| var user = userProject.user; | |
| sortedUsers.push(user); | |
| }); | |
| } else { | |
| sortedUsers = users; | |
| } | |
| callback(err, { | |
| users: sortedUsers, | |
| numberOfConsultants: consultants, | |
| numberOfCompanies: companies | |
| }); | |
| }) | |
| } else { | |
| callback(null, { | |
| users: users, | |
| numberOfConsultants: consultants, | |
| numberOfCompanies: companies | |
| }); | |
| } | |
| } | |
| }); | |
| } | |
| }); | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment