lts-stats-api/app/controllers/sessionsController.js
2023-01-06 00:58:55 +01:00

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