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