def fromSalesforceMessage()

in handlers/batch-email-sender/src/main/scala/com/gu/batchemailsender/api/batchemail/BrazeSqsMessage.scala [122:194]


  def fromSalesforceMessage(salesforceBatchItem: SalesforceBatchItem): BrazeSqsMessage = {
    val salesforcePayload = salesforceBatchItem.payload

    val emailPayloadTo = EmailPayloadTo(
      Address = salesforceBatchItem.payload.to_address,
      SubscriberKey = salesforceBatchItem.payload.to_address,

      // Actual Braze fields
      ContactAttributes = EmailPayloadContactAttributes(
        SubscriberAttributes = BrazeApiTriggerProperties(
          atLeastSupporter(salesforceBatchItem.payload.first_name),
          atLeastEmptyString(salesforceBatchItem.payload.last_name),
          salesforceBatchItem.payload.subscriber_id,
          salesforceBatchItem.payload.next_charge_date.map(fromSfDateToDisplayDate),
          salesforceBatchItem.payload.product,
          salesforceBatchItem.payload.modified_by_customer,

          // Holiday stop
          salesforcePayload.holiday_stop_request.map(stop => fromSfDateToDisplayDate(stop.holiday_start_date)),
          salesforcePayload.holiday_stop_request.map(stop => fromSfDateToDisplayDate(stop.holiday_end_date)),
          salesforcePayload.holiday_stop_request.map(_.stopped_credit_sum),
          salesforcePayload.holiday_stop_request.map(_.currency_symbol),
          salesforcePayload.holiday_stop_request.map(_.stopped_issue_count),
          stopped_credit_summaries = for {
            stop <- salesforcePayload.holiday_stop_request
            summaryList <- stop.stopped_credit_summaries
            stoppedCreditSummaries = summaryList.map(detail =>
              StoppedCreditSummary(detail.credit_amount, fromSfDateToDisplayDate(detail.credit_date)),
            )
          } yield stoppedCreditSummaries,
          salesforcePayload.holiday_stop_request.flatMap(_.bulk_suspension_reason),

          // Digital voucher
          digital_voucher = salesforceBatchItem.payload.digital_voucher
            .map(wireVoucher => DigitalVoucher(wireVoucher.barcode_url)),

          // Delivery Problem
          delivery_problem_action = salesforcePayload.delivery_problem.map(_.actionTaken),
          delivery_problem_total_affected = salesforcePayload.delivery_problem.map(_.issuesAffected),
          delivery_problem_affected_dates = salesforcePayload.delivery_problem.map(
            _.deliveries.map(d => fromSfDateToDisplayDate(d.Delivery_Date__c)).mkString(", "),
          ),
          delivery_problem_total_credit = salesforcePayload.delivery_problem.map(_.totalCreditAmount),
          delivery_problem_invoice_date = salesforcePayload.delivery_problem.flatMap(
            _.deliveries.flatMap(_.Invoice_Date__c).headOption.map(fromSfDateToDisplayDate),
          ),
          delivery_problem_type = salesforcePayload.delivery_problem.map(_.typeOfProblem),
          delivery_problem_currency_symbol = salesforcePayload.delivery_problem.map(_.currencySymbol),
          delivery_problem_case_number = salesforcePayload.delivery_problem.map(_.caseNumber),

          // Delivery Address Change
          delivery_address_change_line1 =
            salesforcePayload.delivery_address_change.flatMap(_.mailingStreet).flatMap(sfStreetToLine1),
          delivery_address_change_line2 =
            salesforcePayload.delivery_address_change.flatMap(_.mailingStreet).flatMap(sfStreetToLine2),
          delivery_address_change_city = salesforcePayload.delivery_address_change.flatMap(_.mailingCity),
          delivery_address_change_state = salesforcePayload.delivery_address_change.flatMap(_.mailingState),
          delivery_address_change_postcode = salesforcePayload.delivery_address_change.flatMap(_.mailingPostalCode),
          delivery_address_change_country = salesforcePayload.delivery_address_change.flatMap(_.mailingCountry),
          delivery_address_change_effective_date_blurb =
            salesforcePayload.delivery_address_change.flatMap(_.addressChangeEffectiveDateBlurb),
        ),
      ),
    )

    BrazeSqsMessage(
      To = emailPayloadTo,
      DataExtensionName = SalesforceToBrazeCampaignMapping(salesforceBatchItem),
      SfContactId = Some(salesforcePayload.sf_contact_id),
      IdentityUserId = salesforcePayload.identity_id,
      recordId = salesforcePayload.record_id,
    )
  }