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 getEntities(req, res, user); break; case "POST": await createEntity(req, res, user); break; default: res.setHeader("Allow", ["GET", "POST"]); res.status(405).json(`Method ${method} Not Allowed`); } }); const getEntities = async (req, res, user) => { const { entityName } = req.query; if (!models[entityName]) { res.status(404); 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); 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;