I want to query on my dynamodb table in this way:
I have written a vtl like this
## [Start] List Request. **
#set($args = $util.defaultIfNull($ctx.stash.transformedArgs, $ctx.args))
#set($limit = $util.defaultIfNull($args.limit, 100))
#set($ListRequest = {
"version": "2018-05-29",
"limit": $limit
})
## Include pagination token if available
#if($args.nextToken)
#set($ListRequest.nextToken = $args.nextToken)
#end
#if(!$util.isNullOrEmpty($args.filter))
## If filter is present, construct the query with filters
$util.qr($ListRequest.put("operation", "Query"))
$util.qr($ListRequest.put("index", "byImage"))
## Initialize filter expressions and expression values
#set($filterExpressions = [])
#set($expressionValues = {})
#set($expressionAttributeNames = {})
## Construct the filter expression for imageID
#if(!$util.isNullOrEmpty($args.filter.imageID.eq))
#set($imageIDExpression = "#imageID = :imageID")
$util.qr($filterExpressions.add($imageIDExpression))
$util.qr($expressionAttributeNames.put("#imageID", "imageID"))
$util.qr($expressionValues.put(":imageID", {"S": "${args.filter.imageID.eq}"}))
#end
## Construct additional filter expressions if they exist
## organizationName filter
#if(!$util.isNullOrEmpty($args.filter.organizationName.eq))
#set($orgNameExpression = "#organizationName = :organizationName")
$util.qr($filterExpressions.add($orgNameExpression))
$util.qr($expressionAttributeNames.put("#organizationName", "organizationName"))
$util.qr($expressionValues.put(":organizationName", {"S": "${args.filter.organizationName.eq}"}))
#end
## platformName filter
#if(!$util.isNullOrEmpty($args.filter.platformName.eq))
#set($platformNameExpression = "#platformName = :platformName")
$util.qr($filterExpressions.add($platformNameExpression))
$util.qr($expressionAttributeNames.put("#platformName", "platformName"))
$util.qr($expressionValues.put(":platformName", {"S": "${args.filter.platformName.eq}"}))
#end
## platformRegion filter
#if(!$util.isNullOrEmpty($args.filter.platformRegion.eq))
#set($platformRegionExpression = "#platformRegion = :platformRegion")
$util.qr($filterExpressions.add($platformRegionExpression))
$util.qr($expressionAttributeNames.put("#platformRegion", "platformRegion"))
$util.qr($expressionValues.put(":platformRegion", {"S": "${args.filter.platformRegion.eq}"}))
#end
## Combine all filter expressions
#if($filterExpressions.size() > 0)
#set($combinedFilterExpression = $filterExpressions.join(" AND "))
$util.qr($ListRequest.put("FilterExpression", $combinedFilterExpression))
$util.qr($ListRequest.put("ExpressionAttributeNames", $expressionAttributeNames))
$util.qr($ListRequest.put("ExpressionAttributeValues", $expressionValues))
#end
## Add sorting logic if needed
#if(!$util.isNull($args.sortDirection) && $args.sortDirection == "DESC")
#set($ListRequest.scanIndexForward = false)
#else
#set($ListRequest.scanIndexForward = true)
#end
## Set the index name if available
#if(!$util.isNull($ctx.stash.metadata.index))
#set($ListRequest.IndexName = $ctx.stash.metadata.index)
#end
#else
## If no filter is present, perform a simple scan or query
#if(!$util.isNullOrEmpty($ctx.stash.authFilter))
#set($filter = $ctx.stash.authFilter)
#if(!$util.isNullOrEmpty($args.filter))
#set($filter = {"and": [$filter, $args.filter]})
#end
#else
#if(!$util.isNullOrEmpty($args.filter))
#set($filter = $args.filter)
#end
#end
#if(!$util.isNullOrEmpty($filter))
#set($filterExpression = $util.parseJson($util.transform.toDynamoDBFilterExpression($filter)))
#if($util.isNullOrEmpty($filterExpression))
$util.error("Unable to process the filter expression", "Unrecognized Filter")
#end
#if(!$util.isNullOrBlank($filterExpression.expression))
#if($filterExpression.expressionValues.size() == 0)
$util.qr($filterExpression.remove("expressionValues"))
#end
$util.qr($ListRequest.put("FilterExpression", $filterExpression.expression))
$util.qr($ListRequest.put("ExpressionAttributeValues", $filterExpression.expressionValues))
#if($filterExpression.expressionNames.size() > 0)
$util.qr($ListRequest.put("ExpressionAttributeNames", $filterExpression.expressionNames))
#end
#end
#end
#if(!$util.isNull($ctx.stash.modelQueryExpression) && !$util.isNullOrEmpty($ctx.stash.modelQueryExpression.expression))
$util.qr($ListRequest.put("operation", "Query"))
$util.qr($ListRequest.put("query", $ctx.stash.modelQueryExpression))
#if(!$util.isNull($args.sortDirection) && $args.sortDirection == "DESC")
#set($ListRequest.scanIndexForward = false)
#else
#set($ListRequest.scanIndexForward = true)
#end
#else
$util.qr($ListRequest.put("operation", "Scan"))
#end
## Set the index name if available
#if(!$util.isNull($ctx.stash.metadata.index))
#set($ListRequest.IndexName = $ctx.stash.metadata.index)
#end
#end
$util.toJson($ListRequest)
## [End] List Request. **
When filter logic is there, I am getting this particular error is there:
{
"data": {
"listImagePlatforms": null
},
"errors": [
{
"path": [
"listImagePlatforms"
],
"data": null,
"errorType": "MappingTemplate",
"errorInfo": null,
"locations": [
{
"line": 2,
"column": 3,
"sourceName": null
}
],
"message": "Unsupported element '$[FilterExpression]'."
}
]
}
How can I fix this problem?