Skip to content

Commit

Permalink
chore(amplify-graphql-searchable-transformer): refactor and simplify …
Browse files Browse the repository at this point in the history
…the expression to construct aggregate values
  • Loading branch information
phani-srikar committed Sep 12, 2022
1 parent c324083 commit ee2bf58
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1226,11 +1226,18 @@ $util.toJson({})
#else
$util.error(\\"Unauthorized to run aggregation on field: \${aggItem.field}\\", \\"Unauthorized\\")
#end
#set( $aggregateValue = {} )
$util.qr($aggregateValue.put(\\"filter\\", $aggFilter))
#set( $aggsValue = {} )
#set( $aggItemType = {} )
#if( $nonKeywordFields.contains($aggItem.field) )
$util.qr($aggregateValues.put(\\"$aggItem.name\\", { \\"filter\\": $aggFilter, \\"aggs\\": { \\"$aggItem.name\\": { \\"$aggItem.type\\": { \\"field\\": \\"$aggItem.field\\" }}} }))
$util.qr($aggItemType.put(\\"$aggItem.type\\", { \\"field\\": \\"$aggItem.field\\" }))
#else
$util.qr($aggregateValues.put(\\"$aggItem.name\\", { \\"filter\\": $aggFilter, \\"aggs\\": { \\"$aggItem.name\\": { \\"$aggItem.type\\": { \\"field\\": \\"\${aggItem.field}.keyword\\" }}} }))
$util.qr($aggItemType.put(\\"$aggItem.type\\", { \\"field\\": \\"\${aggItem.field}.keyword\\" }))
#end
$util.qr($aggsValue.put(\\"$aggItem.name\\", $aggItemType))
$util.qr($aggregateValue.put(\\"aggs\\", $aggsValue))
$util.qr($aggregateValues.put(\\"$aggItem.name\\", $aggregateValue))
#end
#if( !$util.isNullOrEmpty($ctx.stash.authFilter) )
#set( $filter = $ctx.stash.authFilter )
Expand Down Expand Up @@ -1405,11 +1412,18 @@ exports[`SearchableModelTransformer with datastore enabled and sort field define
#else
$util.error(\\"Unauthorized to run aggregation on field: \${aggItem.field}\\", \\"Unauthorized\\")
#end
#set( $aggregateValue = {} )
$util.qr($aggregateValue.put(\\"filter\\", $aggFilter))
#set( $aggsValue = {} )
#set( $aggItemType = {} )
#if( $nonKeywordFields.contains($aggItem.field) )
$util.qr($aggregateValues.put(\\"$aggItem.name\\", { \\"filter\\": $aggFilter, \\"aggs\\": { \\"$aggItem.name\\": { \\"$aggItem.type\\": { \\"field\\": \\"$aggItem.field\\" }}} }))
$util.qr($aggItemType.put(\\"$aggItem.type\\", { \\"field\\": \\"$aggItem.field\\" }))
#else
$util.qr($aggregateValues.put(\\"$aggItem.name\\", { \\"filter\\": $aggFilter, \\"aggs\\": { \\"$aggItem.name\\": { \\"$aggItem.type\\": { \\"field\\": \\"\${aggItem.field}.keyword\\" }}} }))
$util.qr($aggItemType.put(\\"$aggItem.type\\", { \\"field\\": \\"\${aggItem.field}.keyword\\" }))
#end
$util.qr($aggsValue.put(\\"$aggItem.name\\", $aggItemType))
$util.qr($aggregateValue.put(\\"aggs\\", $aggsValue))
$util.qr($aggregateValues.put(\\"$aggItem.name\\", $aggregateValue))
#end
#if( !$util.isNullOrEmpty($ctx.stash.authFilter) )
#set( $filter = $ctx.stash.authFilter )
Expand Down Expand Up @@ -1543,11 +1557,18 @@ exports[`SearchableModelTransformer with datastore enabled vtl 1`] = `
#else
$util.error(\\"Unauthorized to run aggregation on field: \${aggItem.field}\\", \\"Unauthorized\\")
#end
#set( $aggregateValue = {} )
$util.qr($aggregateValue.put(\\"filter\\", $aggFilter))
#set( $aggsValue = {} )
#set( $aggItemType = {} )
#if( $nonKeywordFields.contains($aggItem.field) )
$util.qr($aggregateValues.put(\\"$aggItem.name\\", { \\"filter\\": $aggFilter, \\"aggs\\": { \\"$aggItem.name\\": { \\"$aggItem.type\\": { \\"field\\": \\"$aggItem.field\\" }}} }))
$util.qr($aggItemType.put(\\"$aggItem.type\\", { \\"field\\": \\"$aggItem.field\\" }))
#else
$util.qr($aggregateValues.put(\\"$aggItem.name\\", { \\"filter\\": $aggFilter, \\"aggs\\": { \\"$aggItem.name\\": { \\"$aggItem.type\\": { \\"field\\": \\"\${aggItem.field}.keyword\\" }}} }))
$util.qr($aggItemType.put(\\"$aggItem.type\\", { \\"field\\": \\"\${aggItem.field}.keyword\\" }))
#end
$util.qr($aggsValue.put(\\"$aggItem.name\\", $aggItemType))
$util.qr($aggregateValue.put(\\"aggs\\", $aggsValue))
$util.qr($aggregateValues.put(\\"$aggItem.name\\", $aggregateValue))
#end
#if( !$util.isNullOrEmpty($ctx.stash.authFilter) )
#set( $filter = $ctx.stash.authFilter )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ test('SearchableModelTransformer vtl', () => {

const out = transformer.transform(validSchema);
expect(parse(out.schema)).toBeDefined();
expect(out.resolvers['Query.searchPosts.req.vtl']).toBeDefined();
expect(out.resolvers['Query.searchPosts.req.vtl']).toContain('$util.qr($aggregateValues.put("$aggItem.name", $aggregateValue))');
expect(out.resolvers).toMatchSnapshot();
});

