{
  "Comment": "List batches then insert and finalize. Start with {\"week_start_date\":\"YYYY-MM-DD\"} to run from console.",
  "StartAt": "PrepareBatches",
  "States": {
    "PrepareBatches": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "OutputPath": "$.Payload",
      "Parameters": {
        "FunctionName": "${CreateTasksListBatchesArn}",
        "Payload.$": "$"
      },
      "Next": "InsertBatches"
    },
    "InsertBatches": {
      "Type": "Map",
      "ItemsPath": "$.items",
      "ResultPath": "$.insert_results",
      "MaxConcurrency": 1,
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "INLINE"
        },
        "StartAt": "InsertOneBatch",
        "States": {
          "InsertOneBatch": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
              "FunctionName": "${InsertTasksBatchArn}",
              "Payload.$": "$"
            },
            "Retry": [
              {
                "ErrorEquals": [
                  "Lambda.ServiceException",
                  "Lambda.AWSLambdaException",
                  "Lambda.SdkClientException",
                  "Lambda.TooManyRequestsException"
                ],
                "IntervalSeconds": 2,
                "MaxAttempts": 3,
                "BackoffRate": 2
              }
            ],
            "End": true
          }
        }
      },
      "Next": "Finalize"
    },
    "Finalize": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "OutputPath": "$.Payload",
      "Parameters": {
        "FunctionName": "${CreateTasksFinalizeArn}",
        "Payload": {
          "week_start_date.$": "$.week_start_date"
        }
      },
      "End": true
    }
  }
}
