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..e9aef5b --- /dev/null +++ b/pages/api/get-items.js @@ -0,0 +1,32 @@ +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; + + 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); +}