Add Shaping Step to State Machine
Learn to add shaping to state machine.
We'll cover the following...
Shaping step in our workflow
Let's define the shaping step in our state machine. It will be a Task
state that uses the Lambda function we just defined.
import { DynamoDB } from "aws-sdk"; import { APIGatewayProxyEvent, APIGatewayProxyResult } from "aws-lambda"; const dynamoDB = new DynamoDB.DocumentClient(); const tableName = process.env.INVENTORY_TABLE; interface Ingredient { ingredient: string; quantity: number; } export const handler = async ( event: APIGatewayProxyEvent ): Promise<APIGatewayProxyResult> => { const requiredIngredients: Ingredient[] = JSON.parse( event.body ).requiredIngredients; const insufficientIngredients = await Promise.all( requiredIngredients.map(async (ingredient) => { const result = await dynamoDB .get({ TableName: tableName, Key: { ingredient: ingredient.ingredient }, }) .promise(); if (!result.Item || result.Item.quantity < ingredient.quantity) { return { ingredient: ingredient.ingredient, quantity: ingredient.quantity - (result.Item ? result.Item.quantity : 0), }; } await dynamoDB .update({ TableName: tableName, Key: { ingredient: ingredient.ingredient }, UpdateExpression: "SET quantity = :newQuantity", ExpressionAttributeValues: { ":newQuantity": result.Item.quantity - ingredient.quantity, }, }) .promise(); return null; }) ); const filteredInsufficientIngredients = insufficientIngredients.filter( (item) => item !== null ); if (filteredInsufficientIngredients.length === 0) { return { statusCode: 200, body: { status: "success", ingredients: requiredIngredients, }, }; } else { return { statusCode: 400, body: { status: "insufficient", insufficientIngredients: filteredInsufficientIngredients, }, }; } };
Project
...