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.Database
|
||||||
import com.jaytux.simd.data.Loader
|
import com.jaytux.simd.data.Loader
|
||||||
|
import com.jaytux.simd.server.configureFallback
|
||||||
import com.jaytux.simd.server.configureHTTP
|
import com.jaytux.simd.server.configureHTTP
|
||||||
import com.jaytux.simd.server.configureRouting
|
import com.jaytux.simd.server.configureRouting
|
||||||
import com.jaytux.simd.server.configureSerialization
|
import com.jaytux.simd.server.configureSerialization
|
||||||
|
@ -50,4 +51,6 @@ fun Application.module() {
|
||||||
configureSerialization()
|
configureSerialization()
|
||||||
configureHTTP()
|
configureHTTP()
|
||||||
configureRouting()
|
configureRouting()
|
||||||
|
|
||||||
|
configureFallback()
|
||||||
}
|
}
|
|
@ -85,8 +85,14 @@ fun Routing.installDetails() {
|
||||||
get("/details/{id}") {
|
get("/details/{id}") {
|
||||||
runCatching {
|
runCatching {
|
||||||
transaction {
|
transaction {
|
||||||
val id = call.parameters["id"]?.let { UUID.fromString(it) }
|
val id = call.parameters["id"]?.let {
|
||||||
?: throw HttpError("Missing or invalid ID")
|
try {
|
||||||
|
UUID.fromString(it)
|
||||||
|
}
|
||||||
|
catch(e: IllegalArgumentException) {
|
||||||
|
throw HttpError("Invalid UUID: $it")
|
||||||
|
}
|
||||||
|
} ?: throw HttpError("Missing or invalid ID")
|
||||||
val intrinsic = Intrinsic.findById(id)
|
val intrinsic = Intrinsic.findById(id)
|
||||||
?: throw HttpError("Unknown intrinsic: $id")
|
?: throw HttpError("Unknown intrinsic: $id")
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.jaytux.simd.data.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.server.application.*
|
import io.ktor.server.application.*
|
||||||
import io.ktor.server.plugins.autohead.*
|
import io.ktor.server.plugins.autohead.*
|
||||||
|
import io.ktor.server.request.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
@ -63,4 +64,14 @@ fun Application.configureRouting() {
|
||||||
installSearch()
|
installSearch()
|
||||||
installDetails()
|
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> {
|
object UUIDSerializer : KSerializer<UUID> {
|
||||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
|
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())
|
override fun serialize(encoder: Encoder, value: UUID) = encoder.encodeString(value.toString())
|
||||||
}
|
}
|
Loading…
Reference in New Issue