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")
}