in src/main/scala/payment_failure_comms/SalesforceConnector.scala [104:150]
def updateRecords(
authDetails: SalesforceAuth,
apiVersion: String,
request: PaymentFailureRecordUpdateRequest,
logger: LambdaLogger
): Either[Failure, SFCompositeResponse] =
if (request.records.isEmpty)
Right(SFCompositeResponse(Seq()))
else
handleRequestResult[Seq[SFResponse]](logger)(
responseToCompositeRequest(logger)(
url = s"${authDetails.instance_url}/services/data/$apiVersion/composite/sobjects",
bearerToken = authDetails.access_token,
body = request.asJson.toString
)
)
.map(SFCompositeResponse.apply)
private def logAuthRequest(logger: LambdaLogger, authDetails: String, request: Request): Unit =
Log.request(logger)(
service = Log.Service.Salesforce,
description = Some("Auth"),
url = request.url().toString,
method = request.method(),
body = Some(authDetails)
)
def authRequest(sfConfig: SalesforceConfig, logger: LambdaLogger): Either[Throwable, Response] = {
val authDetails = Seq(
"grant_type" -> "password",
"client_id" -> sfConfig.clientId,
"client_secret" -> sfConfig.clientSecret,
"username" -> sfConfig.username,
"password" -> s"${sfConfig.password}${sfConfig.token}"
)
.map(_.productIterator.mkString("="))
.mkString("&")
val body = RequestBody.create(authDetails, urlEncoded)
val request = new Request.Builder()
.url(s"${sfConfig.instanceUrl}/services/oauth2/token")
.post(body)
.build()
logAuthRequest(logger, authDetails, request)
Try(
HttpClient().newCall(request).execute()
).toEither
}