sub-manager-backend/objects/Endpoints.mjs

82 lines
2.3 KiB
JavaScript
Raw Normal View History

2023-09-06 16:26:15 +00:00
import express from "express";
2023-09-09 14:04:53 +00:00
import logger from "../logger.mjs";
2024-05-23 10:55:11 +00:00
import Story from "./Story.mjs";
import Publication from "./Publication.mjs";
2023-09-09 14:04:53 +00:00
import Submission from "./Submission.mjs";
2024-05-23 10:55:11 +00:00
import passport from "passport";
2023-09-06 16:26:15 +00:00
2023-09-09 14:04:53 +00:00
export const getEndpoints = (dbObject) => {
2024-05-23 10:55:11 +00:00
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();
2024-05-27 13:05:40 +00:00
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);
2024-05-23 10:55:11 +00:00
return router;
};
2024-05-27 13:05:40 +00:00
const protectedEndpoint = (router, Entity, path, method, db, data) => {
2024-05-27 13:20:24 +00:00
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);
2024-05-27 13:05:40 +00:00
return;
}
2024-05-27 13:20:24 +00:00
res.sendStatus(500);
return;
}
},
);
2024-05-23 10:55:11 +00:00
};