diff --git a/src/api/controllers/quotesController.js b/src/api/controllers/quotesController.js index 8e0e32b..4eb14df 100644 --- a/src/api/controllers/quotesController.js +++ b/src/api/controllers/quotesController.js @@ -5,38 +5,41 @@ const quoteService = require("../services/quotesService"); const fonts = require("../../fonts/fonts"); const quoteController = async (req, res, next) => { - try { - let theme = themes[req.query.theme] ? themes[req.query.theme] : themes["default"]; + let theme = themes[req.query.theme] + ? themes[req.query.theme] + : themes["default"]; const fontColor = req.query.fontColor; if (fontColor) { theme.quote_color = fontColor; } const bgColor = req.query.bgColor; - const bgSource = req.query.bgSource || ''; - if (bgSource === 'unsplash') { - theme.bg_color = 'transparent'; + const bgSource = req.query.bgSource || ""; + if (bgSource === "unsplash") { + theme.bg_color = "transparent"; } else if (bgColor) { theme.bg_color = bgColor; } - let borderColor = req.query.borderColor || 'rgba(0, 0, 0, 0.2)'; + let borderColor = req.query.borderColor || "rgba(0, 0, 0, 0.2)"; - let animation = animations[req.query.animation] ? animations[req.query.animation] + let animation = animations[req.query.animation] + ? animations[req.query.animation] : animations["default"]; - let layout = layouts[req.query.layout] ? layouts[req.query.layout] + let layout = layouts[req.query.layout] + ? layouts[req.query.layout] : layouts["default"]; - let quotesUrl = req.query.quotesUrl || ''; + let quotesUrl = req.query.quotesUrl || ""; - let quoteCategory = req.query.quoteCategory || ''; + let quoteCategory = req.query.quoteCategory || ""; - let font = fonts[req.query.font] ? fonts[req.query.font] : fonts['default']; + let font = fonts[req.query.font] ? fonts[req.query.font] : fonts["default"]; - let quoteType = req.query.quoteType || ''; - let unsplashQuery = req.query.unsplashQuery || ''; + let quoteType = req.query.quoteType || ""; + let unsplashQuery = req.query.unsplashQuery || ""; let quoteObject = { theme, @@ -48,8 +51,8 @@ const quoteController = async (req, res, next) => { quoteType, borderColor, bgSource, - unsplashQuery - } + unsplashQuery, + }; let svgResponse = await quoteService.getQuote(quoteObject); @@ -62,21 +65,21 @@ const quoteController = async (req, res, next) => { res.header("Pragma", "no-cache"); res.header("Expires", "-1"); res.send(svgResponse); - } catch (error) { console.error(error); - res.send({ + res.status(500).send({ name: error.name, message: error.message, }); - } }; const imageController = async (req, res, next) => { try { - const responseURL = await quoteService.getUnsplashImage(req.query.unsplashQuery); - const escapeHtml = require('escape-html'); + const responseURL = await quoteService.getUnsplashImage( + req.query.unsplashQuery + ); + const escapeHtml = require("escape-html"); const safeUrl = escapeHtml(responseURL); res.send({ url: safeUrl }); } catch (error) { @@ -88,8 +91,7 @@ const imageController = async (req, res, next) => { } }; - module.exports = { quoteController, - imageController + imageController, }; diff --git a/src/api/services/quotesService.js b/src/api/services/quotesService.js index 6969190..bee438e 100644 --- a/src/api/services/quotesService.js +++ b/src/api/services/quotesService.js @@ -36,14 +36,21 @@ const getQuote = async (quoteObj) => { } } else if (quoteCategory) { + if(!quoteFromCategory[quoteCategory]){ + throw new Error('Invalid quote category') + } apiResponse = quoteFromCategory[quoteCategory]; + + if (apiResponse.length === 0) { + throw new Error(`Category "${quoteCategory}" has no quotes available.`); + } + apiResponse = apiResponse[Math.floor(getQuoteIndex(apiResponse.length, quoteType))]; isCustomQuote = true; } else { apiResponse = await requestApi(url); } - let bgImageUrl = ""; if (bgSource === "unsplash") { bgImageUrl = await getUnsplashImage(unsplashQuery || 'random');