Add function to respond on BadRequest

This commit is contained in:
flecomte committed 2021-04-05 00:48:58 +02:00
1 parent ab418ae300
commit 3faf2e5f0d
1 file changed
+27
@@ -4,11 +4,14 @@ import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
import fr.dcproject.common.security.AccessDeniedException import fr.dcproject.common.security.AccessDeniedException
import fr.dcproject.component.auth.ForbiddenException import fr.dcproject.component.auth.ForbiddenException
import fr.dcproject.component.auth.user import fr.dcproject.component.auth.user
import io.konform.validation.ValidationResult
import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.features.StatusPages import io.ktor.features.StatusPages
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.response.respond import io.ktor.response.respond
import io.ktor.util.pipeline.PipelineContext
import java.util.concurrent.CompletionException import java.util.concurrent.CompletionException
class HttpError( 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 = { fun statusPagesInstallation(): StatusPages.Configuration.() -> Unit = {
exception<CompletionException> { e -> exception<CompletionException> { e ->
val parent = e.cause?.cause val parent = e.cause?.cause