From: unlishema Date: Sat, 26 Oct 2024 07:56:04 +0000 (-0400) Subject: Updated cache busting more X-Git-Url: https://git.slayer.unlishema.org/?a=commitdiff_plain;h=1e6b05dd74d5134a36cfa2f388559a21306444e2;p=slayer.unlishema.org%2F.git Updated cache busting more --- diff --git a/src/modules/data/assignnments.ts b/src/modules/data/assignnments.ts index 04f21f0..812e1c6 100644 --- a/src/modules/data/assignnments.ts +++ b/src/modules/data/assignnments.ts @@ -4,45 +4,51 @@ let cachedData = null; const CACHE_EXPIRATION_MS = 10 * 60 * 1000; // 10 minutes let cacheTimestamp = Date.now(); +// Helper function to fetch data from URL +async function fetchData(url) { + try { + const response = await fetch(url); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + return await response.json(); + } catch (error) { + logger.error("Error fetching data:", error); + return null; // Return null on error + } +} + // Fetch and cache the assignments data async function fetchAssignments(index = "all", list = false) { // Default to "all" logger.log(`Fetch Assignment: ${index}`); - // Check if we need to fetch new data - if (index != "all" || (!cachedData || (Date.now() - cacheTimestamp) > CACHE_EXPIRATION_MS)) { - try { - let urlBuild = `./data/assignments.json?q=${encodeURIComponent(index)}`; - if (list) urlBuild += `&list`; - if (index != "all") urlBuild += `&cache_bust=${Date.now()}`; - const response = await fetch(urlBuild); - cachedData = await response.json(); - cacheTimestamp = Date.now() + (index == "all" ? 0 : -CACHE_EXPIRATION_MS); // Update timestamp after fetching new data - } catch (error) { - logger.error("Error fetching data:", error); - cachedData = []; // Set to empty array on error to prevent further errors - } + + // Check if we need to fetch new data for "all" + if (!list && (index === "all" && cachedData && (Date.now() - cacheTimestamp) <= CACHE_EXPIRATION_MS)) { + return cachedData; // Return cached data if still valid } - return cachedData; + + // Fetch new data + const urlBuild = `./data/assignments.json?q=${encodeURIComponent(index)}${list ? `&list` : ''}&cache_bust=${Date.now()}`; + const data = await fetchData(urlBuild); + if (index === "all") { + cachedData = data; // Cache data if fetching all + cacheTimestamp = Date.now(); // Update timestamp + } + + return data; // Return the fetched data } // Fetch a single assignment based on the index or alias export async function get(assignment) { - const data = await fetchAssignments(assignment); // By default, fetch all assignments + const data = await fetchAssignments(assignment); // Fetch all assignments by default const lowerCasedAssignment = assignment.toLowerCase(); - for (const a of data) { - if (a["index"].toLowerCase() === lowerCasedAssignment) { - return a; - } - if (a["alias"].some(alias => alias.toLowerCase() === lowerCasedAssignment)) { - return a; - } - } - return null; + return data?.find(a => + a["index"].toLowerCase() === lowerCasedAssignment || + a["alias"].some(alias => alias.toLowerCase() === lowerCasedAssignment) + ) || null; // Return the found assignment or null } // Get an array of the index export async function getIndexList() { const data = await fetchAssignments("all", true); // Fetch all assignments for the index list - - return data.map(a => a["index"]); + return data.map(a => a["index"]); // Return the list of indices } diff --git a/src/modules/data/creatures.ts b/src/modules/data/creatures.ts index c0fa958..ca61288 100644 --- a/src/modules/data/creatures.ts +++ b/src/modules/data/creatures.ts @@ -3,37 +3,43 @@ import * as logger from "../logger"; let cachedCreaturesData = null; const CACHE_EXPIRATION_MS = 10 * 60 * 1000; // 10 minutes -let creaturesCacheTimestamp = Date.now(); +let creaturesCacheTimestamp = Date.now(); // Initial timestamp + +// Fetch creatures data +async function fetchData(url) { + try { + const response = await fetch(url); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + return await response.json(); + } catch (error) { + logger.error("Error fetching data:", error); + return null; // Return null on error + } +} // Fetch and cache the creatures data export async function fetchCreatures(name = "all") { logger.log(`Fetch Creature: ${name}`); - // Check if we need to fetch new data - if (name != "all" || (!cachedCreaturesData || (Date.now() - creaturesCacheTimestamp) > CACHE_EXPIRATION_MS)) { - try { - let urlBuild = `./data/creatures.json?q=${encodeURIComponent(name)}`; - if (name != "all") urlBuild += `&cache_bust=${Date.now()}`; - const response = await fetch(urlBuild); - cachedCreaturesData = await response.json(); - creaturesCacheTimestamp = Date.now() + (name == "all" ? 0 : -CACHE_EXPIRATION_MS); // Update timestamp after fetching new data - } catch (error) { - logger.error("Error fetching data:", error); - cachedCreaturesData = []; // Set to empty array on error to prevent further errors - } + + // If fetching "all", check cache expiration + if (name === "all" && cachedCreaturesData && (Date.now() - creaturesCacheTimestamp <= CACHE_EXPIRATION_MS)) { + return cachedCreaturesData; // Return cached data if still valid } - return cachedCreaturesData; + + // Fetch new data + const urlBuild = `./data/creatures.json?q=${encodeURIComponent(name)}&cache_bust=${Date.now()}`; + const data = await fetchData(urlBuild); + if (name === "all") { + cachedCreaturesData = data; // Cache data if fetching all + creaturesCacheTimestamp = Date.now(); // Update timestamp + } + return data; // Return the fetched data } // Fetch a single creature based on the name export async function get(creature) { - const data = await fetchCreatures(creature); + const data = await fetchCreatures("all"); // Ensure we have all creatures cached const lowerCasedCreature = creature.toLowerCase(); - for (const a of data) { - logger.log(`Creature Compare: ${a["name"]} | ${creature}`); - if (decodeHtml(a["name"].toLowerCase()) === lowerCasedCreature) { - return a; - } - } - return null; + return data?.find(a => decodeHtml(a["name"].toLowerCase()) === lowerCasedCreature) || null; // Use find for compactness } diff --git a/src/modules/data/masters.ts b/src/modules/data/masters.ts index b92119d..aea7e76 100644 --- a/src/modules/data/masters.ts +++ b/src/modules/data/masters.ts @@ -3,35 +3,43 @@ import * as logger from "../logger"; let cachedMastersData = null; const CACHE_EXPIRATION_MS = 10 * 60 * 1000; // 10 minutes -let mastersCacheTimestamp = Date.now(); +let mastersCacheTimestamp = Date.now(); // Initial timestamp + +// Fetch masters data +async function fetchData(url) { + try { + const response = await fetch(url); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + return await response.json(); + } catch (error) { + logger.error("Error fetching data:", error); + return null; // Return null on error + } +} // Fetch and cache the masters data -async function fetchMasters(name = "all") { - // Check if we need to fetch new data - if (name != "all" || (!cachedMastersData || (Date.now() - mastersCacheTimestamp) > CACHE_EXPIRATION_MS)) { - try { - let urlBuild = `./data/masters.json?q=${encodeURIComponent(name)}`; - if (name != "all") urlBuild += `&cache_bust=${Date.now()}`; - const response = await fetch(urlBuild); - cachedMastersData = await response.json(); - mastersCacheTimestamp = Date.now() + (name == "all" ? 0 : -CACHE_EXPIRATION_MS); // Update timestamp after fetching new data - } catch (error) { - logger.error("Error fetching data:", error); - cachedMastersData = []; // Set to empty array on error to prevent further errors - } +export async function fetchMasters(name = "all") { + logger.log(`Fetch Master: ${name}`); + + // If fetching "all", check cache expiration + if (name === "all" && cachedMastersData && (Date.now() - mastersCacheTimestamp <= CACHE_EXPIRATION_MS)) { + return cachedMastersData; // Return cached data if still valid } - return cachedMastersData; + + // Fetch new data + const urlBuild = `./data/masters.json?q=${encodeURIComponent(name)}&cache_bust=${Date.now()}`; + const data = await fetchData(urlBuild); + if (name === "all") { + cachedMastersData = data; // Cache data if fetching all + mastersCacheTimestamp = Date.now(); // Update timestamp + } + return data; // Return the fetched data } // Fetch a single master based on the name export async function get(master) { - const data = await fetchMasters(master); + const data = await fetchMasters("all"); // Ensure we have all masters cached const lowerCasedMaster = master.toLowerCase(); - for (const a of data) { - if (decodeHtml(a["name"].toLowerCase()) === lowerCasedMaster) { - return a; - } - } - return null; + return data?.find(a => decodeHtml(a["name"].toLowerCase()) === lowerCasedMaster) || null; // Use find for compactness } diff --git a/src/modules/data/reapers.ts b/src/modules/data/reapers.ts index 5775647..55426ec 100644 --- a/src/modules/data/reapers.ts +++ b/src/modules/data/reapers.ts @@ -4,42 +4,45 @@ let cachedReapersData = null; const CACHE_EXPIRATION_MS = 10 * 60 * 1000; // 10 minutes let reapersCacheTimestamp = Date.now(); +// Helper function to fetch data from URL +async function fetchData(url) { + try { + const response = await fetch(url); + if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); + return await response.json(); + } catch (error) { + logger.error("Error fetching data:", error); + return null; // Return null on error + } +} + // Fetch and cache the reapers data async function fetchReapers(index = "all", list = false) { logger.log(`Fetch Assignment: ${index}`); - // Check if we need to fetch new data - if (index != "all" || (!cachedReapersData || (Date.now() - reapersCacheTimestamp) > CACHE_EXPIRATION_MS)) { - try { - let urlBuild = `./data/reapers.json?q=${encodeURIComponent(index)}`; - if (list) urlBuild += `&list`; - if (index != "all") urlBuild += `&cache_bust=${Date.now()}`; - const response = await fetch(urlBuild); - cachedReapersData = await response.json(); - reapersCacheTimestamp = Date.now() + (index == "all" ? 0 : -CACHE_EXPIRATION_MS); // Update timestamp after fetching new data - } catch (error) { - logger.error("Error fetching data:", error); - cachedReapersData = []; // Set to empty array on error to prevent further errors - } + + // Check if we need to fetch new data for "all" + if (!list && (index === "all" && cachedReapersData && (Date.now() - reapersCacheTimestamp) <= CACHE_EXPIRATION_MS)) { + return cachedReapersData; // Return cached data if still valid + } + + // Fetch new data + const urlBuild = `./data/reapers.json?q=${encodeURIComponent(index)}${list ? `&list` : ''}&cache_bust=${Date.now()}`; + const data = await fetchData(urlBuild); + if (index === "all") { + cachedReapersData = data; // Cache data if fetching all + reapersCacheTimestamp = Date.now(); // Update timestamp } - return cachedReapersData; + + return data; // Return the fetched data } // Fetch a single reaper based on the index or alias export async function get(reaper) { - const data = await fetchReapers(reaper); - const lowerCasedReaper = reaper.toLowerCase(); - - for (const a of data) { - if (a["index"].toLowerCase() === lowerCasedReaper) { - return a; - } - } - return null; + return await fetchReapers(reaper); // Directly fetch the specific reaper } // Get an array of the index as HTML option elements export async function getIndexList() { - const data = await fetchReapers(); - - return data.map(a => a["index"]); + const data = await fetchReapers("all", true); // Requesting list, so set list to true + return data.map(a => a["index"]); // Return the list of indices }