Add way more stats and rename existing ones to remove "total" prefix

This commit is contained in:
Paul Bienkowski 2021-02-11 20:04:56 +01:00
parent 2fd3de037c
commit 5fa856c4ea

View file

@ -1,6 +1,7 @@
const router = require('express').Router();
const mongoose = require('mongoose');
const Track = mongoose.model('Track');
const User = mongoose.model('User');
const wrapRoute = require('../../_helpers/wrapRoute');
// round to this number of meters for privacy reasons
@ -9,19 +10,35 @@ const TRACK_LENGTH_ROUNDING = 1000
router.get(
'/',
wrapRoute(async (req, res) => {
const [{totalTrackLength, totalPublicTrackLength}] = await Track.aggregate([
const trackCount = await Track.find().count()
const publicTrackCount = await Track.find({visible: true}).count()
const userCount = await User.find().count()
const [{trackLength, publicTrackLength, numEvents}] = await Track.aggregate([
{$lookup: { from: 'trackdatas', localField: 'publicTrackData', foreignField: '_id', as: 'publicTrackDatas' }},
{$lookup: { from: 'trackdatas', localField: 'trackData', foreignField: '_id', as: 'trackDatas' }},
{$addFields: {publicTrackLength: {$first: '$publicTrackDatas.trackLength'}, trackLength: {$first: '$trackDatas.trackLength'}}},
{$project: {publicTrackLength: true, trackLength: true}},
{$group: {_id: "sum", totalTrackLength: {$sum: '$trackLength'}, totalPublicTrackLength: {$sum: '$publicTrackLength'}}},
{$addFields: {
publicTrackLength: {$first: '$publicTrackDatas.trackLength'},
trackLength: {$first: '$trackDatas.trackLength'},
numEvents: {$first: '$publicTrackDatas.numEvents'},
}},
{$project: {publicTrackLength: true, trackLength: true, numEvents: true}},
{$group: {_id: "sum",
trackLength: {$sum: '$trackLength'},
publicTrackLength: {$sum: '$publicTrackLength'},
numEvents: {$sum: '$numEvents'},
}},
])
const totalTrackLengthPrivatized = Math.floor(totalTrackLength / TRACK_LENGTH_ROUNDING) * TRACK_LENGTH_ROUNDING;
const trackLengthPrivatized = Math.floor(trackLength / TRACK_LENGTH_ROUNDING) * TRACK_LENGTH_ROUNDING;
return res.json({
totalTrackLength: totalTrackLengthPrivatized ,
totalPublicTrackLength,
publicTrackCount,
publicTrackLength,
trackLength: trackLengthPrivatized ,
numEvents,
trackCount,
userCount,
});
})
);