import { padZeros, sleep } from '../helpers.js'; import { mapInformation } from './DB/DBMapping.js'; const dbCoachSequenceTimeout = 1000; export const coachSequenceCache = {}; const rawDBCoachSequence = async (category, number, evaNumber, date, retry = 2) => { try { const searchParams = new URLSearchParams(); searchParams.append("category", category); searchParams.append("date", `${date.getFullYear()}-${padZeros(date.getMonth()+1)}-${padZeros(date.getDate())}`); searchParams.append("time", `${date.getFullYear()}-${padZeros(date.getMonth()+1)}-${padZeros(date.getDate())}T${padZeros(date.getHours())}:${padZeros(date.getMinutes())}:${padZeros(date.getSeconds())}Z`); searchParams.append("evaNumber", evaNumber); searchParams.append("number", number); return await fetch(`/db/vehicle-sequence?${searchParams}`).then(x => x.json()); } catch (e) { sleep(dbCoachSequenceTimeout); if (retry) return rawDBCoachSequence(category, number, evaNumber, date, retry - 1); } } const DBCoachSequence = async (category, number, evaNumber, date) => { const rawSequence = await rawDBCoachSequence(category, number, evaNumber, date); if (!rawSequence) return undefined; return mapInformation(rawSequence, category, number, evaNumber); } export const coachSequenceCacheKey = (category, number, evaNumber, departure) => { if (!category || !number || !evaNumber || !departure) return; return `${category}-${number}-${evaNumber}-${departure.toISOString()}`; }; export const cachedCoachSequence = (category, number, evaNumber, departure) => { const key = coachSequenceCacheKey(category, number, evaNumber, departure); if (!key) return; if (coachSequenceCache[key] === undefined) { coachSequenceCache[key] = (async () => { try { const info = await DBCoachSequence(category, number, evaNumber, departure); coachSequenceCache[key] = info; return info; } catch (e) {} coachSequenceCache[key] = null; }) (); } return coachSequenceCache[key]; };