def parseFailureTo500ApiResponse()

in handlers/holiday-stop-api/src/main/scala/com/gu/holiday_stops/SFErrorExposer.scala [26:50]


  def parseFailureTo500ApiResponse(failure: ClientFailure): ApiResponse =
    failure match {
      case error4xx: Types.Error4xx => // auth errors could be 401, validation could be 400
        Try(Json.parse(error4xx.body).as[List[SalesforceErrorResponseBody]]) match {
          case Success(sfErrors) =>
            logger.error(s"Failed to $action using input $inputThatCausedError: $sfErrors")
            sfErrors match {
              case Nil =>
                ApiGatewayResponse.messageResponse("500", "Salesforce error response didn't contain any detail")
              case sfError :: Nil =>
                ApiGatewayResponse.messageResponse("500", sfError.toString)
              case sfErrors =>
                val error =
                  sfErrors.groupBy(_.errorCode).view.mapValues(_.map(_.message)).mkString.take(errorCharacterLimit)
                ApiGatewayResponse.messageResponse("500", error)
            }
          case Failure(exception) =>
            logger.warn("could not parse salesforce error as SalesforceErrorResponseBody", exception)
            logger.error(s"Failed to $action using input $inputThatCausedError: ${error4xx.body}")
            ApiGatewayResponse.messageResponse("500", "internal server error, check the logs for information")
        }
      case otherFailure =>
        logger.error(s"Failed to $action using input $inputThatCausedError: $otherFailure")
        ApiGatewayResponse.messageResponse("500", "internal server error, check the logs for information")
    }