86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
const moment = require('moment');
|
|
const { getUserFromReferenceTable } = require('../db/mongo/mongoPilots');
|
|
const { getSessions } = require('../db/mongo/mongoSessions');
|
|
const { getHistoricalSessions } = require('../requests/ivao/session');
|
|
|
|
async function getTodaySessionsFromIvao(callsign, incompletes) {
|
|
const from = moment().utc().startOf('day').format();
|
|
const to = moment().utc().endOf('day').format();
|
|
const params = {
|
|
callsign,
|
|
from,
|
|
to,
|
|
};
|
|
const data = await getHistoricalSessions(params);
|
|
if (!incompletes) {
|
|
return data.filter(d => d.isCompleted);
|
|
}
|
|
return data;
|
|
|
|
}
|
|
|
|
async function checkUsername(user, key) {
|
|
const u = {...user };
|
|
if (!u.name) {
|
|
const ref = await getUserFromReferenceTable(key);
|
|
if (ref) {
|
|
u.name = ref.name;
|
|
} else {
|
|
console.log(`Couldn't find info for ${key}`);
|
|
}
|
|
}
|
|
return u;
|
|
}
|
|
|
|
async function getList(callsign) {
|
|
const from = moment().utc().startOf('month');
|
|
const to = moment().subtract(1, 'day').utc().endOf('day');
|
|
const todayData = await getTodaySessionsFromIvao(callsign);
|
|
const monthData = await getSessions(from, to);
|
|
const allData = [...todayData, ...monthData];
|
|
|
|
const totalsByUserId = allData.reduce((acc, d) => {
|
|
const userId = d.userId;
|
|
const flightPlan = d.flightPlans[d.flightPlans.length - 1];
|
|
const date = moment(d.completedAt);
|
|
// console.log(date);
|
|
|
|
if (!acc[userId]) {
|
|
acc[userId] = {
|
|
time: 0,
|
|
flights: 0
|
|
};
|
|
}
|
|
acc[userId].time += d.time;
|
|
acc[userId].flights++;
|
|
|
|
if (!acc[userId].lastFlight || date.isAfter(acc[userId].lastFlightDate)) {
|
|
acc[userId].lastFlight = {...flightPlan };
|
|
acc[userId].lastFlightDate = date;
|
|
acc[userId].lastCallsign = d.callsign;
|
|
|
|
delete acc[userId].lastFlight.id;
|
|
if (d.user.firstName) {
|
|
acc[userId].name = `${d.user.firstName} ${d.user.lastName || ''}`;
|
|
}
|
|
acc[userId].division = d.user.divisionId;
|
|
}
|
|
|
|
return acc;
|
|
}, {});
|
|
|
|
const array = [];
|
|
for (const key in totalsByUserId) {
|
|
if (Object.hasOwnProperty.call(totalsByUserId, key)) {
|
|
const user = await checkUsername(totalsByUserId[key], key);
|
|
user.vid = key;
|
|
array.push(user);
|
|
}
|
|
}
|
|
|
|
return array;
|
|
}
|
|
|
|
module.exports = {
|
|
getList,
|
|
}; |