Skip to content

Instantly share code, notes, and snippets.

@yyano
Last active December 15, 2017 11:17
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 yyano/7f0c4239ac9ce2a87bef415bfacc72bb to your computer and use it in GitHub Desktop.
Save yyano/7f0c4239ac9ce2a87bef415bfacc72bb to your computer and use it in GitHub Desktop.
Amazon DynamoDBとAWS Lambdaを使ってナンバリング(採番)する。Node.js
"use strict";
var AWS = require('aws-sdk');
var documentClient = new AWS.DynamoDB.DocumentClient();
function asyncPutDb(hashKey) {
return new Promise(function(resolve, reject) {
var params = {
TableName: process.env.DYNAMODB_TABLENAME,
Item: {
keyid: hashKey,
countindex: 1
}
};
documentClient.put(params, function(err, data) {
if (err) {
reject("asyncPutDb");
}
else {
resolve(1);
}
});
});
}
function asyncUpdateDb(hashKey) {
return new Promise(function(resolve, reject) {
var params = {
TableName: process.env.DYNAMODB_TABLENAME,
Key: {
"keyid": hashKey
},
UpdateExpression: "set countindex = countindex + :addvalue",
ExpressionAttributeValues: {
":addvalue": 1
},
ReturnValues: 'UPDATED_NEW'
};
documentClient.update(params, function(err, data) {
if (err) {
resolve(-2);
}
else {
resolve(data.Attributes.countindex);
}
});
});
}
function setResultJson(hashKey, countindex) {
return {
keyid: hashKey,
countindex: countindex
};
}
exports.handler = (event, context, callback) => {
var response = {
statusCode: 200,
headers: { "Access-Control-Allow-Origin": "*" },
body: {
keyid: event.pathParameters.keyid,
countindex: -1
}
};
console.log("keyid:", event.pathParameters.keyid);
asyncUpdateDb(event.pathParameters.keyid)
.then(function(resultUpdate) {
if (resultUpdate > 0) {
console.log("resultUpdate:", resultUpdate);
response.body = JSON.stringify(setResultJson(event.pathParameters.keyid, resultUpdate));
callback(null, response);
}
else {
asyncPutDb(event.pathParameters.keyid, response)
.then(function(resultPut) {
console.log("resultPut:", resultPut);
response.body = JSON.stringify(setResultJson(event.pathParameters.keyid, resultPut));
callback(null, response);
})
.catch(function(err) {
console.log("put error:", err);
callback(null, JSON.stringify(err));
});
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment