{
  "Comment": "GDA Score Calculation State machine",
  "StartAt": "LambdaGDAKnowledgeGraph",
  "States": {
    "LambdaGDAKnowledgeGraph": {
      "Type": "Task",
      "Resource": "${lambda_gda_knowledge_graph}",
      "Parameters": {
        "amazon_music_url.$": "$.AmazonMusicUrl__c",
        "deezer_url.$": "$.DeezerUrl__c",
        "facebook_url.$": "$.FacebookUrl__c",
        "instagram_url.$": "$.InstagramUrl__c",
        "soundcloud_url.$": "$.SoundcloudUrl__c",
        "spotify_url.$": "$.SpotifyUrl__c",
        "tiktok_url.$": "$.TiktokUrl__c",
        "twitter_url.$": "$.TwitterUrl__c",
        "youtube_url.$": "$.YoutubeUrl__c",
        "correlation_id.$": "$.CorrelationId__c"
      },
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": ${lambda_gda_default_timeout},
      "ResultPath": "$.lambda_gda_knowledge_graph_result",
      "Retry": [
        {
          "ErrorEquals": [
            "RetryException",
            "States.Timeout",
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException",
            "Lambda.Unknown"
          ],
          "IntervalSeconds": 5,
          "MaxAttempts": ${lambda_gda_retry_attempts},
          "BackoffRate": 3
        }
      ],
      "Next": "ScrapeAccounts"
    },
    "ScrapeAccounts": {
      "Type": "Parallel",
      "Branches": [
        {
          "StartAt": "SpotifyChoice",
          "States": {
            "SpotifyChoice": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.SpotifyUrl__c",
                  "IsNull": true,
                  "Next": "SpotifyPass"
                }
              ],
              "Default": "LambdaGDASpotifyScraper"
            },
            "SpotifyPass": {
              "Type": "Pass",
              "End": true
            },
            "LambdaGDASpotifyScraper": {
              "Type": "Task",
              "Parameters": {
                "spotify_id.$": "$.lambda_gda_knowledge_graph_result.spotify_id",
                "correlation_id.$": "$.CorrelationId__c"
              },
              "Resource": "${lambda_gda_spotify_scraper}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": ${lambda_gda_scraping_function_timeout},
              "ResultPath": "$.lambda_gda_spotify_scraper_result",
              "Retry": [
                {
                  "ErrorEquals": [
                    "RetryException",
                    "States.Timeout",
                    "Lambda.ServiceException",
                    "Lambda.AWSLambdaException",
                    "Lambda.SdkClientException",
                    "Lambda.TooManyRequestsException",
                    "Lambda.Unknown"
                  ],
                  "IntervalSeconds": 5,
                  "MaxAttempts": ${lambda_gda_retry_attempts},
                  "BackoffRate": 3
                }
              ],
              "End": true,
              "Catch": [
                {
                  "ErrorEquals": [
                    "States.ALL"
                  ],
                  "Next": "SpotifyPass"
                }
              ]
            }
          }
        },
        {
          "StartAt": "TiktokChoice",
          "States": {
            "TiktokChoice": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.TiktokUrl__c",
                  "IsNull": true,
                  "Next": "TiktokPass"
                }
              ],
              "Default": "LambdaGDATiktokScraper"
            },
            "TiktokPass": {
              "Type": "Pass",
              "End": true
            },
            "LambdaGDATiktokScraper": {
              "Type": "Task",
              "Parameters": {
                "tiktok_url.$": "$.lambda_gda_knowledge_graph_result.tiktok_url",
                "correlation_id.$": "$.CorrelationId__c"
              },
              "Resource": "${lambda_gda_tiktok_scraper}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": ${lambda_gda_scraping_function_timeout},
              "ResultPath": "$.lambda_gda_tiktok_scraper_result",
              "Retry": [
                {
                  "ErrorEquals": [
                    "RetryException",
                    "States.Timeout",
                    "Lambda.ServiceException",
                    "Lambda.AWSLambdaException",
                    "Lambda.SdkClientException",
                    "Lambda.TooManyRequestsException",
                    "Lambda.Unknown"
                  ],
                  "IntervalSeconds": 5,
                  "MaxAttempts": ${lambda_gda_retry_attempts},
                  "BackoffRate": 3
                }
              ],
              "End": true,
              "Catch": [
                {
                  "ErrorEquals": [
                    "States.ALL"
                  ],
                  "Next": "TiktokPass"
                }
              ]
            }
          }
        },
        {
          "StartAt": "YoutubeChoice",
          "States": {
            "YoutubeChoice": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.YoutubeUrl__c",
                  "IsNull": true,
                  "Next": "YoutubePass"
                }
              ],
              "Default": "LambdaGDAYouTubeScraper"
            },
            "YoutubePass": {
              "Type": "Pass",
              "End": true
            },
            "LambdaGDAYouTubeScraper": {
              "Type": "Task",
              "Parameters": {
                "youtube_url.$": "$.lambda_gda_knowledge_graph_result.youtube_url",
                "correlation_id.$": "$.CorrelationId__c"
              },
              "Resource": "${lambda_gda_youtube_scraper}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": ${lambda_gda_scraping_function_timeout},
              "ResultPath": "$.lambda_gda_youtube_scraper_result",
              "Retry": [
                {
                  "ErrorEquals": [
                    "RetryException",
                    "States.Timeout",
                    "Lambda.ServiceException",
                    "Lambda.AWSLambdaException",
                    "Lambda.SdkClientException",
                    "Lambda.TooManyRequestsException",
                    "Lambda.Unknown"
                  ],
                  "IntervalSeconds": 5,
                  "MaxAttempts": ${lambda_gda_retry_attempts},
                  "BackoffRate": 3
                }
              ],
              "End": true,
              "Catch": [
                {
                  "ErrorEquals": [
                    "States.ALL"
                  ],
                  "Next": "YoutubePass"
                }
              ]
            }
          }
        }
      ],
      "Next": "LambdaGDACalculateScore"
    },
    "LambdaGDACalculateScore": {
      "Type": "Task",
      "Resource": "${lambda_gda_calculate_score}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": ${lambda_gda_default_timeout},
      "Retry": [
        {
          "ErrorEquals": [
            "RetryException",
            "States.Timeout",
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException",
            "Lambda.Unknown"
          ],
          "IntervalSeconds": 5,
          "MaxAttempts": ${lambda_gda_retry_attempts},
          "BackoffRate": 3
        }
      ],
      "End": true
    }
  }
}
