Reputation: 14768
I'm trying to write a resolver template for a Scan that filters by owner.
Here is what I tried so far (this is my request template):
#set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("username"),
$util.defaultIfNull($ctx.identity.claims.get("cognito:username"), "___xamznone____")) )
#set( $ScanRequest = {
"version": "2017-02-28",
"operation": "Scan",
"filter": {
"expression": "owner = :owner",
"expressionValues": {
":owner": { "S": $identityValue }
}
}
} )
$util.toJson($ScanRequest)
This template fails, because owner
is a reserved keyword. However, I can't figure out how to handle reserved words with AppSync.
How do you handle reserved words with AppSync? And is there a better way to write this Scan than my hardcoded one?
Upvotes: 2
Views: 1594
Reputation: 21
You should use "expressionNames" to work around reserved keywords. Filter expression will look something like this then:
"filter": {
"expression": "#owner = :owner",
"expressionNames": {
"#owner": "owner"
},
"expressionValues": {
":owner": { "S": $identityValue }
}
}
Upvotes: 0
Reputation: 31
#set($ctx.args.filter.sub = { "eq" : $context.identity.claims.sub })
##if( $context.args.filter )
#set( $ListRequest.filter = $util.parseJson("$util.transform.toDynamoDBFilterExpression($ctx.args.filter)") )
##end
Upvotes: 0
Reputation: 14768
So I solved it while hardcoding it:
#set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("username"),
$util.defaultIfNull($ctx.identity.claims.get("cognito:username"), "___xamznone____")) )
#set( $ScanRequest = {
"version": "2017-02-28",
"operation": "Scan",
"filter": {
"expression": "#owner = :owner",
"expressionValues": {
":owner": { "S": $identityValue }
},
"expressionNames": {
"#owner": "owner"
}
}
} )
$util.toJson($ScanRequest)
If someone can come up with a not hardcoded answer like e.g. dynamically setting filter like this:
#if( $context.args.filter )
#set( $ListRequest.filter = $util.parseJson("$util.transform.toDynamoDBFilterExpression($ctx.args.filter)") )
#end
While still filtering by owner, I will gladly accept that answer.
Upvotes: 3