UNPKG

@parsifal-m/backstage-plugin-open-feedback-backend

Version:
72 lines (66 loc) 2.76 kB
'use strict'; 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