Create db helper functions.

This commit is contained in:
2020-11-01 21:06:59 -06:00
parent b758b85b15
commit 7002e78aa0
3 changed files with 64 additions and 45 deletions

55
api/models/db.js Normal file
View File

@@ -0,0 +1,55 @@
const AWS = require(`aws-sdk`);
const shortid = require(`shortid`);
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 }
};
return await dynamodb.query(params).promise();
};
const getById = async (type, id) => {
const params = {
...defaultParams,
IndexName: process.env.dbIndex1,
KeyConditionExpression: `sk2 = :sk2 and sk = :sk`,
ExpressionAttributeValues: {
':sk2': id,
':sk': type,
}
};
return await dynamodb.query(params).promise();
};
module.exports = {
put,
getByKey,
getById,
};

View File

@@ -3,13 +3,8 @@
* Model: Users * Model: Users
*/ */
const AWS = require(`aws-sdk`);
const shortid = require(`shortid`);
const utils = require(`../utils`); const utils = require(`../utils`);
const db = require(`./db`);
const dynamodb = new AWS.DynamoDB.DocumentClient({
region: process.env.AWS_REGION
});
/** /**
* Register user * Register user
@@ -17,8 +12,6 @@ const dynamodb = new AWS.DynamoDB.DocumentClient({
* @param {string} user.password User password * @param {string} user.password User password
*/ */
const register = async (user = {}) => { const register = async (user = {}) => {
// Validate
if (!user.email) { if (!user.email) {
throw new Error(`"email" is required`); throw new Error(`"email" is required`);
} }
@@ -37,20 +30,12 @@ const register = async (user = {}) => {
user.password = utils.hashPassword(user.password); user.password = utils.hashPassword(user.password);
// Save await db.put(
const params = { `user`,
TableName: process.env.db, {
Item: {
hk: user.email, hk: user.email,
sk: `user`,
sk2: shortid.generate(),
createdAt: Date.now(),
updatedAt: Date.now(),
password: user.password, password: user.password,
} }).promise();
};
await dynamodb.put(params).promise();
}; };
/** /**
@@ -59,8 +44,6 @@ const register = async (user = {}) => {
*/ */
const getByEmail = async (email) => { const getByEmail = async (email) => {
// Validate
if (!email) { if (!email) {
throw new Error(`"email" is required`); throw new Error(`"email" is required`);
} }
@@ -68,19 +51,11 @@ const getByEmail = async (email) => {
throw new Error(`"${email}" is not a valid email address`); throw new Error(`"${email}" is not a valid email address`);
} }
// Query let user = await db.getByKey(email).promise();
const params = {
TableName: process.env.db,
KeyConditionExpression: `hk = :hk`,
ExpressionAttributeValues: { ':hk': email }
};
let user = await dynamodb.query(params).promise();
user = user.Items && user.Items[0] ? user.Items[0] : null; user = user.Items && user.Items[0] ? user.Items[0] : null;
if (user) { if (user) {
user.id = user.sk2; user = convertToPublicFormat(user);
user.email = user.hk;
} }
return user; return user;
}; };
@@ -91,26 +66,15 @@ const getByEmail = async (email) => {
*/ */
const getById = async (id) => { const getById = async (id) => {
// Validate
if (!id) { if (!id) {
throw new Error(`"id" is required`); throw new Error(`"id" is required`);
} }
// Query let user = await db.getById(`user`, id).promise();
const params = {
TableName: process.env.db,
IndexName: process.env.dbIndex1,
KeyConditionExpression: `sk2 = :sk2 and sk = :sk`,
ExpressionAttributeValues: { ':sk2': id,
':sk': `user` }
};
let user = await dynamodb.query(params).promise();
user = user.Items && user.Items[0] ? user.Items[0] : null; user = user.Items && user.Items[0] ? user.Items[0] : null;
if (user) { if (user) {
user.id = user.sk2; user = convertToPublicFormat(user);
user.email = user.hk;
} }
return user; return user;
}; };

View File