in modules/backend/services/users.js [163:223]
static list(params) {
return Promise.all([
Promise.all([
mongo.Account.aggregate([
{$lookup: {from: 'spaces', localField: '_id', foreignField: 'owner', as: 'spaces'}},
{$project: {
_id: 1,
firstName: 1,
lastName: 1,
admin: 1,
email: 1,
company: 1,
country: 1,
lastLogin: 1,
lastActivity: 1,
activated: 1,
spaces: {
$filter: {
input: '$spaces',
as: 'space',
cond: {$eq: ['$$space.demo', false]}
}
}
}},
{ $sort: {firstName: 1, lastName: 1}}
]).exec(),
mongo.Cluster.aggregate([{$group: {_id: '$space', count: { $sum: 1 }}}]).exec(),
mongo.Cache.aggregate([{$group: {_id: '$space', count: { $sum: 1 }}}]).exec(),
mongo.DomainModel.aggregate([{$group: {_id: '$space', count: { $sum: 1 }}}]).exec(),
mongo.Igfs.aggregate([{$group: {_id: '$space', count: { $sum: 1 }}}]).exec()
]).then(([users, clusters, caches, models, igfs]) => {
const clustersMap = _.mapValues(_.keyBy(clusters, '_id'), 'count');
const cachesMap = _.mapValues(_.keyBy(caches, '_id'), 'count');
const modelsMap = _.mapValues(_.keyBy(models, '_id'), 'count');
const igfsMap = _.mapValues(_.keyBy(igfs, '_id'), 'count');
_.forEach(users, (user) => {
const counters = user.counters = {};
counters.clusters = _.sumBy(user.spaces, ({_id}) => clustersMap[_id]) || 0;
counters.caches = _.sumBy(user.spaces, ({_id}) => cachesMap[_id]) || 0;
counters.models = _.sumBy(user.spaces, ({_id}) => modelsMap[_id]) || 0;
counters.igfs = _.sumBy(user.spaces, ({_id}) => igfsMap[_id]) || 0;
delete user.spaces;
});
return users;
}),
activitiesService.total(params),
activitiesService.detail(params)
])
.then(([users, activitiesTotal, activitiesDetail]) => {
_.forEach(users, (user) => {
user.activitiesTotal = activitiesTotal[user._id];
user.activitiesDetail = activitiesDetail[user._id];
});
return users;
});
}