76 lines
1.7 KiB
JavaScript
76 lines
1.7 KiB
JavaScript
import db from "../../../../lib/db";
|
|
import { withErrorHandling, withSession } from "../../../../lib/apiHelpers";
|
|
import models from "../../../../lib/models";
|
|
|
|
const handler = withErrorHandling(
|
|
withSession(async (req, res, session) => {
|
|
const { method } = req;
|
|
const { user } = session;
|
|
|
|
switch (method) {
|
|
case "GET":
|
|
await getEntities(req, res, user);
|
|
break;
|
|
case "POST":
|
|
await createEntity(req, res, user);
|
|
break;
|
|
default:
|
|
res.setHeader("Allow", ["GET", "POST"]);
|
|
res.status(405).end(`Method ${method} Not Allowed`);
|
|
}
|
|
})
|
|
);
|
|
|
|
const getEntities = async (req, res, user) => {
|
|
const { entityName } = req.query;
|
|
|
|
if (!models[entityName]) {
|
|
res.status(404).end();
|
|
return;
|
|
}
|
|
|
|
const params = {
|
|
TableName: process.env.FMN_DYNAMODB_TABLENAME,
|
|
KeyConditionExpression: "hk = :hk AND begins_with(sk, :sk)",
|
|
ExpressionAttributeValues: {
|
|
":hk": `user#${user.sub}`,
|
|
":sk": `${entityName}#`,
|
|
},
|
|
};
|
|
|
|
let entities = await db.query(params).promise();
|
|
res.status(200).json(entities.Items);
|
|
};
|
|
|
|
const createEntity = async (req, res, user) => {
|
|
const { entityName } = req.query;
|
|
|
|
if (!models[entityName]) {
|
|
res.status(404).end();
|
|
return;
|
|
}
|
|
|
|
var model = models[entityName];
|
|
|
|
if (!model.validatePostBody(req.body)) {
|
|
console.warn(validatePostBody.errors);
|
|
res.status(400).json(validatePostBody.errors);
|
|
return;
|
|
}
|
|
|
|
const params = {
|
|
TableName: process.env.FMN_DYNAMODB_TABLENAME,
|
|
Item: {
|
|
hk: `user#${user.sub}`,
|
|
sk: `${entityName}#${"abc"}`,
|
|
title: req.body.title,
|
|
url: req.body.url,
|
|
},
|
|
};
|
|
|
|
await db.put(params).promise();
|
|
res.status(200).json(params.Item);
|
|
};
|
|
|
|
export default handler;
|