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