1717package za .co .absa .statusboard .api .http
1818
1919import io .circe .generic .auto ._
20+ import org .slf4j .LoggerFactory
2021import sttp .model .StatusCode
2122import sttp .monad .MonadError
2223import sttp .tapir .DecodeResult
@@ -31,16 +32,21 @@ import za.co.absa.statusboard.model.ErrorResponse.BadRequestResponse
3132import zio .Task
3233
3334object DecodeFailureHandlerImpl extends DecodeFailureHandler [Task ] {
35+ private val logger = LoggerFactory .getLogger(getClass)
36+
3437 override def apply (ctx : DecodeFailureContext )(implicit monad : MonadError [Task ]): Task [Option [ValuedEndpointOutput [_]]] = {
3538 monad.unit(
3639 respond(ctx).map { case (sc, hs) =>
3740 val message = if (sc == StatusCode .Unauthorized ) " Unauthorized" else ctx.failure match {
3841 case DecodeResult .Missing => s " Decoding error - missing value. "
3942 case DecodeResult .Multiple (vs) => s " Decoding error - $vs. "
40- case DecodeResult .Error (original, _ ) => s " Decoding error for an input value ' $original'. "
43+ case DecodeResult .Error (original, errorMessage ) => s " Decoding error ' $errorMessage ' for an input value ' $original'. "
4144 case DecodeResult .Mismatch (_, actual) => s " Unexpected value ' $actual'. "
4245 case DecodeResult .InvalidValue (errors) => s " Validation error - $errors. "
4346 }
47+
48+ logger.error(s " Request decoding failed: $message" )
49+
4450 val errorResponse = BadRequestResponse (message)
4551 ValuedEndpointOutput (statusCode.and(headers).and(jsonBody[BadRequestResponse ]), (sc, hs, errorResponse))
4652 }
0 commit comments