From 3faf2e5f0d6de9149809017e0cf735d4c5bd06e0 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Mon, 5 Apr 2021 00:48:58 +0200 Subject: [PATCH] Add function to respond on BadRequest --- .../application/http/HttpStatusError.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/kotlin/fr/dcproject/application/http/HttpStatusError.kt b/src/main/kotlin/fr/dcproject/application/http/HttpStatusError.kt index 215add9..319c0ee 100644 --- a/src/main/kotlin/fr/dcproject/application/http/HttpStatusError.kt +++ b/src/main/kotlin/fr/dcproject/application/http/HttpStatusError.kt @@ -4,11 +4,14 @@ import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException import fr.dcproject.common.security.AccessDeniedException import fr.dcproject.component.auth.ForbiddenException import fr.dcproject.component.auth.user +import io.konform.validation.ValidationResult +import io.ktor.application.ApplicationCall import io.ktor.application.call import io.ktor.features.NotFoundException import io.ktor.features.StatusPages import io.ktor.http.HttpStatusCode import io.ktor.response.respond +import io.ktor.util.pipeline.PipelineContext import java.util.concurrent.CompletionException class HttpError( @@ -27,6 +30,30 @@ class HttpError( ) } +fun ValidationResult<*>.toOutput(): HttpError { + return HttpError( + HttpStatusCode.BadRequest, + invalidParams = this.errors.map { + HttpError.InvalidParam( + it.dataPath, + it.message + ) + } + ) +} + +suspend fun PipelineContext<*, ApplicationCall>.respondIfNotValid(validationResult: ValidationResult<*>): HttpError? { + if (validationResult.errors.size > 0) { + val out = validationResult.toOutput() + this.call.respond( + HttpStatusCode.BadRequest, + out + ) + return out + } + return null +} + fun statusPagesInstallation(): StatusPages.Configuration.() -> Unit = { exception { e -> val parent = e.cause?.cause