62 lines
1.3 KiB
JavaScript
62 lines
1.3 KiB
JavaScript
const AWS = require(`aws-sdk`);
|
|
const shortid = require(`shortid`);
|
|
const commonSchemas = require(`../validation/commonSchemas`);
|
|
const validation = require(`../validation`);
|
|
|
|
const dynamodb = new AWS.DynamoDB.DocumentClient({
|
|
region: process.env.AWS_REGION,
|
|
});
|
|
|
|
const defaultParams = {
|
|
TableName: process.env.db,
|
|
};
|
|
|
|
const put = async (kind, item) => {
|
|
const params = {
|
|
...defaultParams,
|
|
Item: {
|
|
...item,
|
|
sk: kind,
|
|
sk2: shortid.generate(),
|
|
createdAt: Date.now(),
|
|
updatedAt: Date.now(),
|
|
},
|
|
};
|
|
|
|
await dynamodb.put(params).promise();
|
|
};
|
|
|
|
const getByKey = async (key) => {
|
|
const params = {
|
|
...defaultParams,
|
|
KeyConditionExpression: `hk = :hk`,
|
|
ExpressionAttributeValues: { ":hk": key },
|
|
};
|
|
|
|
const obj = await dynamodb.query(params).promise();
|
|
return obj.Items && obj.Items[0] ? obj.Items[0] : null;
|
|
};
|
|
|
|
const getById = async (kind, id) => {
|
|
validation.validateOrThrow(commonSchemas.id, id);
|
|
|
|
const params = {
|
|
...defaultParams,
|
|
IndexName: process.env.dbIndex1,
|
|
KeyConditionExpression: `sk2 = :sk2 and sk = :sk`,
|
|
ExpressionAttributeValues: {
|
|
":sk2": id,
|
|
":sk": kind,
|
|
},
|
|
};
|
|
|
|
const obj = await dynamodb.query(params).promise();
|
|
return obj.Items && obj.Items[0] ? obj.Items[0] : null;
|
|
};
|
|
|
|
module.exports = {
|
|
put,
|
|
getByKey,
|
|
getById,
|
|
};
|