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)
}
}