private def handle()

in handlers/batch-email-sender/src/main/scala/com/gu/batchemailsender/api/batchemail/Handler.scala [43:75]


  private def handle(apiGatewayRequest: ApiGatewayRequest): ApiResponse = {
    val useOldSend = apiGatewayRequest.queryStringParameters.flatMap(_.get("oldApi")).map(_.toBoolean).getOrElse(false)
    if (useOldSend) {
      apiGatewayRequest
        .bodyAsCaseClass[SalesforceBatchWithExceptions]()
        .map({ salesforceBatch =>
          val validSalesforceBatchItems = salesforceBatch.validBatch.batch_items
          val invalidSalesforceBatchItems = salesforceBatch.exceptions
          if (invalidSalesforceBatchItems.nonEmpty) { // FIXME: This is not hooked up to a response code which means emails might be silently dropped
            logger.error(
              s"Some batch items sent from Salesforce had parsing errors: $invalidSalesforceBatchItems. FIXME: These emails are silently dropped!",
            )
          }
          val sqsMessages = validSalesforceBatchItems.map(BrazeSqsMessage.fromSalesforceMessage)
          val sqsSendResults = oldSend(sqsMessages)
          val failedSendIds = sqsSendResults collect { case Left(recordId) => recordId }
          val successfulIds = sqsSendResults collect { case Right(recordId) => recordId }
          if (failedSendIds.nonEmpty) {
            logger.error(s"Failed to send some Braze SQS messages: $failedSendIds")
            ApiGatewayResponse(
              "502",
              OldPartialSendSuccess("Failed to send some Braze SQS messages.", 502, failedSendIds),
            )
          } else {
            logger.info(s"Successfully sent all Braze SQS messages: $successfulIds")
            ApiGatewayResponse.successfulExecution
          }
        })
        .apiResponse
    } else {
      handleEmailBatchRequest(apiGatewayRequest)
    }
  }