{
  "Parameters": {
    "DynamoDBModelTableReadIOPS": {
      "Type": "Number",
      "Default": 5,
      "Description": "The number of read IOPS the table should support."
    },
    "DynamoDBModelTableWriteIOPS": {
      "Type": "Number",
      "Default": 5,
      "Description": "The number of write IOPS the table should support."
    },
    "DynamoDBBillingMode": {
      "Type": "String",
      "Default": "PAY_PER_REQUEST",
      "AllowedValues": [
        "PAY_PER_REQUEST",
        "PROVISIONED"
      ],
      "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes."
    },
    "DynamoDBEnablePointInTimeRecovery": {
      "Type": "String",
      "Default": "false",
      "AllowedValues": [
        "true",
        "false"
      ],
      "Description": "Whether to enable Point in Time Recovery on the table."
    },
    "DynamoDBEnableServerSideEncryption": {
      "Type": "String",
      "Default": "true",
      "AllowedValues": [
        "true",
        "false"
      ],
      "Description": "Enable server side encryption powered by KMS."
    },
    "referencetotransformerrootstackenv10C5A902Ref": {
      "Type": "String"
    },
    "referencetotransformerrootstackGraphQLAPI20497F53ApiId": {
      "Type": "String"
    },
    "referencetotransformerrootstackS3DeploymentBucket7592718ARef": {
      "Type": "String"
    },
    "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserauth0FunctionQuerygetUserauth0FunctionAppSyncFunctionAE1DE713FunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationcreateUserinit0FunctionMutationcreateUserinit0FunctionAppSyncFunction5CF77F6AFunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationupdateUserinit0FunctionMutationupdateUserinit0FunctionAppSyncFunction90E2C98AFunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptiononCreateUserauth0FunctionSubscriptiononCreateUserauth0FunctionAppSyncFunction0FC1B29BFunctionId": {
      "Type": "String"
    },
    "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId": {
      "Type": "String"
    }
  },
  "Conditions": {
    "HasEnvironmentParameter": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "referencetotransformerrootstackenv10C5A902Ref"
            },
            "NONE"
          ]
        }
      ]
    },
    "ShouldUseServerSideEncryption": {
      "Fn::Equals": [
        {
          "Ref": "DynamoDBEnableServerSideEncryption"
        },
        "true"
      ]
    },
    "ShouldUsePayPerRequestBilling": {
      "Fn::Equals": [
        {
          "Ref": "DynamoDBBillingMode"
        },
        "PAY_PER_REQUEST"
      ]
    },
    "ShouldUsePointInTimeRecovery": {
      "Fn::Equals": [
        {
          "Ref": "DynamoDBEnablePointInTimeRecovery"
        },
        "true"
      ]
    }
  },
  "Resources": {
    "VideosRecipeCardsTable": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
        "KeySchema": [
          {
            "AttributeName": "id",
            "KeyType": "HASH"
          }
        ],
        "AttributeDefinitions": [
          {
            "AttributeName": "id",
            "AttributeType": "S"
          },
          {
            "AttributeName": "videoID",
            "AttributeType": "S"
          },
          {
            "AttributeName": "recipeCardID",
            "AttributeType": "S"
          }
        ],
        "BillingMode": {
          "Fn::If": [
            "ShouldUsePayPerRequestBilling",
            "PAY_PER_REQUEST",
            {
              "Ref": "AWS::NoValue"
            }
          ]
        },
        "GlobalSecondaryIndexes": [
          {
            "IndexName": "byVideo",
            "KeySchema": [
              {
                "AttributeName": "videoID",
                "KeyType": "HASH"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            },
            "ProvisionedThroughput": {
              "Fn::If": [
                "ShouldUsePayPerRequestBilling",
                {
                  "Ref": "AWS::NoValue"
                },
                {
                  "ReadCapacityUnits": {
                    "Ref": "DynamoDBModelTableReadIOPS"
                  },
                  "WriteCapacityUnits": {
                    "Ref": "DynamoDBModelTableWriteIOPS"
                  }
                }
              ]
            }
          },
          {
            "IndexName": "byRecipeCard",
            "KeySchema": [
              {
                "AttributeName": "recipeCardID",
                "KeyType": "HASH"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            },
            "ProvisionedThroughput": {
              "Fn::If": [
                "ShouldUsePayPerRequestBilling",
                {
                  "Ref": "AWS::NoValue"
                },
                {
                  "ReadCapacityUnits": {
                    "Ref": "DynamoDBModelTableReadIOPS"
                  },
                  "WriteCapacityUnits": {
                    "Ref": "DynamoDBModelTableWriteIOPS"
                  }
                }
              ]
            }
          }
        ],
        "PointInTimeRecoverySpecification": {
          "Fn::If": [
            "ShouldUsePointInTimeRecovery",
            {
              "PointInTimeRecoveryEnabled": true
            },
            {
              "Ref": "AWS::NoValue"
            }
          ]
        },
        "ProvisionedThroughput": {
          "Fn::If": [
            "ShouldUsePayPerRequestBilling",
            {
              "Ref": "AWS::NoValue"
            },
            {
              "ReadCapacityUnits": {
                "Ref": "DynamoDBModelTableReadIOPS"
              },
              "WriteCapacityUnits": {
                "Ref": "DynamoDBModelTableWriteIOPS"
              }
            }
          ]
        },
        "SSESpecification": {
          "SSEEnabled": {
            "Fn::If": [
              "ShouldUseServerSideEncryption",
              true,
              false
            ]
          }
        },
        "StreamSpecification": {
          "StreamViewType": "NEW_AND_OLD_IMAGES"
        },
        "TableName": {
          "Fn::Join": [
            "",
            [
              "VideosRecipeCards-",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "-",
              {
                "Ref": "referencetotransformerrootstackenv10C5A902Ref"
              }
            ]
          ]
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete"
    },
    "VideosRecipeCardsIAMRole63CFE319": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "appsync.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "RoleName": {
          "Fn::Join": [
            "",
            [
              "VideosRecipeCardsIAM05551c-",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "-",
              {
                "Ref": "referencetotransformerrootstackenv10C5A902Ref"
              }
            ]
          ]
        }
      }
    },
    "VideosRecipeCardsIAMRoleDefaultPolicy3DEADF56": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "VideosRecipeCardsTable",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "VideosRecipeCardsTable",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "VideosRecipeCardsIAMRoleDefaultPolicy3DEADF56",
        "Roles": [
          {
            "Ref": "VideosRecipeCardsIAMRole63CFE319"
          }
        ]
      }
    },
    "DynamoDBAccess71ABE5AE": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::Join": [
                          "",
                          [
                            "VideosRecipeCards-",
                            {
                              "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
                            },
                            "-",
                            {
                              "Ref": "referencetotransformerrootstackenv10C5A902Ref"
                            }
                          ]
                        ]
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*",
                    {
                      "tablename": {
                        "Fn::Join": [
                          "",
                          [
                            "VideosRecipeCards-",
                            {
                              "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
                            },
                            "-",
                            {
                              "Ref": "referencetotransformerrootstackenv10C5A902Ref"
                            }
                          ]
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "DynamoDBAccess71ABE5AE",
        "Roles": [
          {
            "Ref": "VideosRecipeCardsIAMRole63CFE319"
          }
        ]
      }
    },
    "VideosRecipeCardsDataSource": {
      "Type": "AWS::AppSync::DataSource",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "Name": "VideosRecipeCardsTable",
        "Type": "AMAZON_DYNAMODB",
        "DynamoDBConfig": {
          "AwsRegion": {
            "Ref": "AWS::Region"
          },
          "TableName": {
            "Ref": "VideosRecipeCardsTable"
          }
        },
        "ServiceRoleArn": {
          "Fn::GetAtt": [
            "VideosRecipeCardsIAMRole63CFE319",
            "Arn"
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsIAMRole63CFE319"
      ]
    },
    "QueryGetVideosRecipeCardsDataResolverFnQueryGetVideosRecipeCardsDataResolverFnAppSyncFunctionB084CF7E": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "QueryGetVideosRecipeCardsDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.getVideosRecipeCards.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.getVideosRecipeCards.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "GetVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "getVideosRecipeCards",
        "TypeName": "Query",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserauth0FunctionQuerygetUserauth0FunctionAppSyncFunctionAE1DE713FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "QueryGetVideosRecipeCardsDataResolverFnQueryGetVideosRecipeCardsDataResolverFnAppSyncFunctionB084CF7E",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "VideosRecipeCardsTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "QueryListVideosRecipeCardsDataResolverFnQueryListVideosRecipeCardsDataResolverFnAppSyncFunction507F10B6": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "QueryListVideosRecipeCardsDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.listVideosRecipeCards.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Query.listVideosRecipeCards.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "ListVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "listVideosRecipeCards",
        "TypeName": "Query",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserauth0FunctionQuerygetUserauth0FunctionAppSyncFunctionAE1DE713FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "QueryListVideosRecipeCardsDataResolverFnQueryListVideosRecipeCardsDataResolverFnAppSyncFunction507F10B6",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "VideosRecipeCardsTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "MutationcreateVideosRecipeCardsauth0FunctionMutationcreateVideosRecipeCardsauth0FunctionAppSyncFunction696F097E": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Ref": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name"
        },
        "Name": "MutationcreateVideosRecipeCardsauth0Function",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.createVideosRecipeCards.auth.1.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson({})"
      }
    },
    "MutationCreateVideosRecipeCardsDataResolverFnMutationCreateVideosRecipeCardsDataResolverFnAppSyncFunctionC9A59C2B": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "MutationCreateVideosRecipeCardsDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.createVideosRecipeCards.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.createVideosRecipeCards.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "CreateVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "createVideosRecipeCards",
        "TypeName": "Mutation",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationcreateUserinit0FunctionMutationcreateUserinit0FunctionAppSyncFunction5CF77F6AFunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationcreateVideosRecipeCardsauth0FunctionMutationcreateVideosRecipeCardsauth0FunctionAppSyncFunction696F097E",
                "FunctionId"
              ]
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationCreateVideosRecipeCardsDataResolverFnMutationCreateVideosRecipeCardsDataResolverFnAppSyncFunctionC9A59C2B",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "VideosRecipeCardsTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "MutationupdateVideosRecipeCardsauth0FunctionMutationupdateVideosRecipeCardsauth0FunctionAppSyncFunction830102D0": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "MutationupdateVideosRecipeCardsauth0Function",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateVideosRecipeCards.auth.1.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateVideosRecipeCards.auth.1.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "MutationUpdateVideosRecipeCardsDataResolverFnMutationUpdateVideosRecipeCardsDataResolverFnAppSyncFunction15047A8D": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "MutationUpdateVideosRecipeCardsDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateVideosRecipeCards.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.updateVideosRecipeCards.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "UpdateVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "updateVideosRecipeCards",
        "TypeName": "Mutation",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserMutationupdateUserinit0FunctionMutationupdateUserinit0FunctionAppSyncFunction90E2C98AFunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationupdateVideosRecipeCardsauth0FunctionMutationupdateVideosRecipeCardsauth0FunctionAppSyncFunction830102D0",
                "FunctionId"
              ]
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationUpdateVideosRecipeCardsDataResolverFnMutationUpdateVideosRecipeCardsDataResolverFnAppSyncFunction15047A8D",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "VideosRecipeCardsTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "MutationdeleteVideosRecipeCardsauth0FunctionMutationdeleteVideosRecipeCardsauth0FunctionAppSyncFunctionB3EC9567": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "MutationdeleteVideosRecipeCardsauth0Function",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteVideosRecipeCards.auth.1.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteVideosRecipeCards.auth.1.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "MutationDeleteVideosRecipeCardsDataResolverFnMutationDeleteVideosRecipeCardsDataResolverFnAppSyncFunction67C52934": {
      "Type": "AWS::AppSync::FunctionConfiguration",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "DataSourceName": {
          "Fn::GetAtt": [
            "VideosRecipeCardsDataSource",
            "Name"
          ]
        },
        "Name": "MutationDeleteVideosRecipeCardsDataResolverFn",
        "FunctionVersion": "2018-05-29",
        "RequestMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteVideosRecipeCards.req.vtl"
            ]
          ]
        },
        "ResponseMappingTemplateS3Location": {
          "Fn::Join": [
            "",
            [
              "s3://",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentBucket7592718ARef"
              },
              "/",
              {
                "Ref": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref"
              },
              "/resolvers/Mutation.deleteVideosRecipeCards.res.vtl"
            ]
          ]
        }
      },
      "DependsOn": [
        "VideosRecipeCardsDataSource"
      ]
    },
    "DeleteVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "deleteVideosRecipeCards",
        "TypeName": "Mutation",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Fn::GetAtt": [
                "MutationdeleteVideosRecipeCardsauth0FunctionMutationdeleteVideosRecipeCardsauth0FunctionAppSyncFunctionB3EC9567",
                "FunctionId"
              ]
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Fn::GetAtt": [
                "MutationDeleteVideosRecipeCardsDataResolverFnMutationDeleteVideosRecipeCardsDataResolverFnAppSyncFunction67C52934",
                "FunctionId"
              ]
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n$util.qr($ctx.stash.put(\"tableName\", \"",
              {
                "Ref": "VideosRecipeCardsTable"
              },
              "\"))\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "SubscriptiononCreateVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "onCreateVideosRecipeCards",
        "TypeName": "Subscription",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptiononCreateUserauth0FunctionSubscriptiononCreateUserauth0FunctionAppSyncFunction0FC1B29BFunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId"
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "SubscriptiononUpdateVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "onUpdateVideosRecipeCards",
        "TypeName": "Subscription",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptiononCreateUserauth0FunctionSubscriptiononCreateUserauth0FunctionAppSyncFunction0FC1B29BFunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId"
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    },
    "SubscriptiononDeleteVideosRecipeCardsResolver": {
      "Type": "AWS::AppSync::Resolver",
      "Properties": {
        "ApiId": {
          "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
        },
        "FieldName": "onDeleteVideosRecipeCards",
        "TypeName": "Subscription",
        "Kind": "PIPELINE",
        "PipelineConfig": {
          "Functions": [
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptiononCreateUserauth0FunctionSubscriptiononCreateUserauth0FunctionAppSyncFunction0FC1B29BFunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserQuerygetUserpostAuth0FunctionQuerygetUserpostAuth0FunctionAppSyncFunction083DF5E5FunctionId"
            },
            {
              "Ref": "referencetotransformerrootstackUserNestedStackUserNestedStackResource01084C14OutputstransformerrootstackUserSubscriptionOnCreateUserDataResolverFnSubscriptionOnCreateUserDataResolverFnAppSyncFunctionCAFEE24EFunctionId"
            }
          ]
        },
        "RequestMappingTemplate": {
          "Fn::Join": [
            "",
            [
              "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteVideosRecipeCards\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"",
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "\"))\n\n$util.toJson({})"
            ]
          ]
        },
        "ResponseMappingTemplate": "$util.toJson($ctx.prev.result)"
      }
    }
  },
  "Outputs": {
    "GetAttVideosRecipeCardsTableStreamArn": {
      "Description": "Your DynamoDB table StreamArn.",
      "Value": {
        "Fn::GetAtt": [
          "VideosRecipeCardsTable",
          "StreamArn"
        ]
      },
      "Export": {
        "Name": {
          "Fn::Join": [
            ":",
            [
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "GetAtt:VideosRecipeCardsTable:StreamArn"
            ]
          ]
        }
      }
    },
    "GetAttVideosRecipeCardsTableName": {
      "Description": "Your DynamoDB table name.",
      "Value": {
        "Ref": "VideosRecipeCardsTable"
      },
      "Export": {
        "Name": {
          "Fn::Join": [
            ":",
            [
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "GetAtt:VideosRecipeCardsTable:Name"
            ]
          ]
        }
      }
    },
    "GetAttVideosRecipeCardsDataSourceName": {
      "Description": "Your model DataSource name.",
      "Value": {
        "Fn::GetAtt": [
          "VideosRecipeCardsDataSource",
          "Name"
        ]
      },
      "Export": {
        "Name": {
          "Fn::Join": [
            ":",
            [
              {
                "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId"
              },
              "GetAtt:VideosRecipeCardsDataSource:Name"
            ]
          ]
        }
      }
    },
    "transformerrootstackVideosRecipeCardsVideosRecipeCardsDataSource3D8C80DEName": {
      "Value": {
        "Fn::GetAtt": [
          "VideosRecipeCardsDataSource",
          "Name"
        ]
      }
    },
    "transformerrootstackVideosRecipeCardsVideosRecipeCardsTable5D2ECBC9Ref": {
      "Value": {
        "Ref": "VideosRecipeCardsTable"
      }
    }
  }
}