Skip to content

Instantly share code, notes, and snippets.

@mharris717
Last active March 28, 2016 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mharris717/ab3f976d7b90e71fc44c to your computer and use it in GitHub Desktop.
Save mharris717/ab3f976d7b90e71fc44c to your computer and use it in GitHub Desktop.
Dynamo Helper

Helper to interact with Dynamo table

Setup

const fields = ['color','price'];
const tableName = "" + projectName + '-widgets-' + stage;
Widget = makeDynamoFuncs(tableName,fields);

Usage

Widget.create({color: 'Green', price: 10}).then(function(widget) {
  // done
});  
Widget.getAll().then(function(widgets) {
  console.log(widgets.length);
});  
function makeDynamoFuncs(tableName,fields) {
var res = {}
res.create = function(attrs) {
call.id = ""+parseInt(Math.random() * 10000000000000);
call.createdAt = (new Date()).toString();
return new Promise(function(resolve, reject) {
var params = {
TableName: tableName,
Item: attrs
};
docClient.put(params, function(err, data) {
if (err) return reject(err);
return resolve(attrs);
});
});
};
res.getAll = function() {
return new Promise(function(resolve, reject) {
var fs = ['id','createdAt'].concat(fields);
var params = {
TableName: tableName,
AttributesToGet: fs
};
docClient.scan(params, function(err, data) {
if (err) return reject(err);
return resolve(data["Items"]);
});
});
};
res.delete = function(key) {
return new Promise(function(resolve, reject) {
var params = {
TableName: tableName,
Key: {id: key}
};
docClient.delete(params, function(err, data) {
if (err) return reject(err);
return resolve(data);
});
});
}
res.deleteAll = function() {
var me = this;
return new Promise(function(resolve, reject) {
me.getAll().then(function(rows) {
var promises = [];
rows.forEach(function(row) {
promises.push(me.delete(row.id));
});
Promise.all(promises).then(function() {
resolve(true);
}).error(function(err) {
reject(err);
});
});
});
}
return res;
}
// Helper to interact with Dynamo table
//
// EXAMPLE USAGE
//
// // Setup
// const fields = ['color','price'];
// const tableName = "" + projectName + '-widgets-' + stage;
// Widget = makeDynamoFuncs(tableName,fields);
//
// // Use
// Widget.create({color: 'Green', price: 10}).then(function(widget) {
// // done
// });
//
// Widget.getAll().then(function(widgets) {
// // use widgets
// });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment