68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
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;
|