Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

aws-dynamo-table

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aws-dynamo-table

Managing records saved in Dynamodb

  • 1.5.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Weekly downloads
 
Created
Source

dynamodb-service

Managing records saved in Dynamodb

Scenario

I want to save scheduling information

{
  recurrence: string,
  time: string,
  timeZone: string,
  mediumType: enum, // SLACK, GMAIL, ...
  meta: json // ex: { channelId, slackBotId, slackBotName }
}

Goal

Create node package that exposes a DynamoDBService along with CRUD methods.

example usage

const DynamoDBService = require('dynamodb-service');
// profile = 'not-default' // => this is the aws credentials found in `.aws/credentials` file
let dynamoDBService = new DynamoDBService(tableName, primaryKeyName, profile);

dynamoDBService.create(data) // => @return Promise

pre-requisite

  • Create a credentials file at ~/.aws/credentials on Mac/Linux or C:\Users\USERNAME.aws\credentials on Windows
[default]
aws_access_key_id = your_access_key
aws_secret_access_key = your_secret_key

[not-default]
aws_access_key_id = your_access_key
aws_secret_access_key = your_secret_key

Other ways to provide credentials

  • Create a table
aws dynamodb create-table --table-name scheduling-configuration \
  --attribute-definitions AttributeName=configurationId,AttributeType=S \
  --key-schema AttributeName=configurationId,KeyType=HASH \
  --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
  --query TableDescription.TableArn --output text \
  --region=us-east-1 --profile default
# the tableName 'scheduling-configuration' can be anything
# note the 'AttributeName', you can change 'configurationId' to whatever you want 

Step by step

The TDD way

  • Create dynamodb-service
mkdir dynamodb-service
  • add initial npm packge files
cd dynamodb-service && npm init
// follow the prompt and provide all required info
  • Create a test folder
mkdir test
  • Create and add logic to the test file
// we first create a test file for create method
// it should take in data and return a Promise that resolve with 
// the saved record
// ./test/create.test.js 

let DynamoDBService = require('../index.js');
let tableName = 'scheduling-configuration',
    primaryKeyName = 'configurationId';
let dynamodbService = new DynamodbService(tableName, primaryKeyName);

let data = {
  recurrence: 'string',
  time: 'string',
  timeZone: 'string',
  mediumType: 'SLACK', // SLACK, GMAIL, ...
  meta: { channelId: 'string', slackBotId: 'string', slackBotName: 'string' }
};

dynamoDBService.create(data)
.then(createdRecord => console.log(createdRecord))
.catch(e => console.error(e.message || 'error', e));
  • Run the test
# you should get errors
node test/create.test.js
  • Create and add logic to the index.js file
// ./index.js
'use strict';
const DynamoDBService = require('./src/services/DynamoDBService');
module.exports = DynamoDBService;
  • Create DynamoDBService file
# ./src/services/DynamoDBService.js
  • Add initialisation logic
// we are using es6 classes
// ./src/services/DynamoDBService.js

...
  constructor(tableName, primaryKeyName, profile) {
    this.tableName = tableName;
    this.primaryKeyName = primaryKeyName;

    let credentials = new AWS.SharedIniFileCredentials({profile});
    AWS.config.credentials = credentials;

    this.DYNAMO_DB = new AWS.DynamoDB.DocumentClient();

  }
...

  • Add logic for create method
// ./src/services/DynamoDBService.js

...
    let params = {
      TableName: this.tableName,
      Item: data
    };
    return this.dynamoDb.put(params).promise()
    .then((/* success */) => this.read(data[this.keyName]));
...

  • Add logic for read method
// ./src/services/DynamoDBService.js

...
    let Key = {};
    Key[this.keyName] = id;
    let params = {
      TableName: this.tableName,
      Key
    };
    return this.dynamoDb.get(params).promise()
    .then(function (response) {
      return response.Item;
    });
...

resource

Keywords

FAQs

Package last updated on 27 Dec 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc