@parsifal-m/backstage-plugin-open-feedback-backend
Version:
This plugin serves as the backend for OpenFeedback.
72 lines (66 loc) • 2.76 kB
JavaScript
;
var express = require('express');
var Router = require('express-promise-router');
var expressValidator = require('express-validator');
var rootHttpRouter = require('@backstage/backend-defaults/rootHttpRouter');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
const feedbackValidator = [
expressValidator.body("rating").isNumeric().notEmpty(),
expressValidator.body("comment").isString().withMessage("Comment must be a string"),
expressValidator.body("userRef").isString(),
expressValidator.body("url").isString()
];
async function createRouter(options) {
const { logger, config, databaseHandler } = options;
const router = Router__default.default();
router.use(express__default.default.json());
router.get("/health", (_, response) => {
logger.info("PONG!");
response.json({ status: "ok" });
});
router.post(
"/feedback/submit",
feedbackValidator,
(req, res) => {
const errors = expressValidator.validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { rating, url, comment, userRef } = req.body;
const feedback = { userRef, url, rating, comment };
return databaseHandler.addFeedback(feedback).then(() => {
logger.info(
`Received feedback from ${userRef} with rating ${rating}`
);
res.status(201).json({ status: "ok", message: "Feedback added" });
}).catch((error) => {
logger.error(`Failed to add feedback: ${error}`);
res.status(500).json({ status: "error", message: "Failed to add feedback" });
});
}
);
router.get("/feedback", (_, res) => {
databaseHandler.getFeedback().then((feedback) => {
res.status(200).json(feedback);
}).catch((error) => {
logger.error(`Failed to get feedback: ${error}`);
res.status(500).json({ status: "error", message: "Failed to get feedback" });
});
});
router.delete("/feedback/:id", (req, res) => {
const { id } = req.params;
databaseHandler.removeFeedback(Number(id)).then(() => {
res.status(200).json({ status: "ok", message: "Feedback removed" });
}).catch((error) => {
logger.error(`Failed to remove feedback: ${error}`);
res.status(500).json({ status: "error", message: "Failed to remove feedback" });
});
});
const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config });
router.use(middleware.error());
return router;
}
exports.createRouter = createRouter;
//# sourceMappingURL=router.cjs.js.map