Fallback route

This commit is contained in:
jay-tux 2025-04-21 22:40:59 +02:00
parent 9279e1b776
commit 04d97eb4f8
Signed by: jay-tux
GPG Key ID: 84302006B056926E
4 changed files with 26 additions and 3 deletions

View File

@ -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()
}

View File

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

View File

@ -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
@ -64,3 +65,13 @@ fun Application.configureRouting() {
installDetails()
}
}
fun Application.configureFallback() {
routing {
route("{...}") {
handle {
call.respond(HttpStatusCode.NotFound, ErrorResponse("Endpoint not found: ${call.request.httpMethod.value} ${call.request.path()}"))
}
}
}
}

View File

@ -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())
}