@@ -8,13 +8,42 @@ const AWS = require("aws-sdk");
88const dynamo = new AWS . DynamoDB . DocumentClient ( ) ;
99
1010function 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-
1847exports . 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