Files
forgetmenot-nextjs/web/pages/api/v1/[entityName]/[entityId].js
2022-08-27 08:14:10 -05:00

54 lines
1.2 KiB
JavaScript

import db from "../../../../lib/db";
import { authenticatedJsonApi } from "../../../../lib/jsonapi";
import models from "../../../../lib/models";
const handler = authenticatedJsonApi(async (req, res, session) => {
const { method } = req;
const { user } = session;
switch (method) {
case "GET":
await getEntity(req, res, user);
break;
default:
res.setHeader("Allow", ["GET"]);
res.status(405).send(`Method ${method} Not Allowed`);
}
});
const getEntity = async (req, res, user) => {
const { entityName, entityId } = req.query;
if (!models[entityName]) {
res.status(404);
return;
}
var model = models[entityName];
if (!model.validateId(entityId)) {
console.warn(model.validateId.errors);
res.status(404);
return;
}
const params = {
TableName: process.env.FMN_DYNAMODB_TABLENAME,
KeyConditionExpression: "hk = :hk AND sk = :sk",
ExpressionAttributeValues: {
":hk": `user#${user.sub}`,
":sk": `${entityName}#${entityId}`,
},
};
let entities = await db.query(params).promise();
if (entities.Items.length == 1) {
res.status(200).json(entities.Items[0]);
} else {
res.status(404);
}
};
export default handler;