Expand All @@ -77,6 +79,8 @@ test('SearchableModelTransformer with datastore enabled vtl', () => {

const out = transformer.transform(validSchema);
expect(parse(out.schema)).toBeDefined();
expect(out.resolvers['Query.searchPosts.req.vtl']).toBeDefined();
expect(out.resolvers['Query.searchPosts.req.vtl']).toContain('$util.qr($aggregateValues.put("$aggItem.name", $aggregateValue))');
expect(out.resolvers['Query.searchPosts.req.vtl']).toMatchSnapshot();
expect(out.resolvers['Query.searchPosts.res.vtl']).toMatchSnapshot();
expect(out.resolvers['Query.searchPosts.res.vtl']).toContain('$util.qr($row.put("_version", $entry.get("_version")))');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,7 @@ export const requestTemplate = (
+ ' $util.error("Unauthorized to run aggregation on field: ${aggItem.field}", "Unauthorized")\n'
+ ' #end',
),
ifElse(
ref('nonKeywordFields.contains($aggItem.field)'),
qref(
'$aggregateValues.put("$aggItem.name", { "filter": $aggFilter, "aggs": { "$aggItem.name": { "$aggItem.type": { "field": "$aggItem.field" }}} })',
),
qref(
'$aggregateValues.put("$aggItem.name", { "filter": $aggFilter, "aggs": { "$aggItem.name": { "$aggItem.type": { "field": "${aggItem.field}.keyword" }}} })',
),
),
generateAddAggregateValues()
]),
ifElse(
not(isNullOrEmpty(authFilter)),
Expand Down Expand Up @@ -176,6 +168,27 @@ export const requestTemplate = (
]),
);

export const generateAddAggregateValues = (): Expression => {
return compoundExpression([
set(ref('aggregateValue'), obj({})),
qref('$aggregateValue.put("filter", $aggFilter)'),
set(ref('aggsValue'), obj({})),
set(ref('aggItemType'), obj({})),
ifElse(
ref('nonKeywordFields.contains($aggItem.field)'),
qref(
'$aggItemType.put("$aggItem.type", { "field": "$aggItem.field" })',
),
qref(
'$aggItemType.put("$aggItem.type", { "field": "${aggItem.field}.keyword" })',
),
),
qref('$aggsValue.put("$aggItem.name", $aggItemType)'),
qref('$aggregateValue.put("aggs", $aggsValue)'),
qref('$aggregateValues.put("$aggItem.name", $aggregateValue)'),
]);
};

export const responseTemplate = (includeVersion = false): string => print(
compoundExpression([
set(ref('es_items'), list([])),
Expand Down

0 comments on commit ee2bf58

Please sign in to comment.