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, };