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
|
* 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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user