Skip to content

Commit e54bc3a

Browse files
committed
refactor: add hbs handler
1 parent 3a0efd6 commit e54bc3a

File tree

3 files changed

+42
-42
lines changed

3 files changed

+42
-42
lines changed

api/index.js

+15-16
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/**
22
* @module api
3-
* @requires appManager
3+
* @requires hbsHandler
44
* @requires Card
55
* @requires gistsList
66
*/
7-
import { hbsRender } from "./../src/appManager.js";
7+
import { defineHbsHandler } from "../src/hbsHandler.js";
88
import { getCard } from "./../src/card.js";
99
import { getGists } from "./../src/gistsList.js";
1010

@@ -14,18 +14,17 @@ import { getGists } from "./../src/gistsList.js";
1414
* @name /api
1515
* @function
1616
* @async
17-
* @param {Object} req Request object
18-
* @param {Object} req.query Query object
19-
* @param {string} req.query.user Github username
20-
* @param {string} req.query.theme Theme name
21-
* @param {number} req.query.n Number of gists to display
22-
* @param {string} req.query.title Title of the card
23-
* @param {Object} res Response object
17+
* @param {Object} event.req Request object
18+
* @param {Object} event.req.query Query object
19+
* @param {string} event.req.query.user Github username
20+
* @param {string} event.req.query.theme Theme name
21+
* @param {number} event.req.query.n Number of gists to display
22+
* @param {string} event.req.query.title Title of the card
23+
* @param {Object} event.res Response object
2424
*/
25-
export default async (req, res) => {
26-
const card = getCard(req.query, await getGists(req.query.user)); // get card
27-
res.setHeader("Cache-Control", "max-age=0, s-maxage=14400");
28-
res.setHeader("Content-Type", "image/svg+xml"); // set content type to svg
29-
const svg = hbsRender("card", card); // render card template
30-
return res.status(200).send(svg);
31-
};
25+
export default defineHbsHandler (async (event) => {
26+
const query = event.req.query;
27+
const gists = await getGists(query.user);
28+
const data = getCard(query, gists); // get card
29+
return data;
30+
}, { template: "card" });

api/pin.js

+15-16
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/**
22
* @memberof api
3-
* @requires appManager
3+
* @requires hbsHandler
44
* @requires Pin
55
* @requires gist
66
*/
7-
import { hbsRender } from "./../src/appManager.js";
7+
import { defineHbsHandler } from "../src/hbsHandler.js";
88
import { getPin } from "./../src/pin.js";
99
import { getGist } from "./../src/gist.js";
1010

@@ -14,18 +14,17 @@ import { getGist } from "./../src/gist.js";
1414
* @name /api/pin
1515
* @function
1616
* @async
17-
* @param {Object} req Request object
18-
* @param {Object} req.query Query object
19-
* @param {string} req.query.user Github username
20-
* @param {string} req.query.id Gist id
21-
* @param {string} req.query.theme Theme name
22-
* @param {boolean} req.query.owner Show gist owner
23-
* @param {Object} res Response object
17+
* @param {Object} event.req Request object
18+
* @param {Object} event.req.query Query object
19+
* @param {string} event.req.query.user Github username
20+
* @param {string} event.req.query.id Gist id
21+
* @param {string} event.req.query.theme Theme name
22+
* @param {boolean} event.req.query.owner Show gist owner
23+
* @param {Object} event.res Response object
2424
*/
25-
export default async (req, res) => {
26-
const pin = await getPin(req.query, await getGist(req.query.id)); // get card
27-
res.setHeader("Cache-Control", "max-age=0, s-maxage=14400");
28-
res.setHeader("Content-Type", "image/svg+xml"); // set content type to svg
29-
const svg = hbsRender("pin", pin); // render pin template
30-
return res.status(200).send(svg);
31-
};
25+
export default defineHbsHandler (async (event) => {
26+
const query = event.req.query;
27+
const gist = await getGist(query.id);
28+
const data = getPin(query, gist); // get card
29+
return data;
30+
}, { template: "pin" });
+12-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/**
2-
* @module appManager
2+
* @module hbsHandler
33
* @requires hbs
4+
* @requires fs
45
* @requires path
56
* @requires url
67
*/
@@ -16,13 +17,14 @@ hbs.handlebars.registerHelper("subtract", (lVal, rVal) => lVal - rVal); // regis
1617

1718
const viewsDir = path.join(__dirname, "../templates");
1819

19-
export const hbsRender = (name, data) => {
20-
try {
21-
const templateSource = fs.readFileSync(path.join(viewsDir, `${name}.hbs`)).toString();
22-
const template = hbs.handlebars.compile(templateSource);
23-
return template(data);
24-
}
25-
catch (error) {
26-
throw new Error("Error rendering template: " + error);
27-
}
20+
export const defineHbsHandler = (handle, options) => {
21+
return async (req, res) => {
22+
const data = await handle({ req, res });
23+
const templateSource = fs.readFileSync(path.join(viewsDir, `${options.template}.hbs`)).toString();
24+
const render = hbs.handlebars.compile(templateSource);
25+
const svg = render(data);
26+
res.setHeader("Cache-Control", "max-age=0, s-maxage=14400");
27+
res.setHeader("Content-Type", "image/svg+xml"); // set content type to svg
28+
return res.status(200).send(svg);
29+
};
2830
};

0 commit comments

Comments
 (0)