From eba022a416040401e22a2e3ddeb2bd456c1d9cbc Mon Sep 17 00:00:00 2001 From: Markus Johansen Date: Tue, 11 Jul 2023 12:10:32 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Utvidet=20feilmelding=20klasse=20og?= =?UTF-8?q?=20lagde=20serialisering=20for=20LocalDate=20med=20KotlinX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sindre Kjelsrud Co-authored-by: Amalie Mansåker --- .../main/kotlin/no/nav/helse/sprik/Feil.kt | 13 ------- .../no/nav/helse/sprik/modell/Feilmelding.kt | 37 +++++++++++++++++++ .../no/nav/helse/sprik/plugins/Routing.kt | 4 +- .../sprik/serializers/AsStringsSerializer.kt | 27 ++++++++++++++ .../sprik/serializers/LocaDateSerializer.kt | 8 ++++ 5 files changed, 74 insertions(+), 15 deletions(-) delete mode 100644 backend/src/main/kotlin/no/nav/helse/sprik/Feil.kt create mode 100644 backend/src/main/kotlin/no/nav/helse/sprik/modell/Feilmelding.kt create mode 100644 backend/src/main/kotlin/no/nav/helse/sprik/serializers/AsStringsSerializer.kt create mode 100644 backend/src/main/kotlin/no/nav/helse/sprik/serializers/LocaDateSerializer.kt diff --git a/backend/src/main/kotlin/no/nav/helse/sprik/Feil.kt b/backend/src/main/kotlin/no/nav/helse/sprik/Feil.kt deleted file mode 100644 index 57e1037..0000000 --- a/backend/src/main/kotlin/no/nav/helse/sprik/Feil.kt +++ /dev/null @@ -1,13 +0,0 @@ -package no.nav.helse.sprik - -import kotlinx.serialization.Serializable - -@Serializable -data class Feil( - val tittel: String, - val beskrivelse: String, -) { - override fun toString(): String { - return "Feil(${tittel}\n${beskrivelse})" - } -} diff --git a/backend/src/main/kotlin/no/nav/helse/sprik/modell/Feilmelding.kt b/backend/src/main/kotlin/no/nav/helse/sprik/modell/Feilmelding.kt new file mode 100644 index 0000000..ebf241d --- /dev/null +++ b/backend/src/main/kotlin/no/nav/helse/sprik/modell/Feilmelding.kt @@ -0,0 +1,37 @@ +@file:UseSerializers( + LocalDateSerializer::class +) + +package no.nav.helse.sprik.modell +import kotlinx.serialization.Serializable +import kotlinx.serialization.UseSerializers +import no.nav.helse.sprik.serializers.LocalDateSerializer +import java.time.LocalDate + + + + +/** + * Objekt for feilmeldinger i Sprik + * */ +@Serializable +class Feilmelding( + val tittel: String, + val beskrivelse: String, + @Serializable(LocalDateSerializer::class) + val dato: LocalDate? = null, //Krever en spesiallaget serialiserer i KotlinX + val tags: ArrayList = arrayListOf() + //val bilde: String, +) { + fun addTag(tagText: String){ + tags.add(tagText) + } + + fun removeTag(tagText: String){ + tags.removeAt(tags.indexOf(tagText)) + } + + override fun toString(): String { + return "Feilmelding(\n${tittel}\n${beskrivelse}\n)" + } +} diff --git a/backend/src/main/kotlin/no/nav/helse/sprik/plugins/Routing.kt b/backend/src/main/kotlin/no/nav/helse/sprik/plugins/Routing.kt index e60a50f..6e6d0c1 100644 --- a/backend/src/main/kotlin/no/nav/helse/sprik/plugins/Routing.kt +++ b/backend/src/main/kotlin/no/nav/helse/sprik/plugins/Routing.kt @@ -10,8 +10,8 @@ import io.ktor.server.cio.* import io.ktor.server.engine.* import io.ktor.server.plugins.cors.routing.* import io.ktor.server.request.* -import no.nav.helse.sprik.Feil import no.nav.helse.sprik.Test +import no.nav.helse.sprik.modell.Feilmelding fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngineEnvironment { module { @@ -33,7 +33,7 @@ fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngin call.respond(status = HttpStatusCode.Created, message = test) } post("/nyFeil") { - val test = call.receive() + val test = call.receive() println(test) call.respond(status = HttpStatusCode.Created, message = test) } diff --git a/backend/src/main/kotlin/no/nav/helse/sprik/serializers/AsStringsSerializer.kt b/backend/src/main/kotlin/no/nav/helse/sprik/serializers/AsStringsSerializer.kt new file mode 100644 index 0000000..4b9d674 --- /dev/null +++ b/backend/src/main/kotlin/no/nav/helse/sprik/serializers/AsStringsSerializer.kt @@ -0,0 +1,27 @@ +package no.nav.helse.sprik.serializers +import java.util.Date +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerializationException +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +abstract class AsStringSerializer( + serialName: String, + private val parse: (String) -> T +) : KSerializer{ + +override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor(serialName, PrimitiveKind.STRING) + +override fun serialize(encoder: Encoder, value: T) { + value.toString().let(encoder::encodeString) +} + +override fun deserialize(decoder: Decoder): T = + decoder.decodeString() + .runCatching(parse) + .getOrElse { throw SerializationException(it) } +} diff --git a/backend/src/main/kotlin/no/nav/helse/sprik/serializers/LocaDateSerializer.kt b/backend/src/main/kotlin/no/nav/helse/sprik/serializers/LocaDateSerializer.kt new file mode 100644 index 0000000..831e9a2 --- /dev/null +++ b/backend/src/main/kotlin/no/nav/helse/sprik/serializers/LocaDateSerializer.kt @@ -0,0 +1,8 @@ +package no.nav.helse.sprik.serializers + +import java.time.LocalDate + +object LocalDateSerializer : AsStringSerializer( + serialName = "Sprik.kotlinx.LocalDateSerializer", + parse = LocalDate::parse +) \ No newline at end of file