import { padZeros, sleep } from '../helpers.js'; import { mapInformation } from './DBMapping.js'; const dbCoachSequenceTimeout = 1500; 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) { await sleep(dbCoachSequenceTimeout); if (retry) return rawDBCoachSequence(category, number, evaNumber, date, retry - 1); } } export const cachedCoachSequence = (category, number, evaNumber, departure, mode) => { if (!category || !number || !evaNumber || !departure) return null; const key = `${category}-${number}-${evaNumber}-${departure.toISOString()}`; let rawSequence = sessionStorage.getItem(key); let cachedResponse = true; if (mode === 'noCache') rawSequence = null; if (!rawSequence) { if (mode === 'onlyCached') return null; cachedResponse = false; rawSequence = (async () => { try { const rawSequence = await rawDBCoachSequence(category, number, evaNumber, departure); if (!rawSequence) return null; sessionStorage.setItem(key, JSON.stringify(rawSequence)); return rawSequence; } catch (e) { console.log(e) return null; } })(); } else { rawSequence = JSON.parse(rawSequence); } return { ...mapInformation(rawSequence, category, number, evaNumber), cachedResponse }; };