diff --git a/pages/api/get-categories.js b/pages/api/get-categories.js new file mode 100644 index 0000000..ec9352f --- /dev/null +++ b/pages/api/get-categories.js @@ -0,0 +1,25 @@ +import manifest from '../../manifest.js'; + +/** + * @brief Get categories list as an array of strings. + */ +function getCategories() { + let categories = []; + + for (let i = 0; i < manifest.length; i++) { + const entry = manifest[i]; + categories.push(entry.category); + } + + return categories; +} + +export default function handler(req, res) { + if (req.method !== "GET") { + res.setHeader("Allow", ["GET"]); + res.status(405).end(`Method ${req.method} Not Allowed`); + return; + } + + res.status(200).json(getCategories()); +} diff --git a/pages/api/get-items.js b/pages/api/get-items.js new file mode 100644 index 0000000..a7995db --- /dev/null +++ b/pages/api/get-items.js @@ -0,0 +1,38 @@ +import manifest from '../../manifest.js'; + +function getCategoryToItemsMap() { + let map = {}; + + for (let i = 0; i < manifest.length; i++) { + const entry = manifest[i]; + map[entry.category] = entry.items; + } + + return map; +} + +export default function handler(req, res) { + if (req.method !== "GET") { + res.setHeader("Allow", ["GET"]); + res.status(405).end(`Method ${req.method} Not Allowed`); + return; + } + + let categoryName = req.query.category; + + // // if no category chosen, send all categories + // if (categoryName === undefined) { + // res.status(200).json({ categories: manifest }); + // return; + // } + + const map = getCategoryToItemsMap(); + + if (!map.hasOwnProperty(categoryName)) { + res.status(400).end(`400 Bad Request\nInvalid category name "${categoryName}".`); + return; + } + + const items = map[categoryName]; + res.status(200).json(items); +}