Utvidet feilmelding klasse og lagde serialisering for LocalDate med KotlinX

Co-authored-by: Sindre Kjelsrud <sindre.kjelsrud@nav.no>
Co-authored-by: Amalie Mansåker <amalie.erdal.mansaker@nav.no>
This commit is contained in:
Markus Johansen 2023-07-11 12:10:32 +02:00
parent c64a533786
commit eba022a416
5 changed files with 74 additions and 15 deletions

View file

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

View file

@ -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<String> = arrayListOf<String>()
//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)"
}
}

View file

@ -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<Feil>()
val test = call.receive<Feilmelding>()
println(test)
call.respond(status = HttpStatusCode.Created, message = test)
}

View file

@ -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<T : Any>(
serialName: String,
private val parse: (String) -> T
) : KSerializer<T>{
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) }
}

View file

@ -0,0 +1,8 @@
package no.nav.helse.sprik.serializers
import java.time.LocalDate
object LocalDateSerializer : AsStringSerializer<LocalDate>(
serialName = "Sprik.kotlinx.LocalDateSerializer",
parse = LocalDate::parse
)