def program()

in src/main/scala/payment_failure_comms/Handler.scala [49:76]


  def program(logger: LambdaLogger): Unit = {
    (for {
      config <- Config()
      sfConnector <- SalesforceConnector(config.salesforce, logger)

      records <- sfConnector.getRecordsToProcess()
      augmentedRecords = augmentRecordsWithBrazeId(findBrazeId(config.idapi, logger))(records)

      brazeRequests <- BrazeTrackRequest(augmentedRecords.withBrazeId, config.braze.zuoraAppId)

      brazeResult = processBrazeRequests(brazeRequests, config, logger)

      updateRecordsRequest = PaymentFailureRecordUpdateRequest(
        augmentedRecords.withBrazeId,
        augmentedRecords.withoutBrazeId,
        brazeResult
      )
      recordsOn5Failures = updateRecordsRequest.records.count(_.PF_Comms_Number_of_Attempts__c == 5)
      _ = if (recordsOn5Failures != 0) putMetric(config.stage, recordsOn5Failures)

      _ <- sfConnector.updateRecords(updateRecordsRequest)
    } yield ()) match {
      case Left(failure) =>
        Log.failure(logger)(failure)
        throw new RuntimeException(failure.details)
      case Right(_) => Log.completion(logger)
    }
  }