in src/main/scala/payment_failure_comms/SalesforceConnector.scala [32:102]
def apply(sfConfig: SalesforceConfig, logger: LambdaLogger): Either[Failure, SalesforceConnector] =
auth(sfConfig, logger)
.map(new SalesforceConnector(_, sfConfig.apiVersion, logger))
def auth(sfConfig: SalesforceConfig, logger: LambdaLogger): Either[Failure, SalesforceAuth] =
handleRequestResult[SalesforceAuth](logger)(
authRequest(sfConfig, logger)
)
def getRecordsToProcess(
authDetails: SalesforceAuth,
apiVersion: String,
logger: LambdaLogger
): Either[Failure, Seq[PaymentFailureRecord]] = {
/*
* Query limited to 50 records to avoid hitting the limit for concurrent updates
* using the Braze user track endpoint.
* See https://www.braze.com/docs/api/errors/#fatal-errors
*
* Including Status_Helper__c field in query to improve its filtering efficiency and, therefore, performance.
*/
val query =
"""
|SELECT
| Id,
| Contact__c,
| Contact__r.IdentityID__c,
| SF_Subscription__r.Product_Name__c,
| SF_Subscription__r.Zuora_Subscription_Name__c,
| SF_Subscription__r.Cancellation_Request_Date__c,
| PF_Comms_Status__c,
| Payment_Failure_Type__c,
| STG_Initial_Gateway_Response_Code__c,
| STG_Initial_Gateway_Response__c,
| PF_Comms_Last_Stage_Processed__c,
| PF_Comms_Number_of_Attempts__c,
| Currency__c,
| Invoice_Total_Amount__c,
| Billing_Account__r.Zuora__BillToCountry__c,
| Invoice_Created_Date__c,
| Initial_Payment_Created_Date__c,
| Recovery_Date__c,
| Cut_Off_Date__c
|FROM Payment_Failure__c
|WHERE Status_Helper__c
|IN (
| 'payment outstanding',
| 'recovered',
| 'cancelled-customer',
| 'cancelled-auto'
|)
|AND PF_Comms_Status__c
|IN (
| 'Ready to send entry event',
| 'Ready to send recovery event',
| 'Ready to send voluntary cancel event',
| 'Ready to send auto cancel event'
|)
|ORDER BY Invoice_Created_Date__c
|LIMIT 50""".stripMargin
handleRequestResult[SFPaymentFailureRecordWrapper](logger)(
responseToQueryRequest(
url = s"${authDetails.instance_url}/services/data/$apiVersion/query/",
bearerToken = authDetails.access_token,
query = query,
logger = logger
)
)
.map(_.records)
}