static list()

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;
                });
        }