]> Slayer Assistant Repositories - slayer.unlishema.org/.git/commitdiff
Updated cache busting more
authorunlishema <unlishema@jtryba.com>
Sat, 26 Oct 2024 07:56:04 +0000 (03:56 -0400)
committerunlishema <unlishema@jtryba.com>
Sat, 26 Oct 2024 07:56:04 +0000 (03:56 -0400)
src/modules/data/assignnments.ts
src/modules/data/creatures.ts
src/modules/data/masters.ts
src/modules/data/reapers.ts

index 04f21f0e56a563a6e5b9c7adec467802deaaeb8d..812e1c6ccb61675f0275d80d01962e1794bdc880 100644 (file)
@@ -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
 }
index c0fa95879595b3730e30784de211794f2e20b2fe..ca612882d072c9ee0a583e95744322bf939e8ed5 100644 (file)
@@ -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
 }
index b92119d5c3ade5127992469612c85d4d1f066747..aea7e767d68987b3c76f91985d73286c4e20e052 100644 (file)
@@ -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
 }
index 5775647a8f5fb85e753f7e730f4f95c8c567422b..55426ece3c1a6973cef2acf2517fc327572c7c2a 100644 (file)
@@ -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
 }