import express from "express"; import logger from "../logger.mjs"; import Story from "./Story.mjs"; import Publication from "./Publication.mjs"; import Submission from "./Submission.mjs"; import passport from "passport"; export const getEndpoints = (dbObject) => { const router = express.Router(); router.get("/stories", (_, res) => { res.statusCode = 200; res.send(dbObject.stories); return; }); router.get("/publications", (_, res) => { res.statusCode = 200; res.send(dbObject.publications); return; }); router.get("/submissions", (_, res) => { res.statusCode = 200; res.send(dbObject.submissions); return; }); router.get("/responses", (_, res) => { res.statusCode = 200; res.send(dbObject.responses); return; }); router.get("/genres", (_, res) => { res.statusCode = 200; res.send(dbObject.genres); return; }); return router; }; export const postEndpoints = (db, data) => { const router = express.Router(); protectedEndpoint(router, Story, "create", "insert", db, data); protectedEndpoint(router, Story, "edit", "update", db, data); protectedEndpoint(router, Story, "delete", "update", db, data); protectedEndpoint(router, Submission, "create", "insert", db, data); protectedEndpoint(router, Submission, "edit", "update", db, data); protectedEndpoint(router, Submission, "delete", "update", db, data); protectedEndpoint(router, Publication, "create", "insert", db, data); protectedEndpoint(router, Publication, "edit", "update", db, data); protectedEndpoint(router, Publication, "delete", "del", db, data); return router; }; const protectedEndpoint = (router, Entity, path, method, db, data) => { router.post( `/${Entity.name.toLowerCase()}/${path}`, passport.authenticate("jwt", { session: false }, (_, res) => { res.json({ message: "protected endpoint" }); }), async (req, res) => { try { logger.trace({ data: req.body }, "POST request received"); const entity = new Entity(req.body); await entity[method](db, data); res.sendStatus(200); data.init(); return; } catch (error) { logger.error(error); if (error instanceof TypeError) { res.sendStatus(400); return; } res.sendStatus(500); return; } }, ); };