Skip to content

Instantly share code, notes, and snippets.

@adamrneary
Created January 28, 2015 15:56
Show Gist options
  • Select an option

  • Save adamrneary/d219eff0f2e881d21539 to your computer and use it in GitHub Desktop.

Select an option

Save adamrneary/d219eff0f2e881d21539 to your computer and use it in GitHub Desktop.
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