Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 24 additions & 22 deletions src/api/controllers/quotesController.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -48,8 +51,8 @@ const quoteController = async (req, res, next) => {
quoteType,
borderColor,
bgSource,
unsplashQuery
}
unsplashQuery,
};

let svgResponse = await quoteService.getQuote(quoteObject);

Expand All @@ -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) {
Expand All @@ -88,8 +91,7 @@ const imageController = async (req, res, next) => {
}
};


module.exports = {
quoteController,
imageController
imageController,
};
9 changes: 8 additions & 1 deletion src/api/services/quotesService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down