Fallback route
This commit is contained in:
parent
9279e1b776
commit
04d97eb4f8
|
@ -2,6 +2,7 @@ package com.jaytux.simd
|
|||
|
||||
import com.jaytux.simd.data.Database
|
||||
import com.jaytux.simd.data.Loader
|
||||
import com.jaytux.simd.server.configureFallback
|
||||
import com.jaytux.simd.server.configureHTTP
|
||||
import com.jaytux.simd.server.configureRouting
|
||||
import com.jaytux.simd.server.configureSerialization
|
||||
|
@ -50,4 +51,6 @@ fun Application.module() {
|
|||
configureSerialization()
|
||||
configureHTTP()
|
||||
configureRouting()
|
||||
|
||||
configureFallback()
|
||||
}
|
|
@ -85,8 +85,14 @@ fun Routing.installDetails() {
|
|||
get("/details/{id}") {
|
||||
runCatching {
|
||||
transaction {
|
||||
val id = call.parameters["id"]?.let { UUID.fromString(it) }
|
||||
?: throw HttpError("Missing or invalid ID")
|
||||
val id = call.parameters["id"]?.let {
|
||||
try {
|
||||
UUID.fromString(it)
|
||||
}
|
||||
catch(e: IllegalArgumentException) {
|
||||
throw HttpError("Invalid UUID: $it")
|
||||
}
|
||||
} ?: throw HttpError("Missing or invalid ID")
|
||||
val intrinsic = Intrinsic.findById(id)
|
||||
?: throw HttpError("Unknown intrinsic: $id")
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.jaytux.simd.data.*
|
|||
import io.ktor.http.*
|
||||
import io.ktor.server.application.*
|
||||
import io.ktor.server.plugins.autohead.*
|
||||
import io.ktor.server.request.*
|
||||
import io.ktor.server.response.*
|
||||
import io.ktor.server.routing.*
|
||||
import kotlinx.serialization.Serializable
|
||||
|
@ -63,4 +64,14 @@ fun Application.configureRouting() {
|
|||
installSearch()
|
||||
installDetails()
|
||||
}
|
||||
}
|
||||
|
||||
fun Application.configureFallback() {
|
||||
routing {
|
||||
route("{...}") {
|
||||
handle {
|
||||
call.respond(HttpStatusCode.NotFound, ErrorResponse("Endpoint not found: ${call.request.httpMethod.value} ${call.request.path()}"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,7 +22,10 @@ fun Application.configureSerialization() {
|
|||
object UUIDSerializer : KSerializer<UUID> {
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString())
|
||||
override fun deserialize(decoder: Decoder): UUID = try { UUID.fromString(decoder.decodeString()) }
|
||||
catch (e: IllegalArgumentException) {
|
||||
throw HttpError("Invalid UUID format")
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: UUID) = encoder.encodeString(value.toString())
|
||||
}
|
Loading…
Reference in New Issue