diff --git a/src/controllers/filter.controller.js b/src/controllers/filter.controller.js index 825e810..8da82ef 100644 --- a/src/controllers/filter.controller.js +++ b/src/controllers/filter.controller.js @@ -52,6 +52,10 @@ const getFilter = async (req, res, next) => { if (cached) { return res.json({ success: true, results: cached }); } + // Normalize array params to strings + if (Array.isArray(params.genre)) params.genre = params.genre.join(","); + if (Array.isArray(params.type)) params.type = params.type.join(","); + if (Array.isArray(params.status)) params.status = params.status.join(","); const data = await extractFilter(params); setCache(cacheKey, data); res.json({ success: true, results: data }); diff --git a/src/controllers/status.controller.js b/src/controllers/status.controller.js index 29cf3fc..164a50c 100644 --- a/src/controllers/status.controller.js +++ b/src/controllers/status.controller.js @@ -54,7 +54,14 @@ const getStatus = async (req, res, next) => { if (cached) { return res.json({ success: true, results: cached }); } - const data = await extractStatus(status, page); + // Map short status names to full slugs + const statusMap = { + airing: "currently-airing", + completed: "finished-airing", + upcoming: "not-yet-aired" + }; + const mappedStatus = statusMap[status] || status; + const data = await extractStatus(mappedStatus, page); setCache(cacheKey, data); res.json({ success: true, results: data }); } catch (error) { diff --git a/src/extractors/seasons.extractor.js b/src/extractors/seasons.extractor.js index 9b67c49..2090e84 100644 --- a/src/extractors/seasons.extractor.js +++ b/src/extractors/seasons.extractor.js @@ -36,21 +36,7 @@ import { BASE_URL } from "../configs/dataUrl.js"; * console.log(seasons.length); // Number of seasons */ const extractSeasons = async (animeId) => { - try { - // NOTE: This is an internal API endpoint requiring X-Requested-With header - const url = `${BASE_URL}/api/seasons/${animeId}`; - const { data } = await axios.get(url, { - headers: { - ...headers, - "X-Requested-With": "XMLHttpRequest" - } - }); - - return data || []; - } catch (error) { - // NOTE: Return empty array on error to maintain consistent API - throw error; - } + throw new Error("Seasons endpoint not available - source site does not provide this data"); }; export { extractSeasons }; diff --git a/src/extractors/watchOrder.extractor.js b/src/extractors/watchOrder.extractor.js index 9ce08d4..d335a8a 100644 --- a/src/extractors/watchOrder.extractor.js +++ b/src/extractors/watchOrder.extractor.js @@ -36,21 +36,7 @@ import { BASE_URL } from "../configs/dataUrl.js"; * console.log(watchOrder[0].title); // First anime in watch order */ const extractWatchOrder = async (animeId) => { - try { - // NOTE: This is an internal API endpoint requiring X-Requested-With header - const url = `${BASE_URL}/api/watch-order/${animeId}`; - const { data } = await axios.get(url, { - headers: { - ...headers, - "X-Requested-With": "XMLHttpRequest" - } - }); - - return data || []; - } catch (error) { - // NOTE: Return empty array on error to maintain consistent API - throw error; - } + throw new Error("Watch order endpoint not available - source site does not provide this data"); }; export { extractWatchOrder };