Skip to content

Commit 4a9e8ac

Browse files
committed
support for updation of click count and visibility simultaneously
1 parent 66f0c92 commit 4a9e8ac

File tree

1 file changed

+44
-11
lines changed
  • lambdas/url_access_patterns/lambda_for_updateURL

1 file changed

+44
-11
lines changed

lambdas/url_access_patterns/lambda_for_updateURL/index.js

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,42 @@ const AWS = require("aws-sdk");
88
const dynamo = new AWS.DynamoDB.DocumentClient();
99

1010
function response(statusCode,error, message) {
11-
return {
12-
statusCode: statusCode,
13-
body: message,
14-
error:error
15-
};
11+
return {
12+
statusCode: statusCode,
13+
body: message,
14+
error:error
15+
};
16+
}
17+
/**
18+
* Checks if string is null or not based on custom conditions
19+
* @param {String} stringData The string to check null for
20+
* @return {Boolean} Tells whether [stringData] is null or not
21+
*/
22+
function nullCheck(stringData) {
23+
return stringData!=="undefined" && stringData!=="null" && stringData!==""
24+
}
25+
/**
26+
* validate the string passed based on [nullCheck]
27+
* @param {String} queryString The string to be validated
28+
* @return {Boolean} Tells whether [queryString] is valid or not
29+
*/
30+
function isValidParam(queryString) {
31+
if (queryString && nullCheck(queryString) ) {
32+
return true
33+
}
34+
return false
35+
}
36+
/**
37+
* convert the passed string to boolean
38+
* @param {String} queryString The string to be converted
39+
* @return {Boolean} The converted string in boolean
40+
*/
41+
function getBoolean(queryString) {
42+
if(queryString==="false"||queryString===false){
43+
return false;
44+
}
45+
return true;
1646
}
17-
1847
exports.handler = async (event) =>{
1948
const reqBody = event.body;
2049
var params = {
@@ -25,18 +54,22 @@ exports.handler = async (event) =>{
2554
},
2655
ReturnValues:"ALL_NEW"
2756
}
28-
if(reqBody.visible!=undefined){ //request to change visiblity of url
57+
if(isValidParam(reqBody.visible) && isValidParam(reqBody.clicks_left)){ //request to change visibility and clicks_left
58+
params.UpdateExpression="set visible = :val1, clicks_left = :val2"
59+
params.ExpressionAttributeValues={":val1":getBoolean(reqBody.visible),":val2":parseInt(reqBody.clicks_left)}
60+
}
61+
else if(isValidParam(reqBody.visible)){ //request to change visiblity of url
2962
params.UpdateExpression="set visible = :val"
30-
params.ExpressionAttributeValues= {":val":reqBody.visible}
63+
params.ExpressionAttributeValues= {":val":getBoolean(reqBody.visible)}
3164
}
32-
else if(reqBody.clicks_left!=undefined){ //request to update clicks_left for url
65+
else if(isValidParam(reqBody.clicks_left)){ //request to update clicks_left for url
3366
params.UpdateExpression="set clicks_left = :val"
34-
params.ExpressionAttributeValues= {":val":reqBody.clicks_left}
67+
params.ExpressionAttributeValues= {":val":parseInt(reqBody.clicks_left)}
3568
}
3669
try{
3770
const updated_url_data= await dynamo.update(params).promise();
3871
return response(201,undefined,updated_url_data.Attributes);
3972
}catch(err){
4073
return response(500,"Internal Server Error",undefined);
4174
}
42-
}
75+
}

0 commit comments

Comments
 (0)