def updateRecords()

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
  }