Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Count field definition #11

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
*.d.ts
handler/node_modules
handler/*.js
handler.zip
handler/*.d.ts
.idea
node_modules
33 changes: 32 additions & 1 deletion handler/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export interface CountResolverEvent {
context: any;
dynamo: DynamoFilter | null;
tableName: string;
indexName: string | undefined | null;
}

interface Context {
Expand Down Expand Up @@ -78,14 +79,44 @@ export function makeScanInput(
};
}

export function makeScanInputFromIndex(
event: CountResolverEvent,
startKey: ScanCommandInput["ExclusiveStartKey"]
): ScanCommandInput {
return {
Select: "COUNT",
TableName: event.tableName,
ExclusiveStartKey: startKey,
FilterExpression:
event.dynamo && event.dynamo.expression.length > 0
? event.dynamo?.expression
: undefined,
ExpressionAttributeNames: notEmptyObject(event.dynamo?.expressionNames)
? event.dynamo?.expressionNames
: undefined,
ExpressionAttributeValues: notEmptyObject(event.dynamo?.expressionValues)
? primitivesToString(event.dynamo?.expressionValues)
: undefined,
};
}

export const handler = async (event: CountResolverEvent) => {
debug("Incoming event data from AppSync: %o", event);
const dbClient = new DynamoDB({});

const indexName = event.indexName;

let count = 0;
let startKey = undefined;
while (true) {
const scanArgs = makeScanInput(event, startKey);
let scanArgs!: ScanCommandInput;

if (!indexName) {
scanArgs = makeScanInputFromIndex(event, startKey);
} else {
scanArgs = makeScanInput(event, startKey);
}

debug("Executing the following Dynamo scan: %o", scanArgs);
const res: ScanCommandOutput = await dbClient.scan(scanArgs);
count += res.Count || 0;
Expand Down
Loading