import db from "../../lib/db"; import Ajv from "ajv"; import addFormats from "ajv-formats"; import { withErrorHandling } from "../../lib/apiHelpers"; const handler = withErrorHandling(async (req, res) => { const { method } = req; switch (method) { case "GET": await getBookmark(req, res); break; case "POST": await createBookmark(req, res); break; default: res.setHeader("Allow", ["GET", "POST"]); res.status(405).end(`Method ${method} Not Allowed`); } }); const ajv = new Ajv(); addFormats(ajv); const createBookmarkSchema = { type: "object", properties: { title: { type: "string" }, url: { type: "string", format: "uri" }, }, required: ["title", "url"], }; const validateCreateBookmarkSchema = ajv.compile(createBookmarkSchema); const getBookmark = async (req, res) => { const params = { TableName: process.env.FMN_DYNAMODB_TABLENAME, KeyConditionExpression: "hk = :hk", ExpressionAttributeValues: { ":hk": "user#123" }, }; let bookmark = await db.query(params).promise(); res.status(200).json(bookmark); }; const createBookmark = async (req, res) => { if (!validateCreateBookmarkSchema(req.body)) { console.warn(validateCreateBookmarkSchema.errors); res.status(400).json(validateCreateBookmarkSchema.errors); return; } const params = { TableName: process.env.FMN_DYNAMODB_TABLENAME, Item: { hk: `user#${123}`, sk: `bookmark#${"abc"}`, title: req.body.title, url: req.body.url, }, }; await db.put(params).promise(); }; export default handler;