@@ -63,27 +63,30 @@ export async function atomicIncrementCacheCounter(
6363 returnOld : boolean = false ,
6464 expiresAt ?: number ,
6565) : Promise < number > {
66- const response = await dynamoClient . send (
67- new UpdateItemCommand ( {
68- TableName : genericConfig . CacheDynamoTableName ,
69- Key : marshall (
70- {
71- primaryKey : key ,
72- expireAt : expiresAt ,
73- } ,
74- { removeUndefinedValues : true } ,
75- ) ,
76- UpdateExpression : "ADD #counterValue :increment" ,
77- ExpressionAttributeNames : {
78- "#counterValue" : "counterValue" ,
79- } ,
80- ExpressionAttributeValues : marshall ( {
81- ":increment" : amount ,
82- } ) ,
83- ReturnValues : returnOld ? "UPDATED_OLD" : "UPDATED_NEW" ,
84- } ) ,
85- ) ;
66+ const updateExpressions : string [ ] = [ "ADD #counterValue :increment" ] ;
67+ const expressionAttributeNames : { [ key : string ] : string } = {
68+ "#counterValue" : "counterValue" ,
69+ } ;
70+ const expressionAttributeValues : { [ key : string ] : any } = {
71+ ":increment" : amount ,
72+ } ;
73+ if ( expiresAt ) {
74+ updateExpressions . unshift ( "SET #expireAt = :expireAt" ) ;
75+ expressionAttributeNames [ "#expireAt" ] = "expireAt" ;
76+ expressionAttributeValues [ ":expireAt" ] = expiresAt . toString ( ) ;
77+ }
8678
79+ const command = new UpdateItemCommand ( {
80+ TableName : genericConfig . CacheDynamoTableName ,
81+ Key : marshall ( {
82+ primaryKey : key ,
83+ } ) ,
84+ UpdateExpression : updateExpressions . join ( " " ) ,
85+ ExpressionAttributeNames : expressionAttributeNames ,
86+ ExpressionAttributeValues : marshall ( expressionAttributeValues ) ,
87+ ReturnValues : returnOld ? "UPDATED_OLD" : "UPDATED_NEW" ,
88+ } ) ;
89+ const response = await dynamoClient . send ( command ) ;
8790 if ( ! response . Attributes ) {
8891 return returnOld ? 0 : amount ;
8992 }
0 commit comments