Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erstatt utdatert bruk av IKey (stammer fra Datafelt) #401

Merged
merged 2 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import no.nav.helsearbeidsgiver.felles.Arbeidsforhold
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.les
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.rapidsrivers.Loeser
import no.nav.helsearbeidsgiver.felles.rapidsrivers.demandValues
Expand All @@ -32,10 +33,10 @@ class ArbeidsforholdLoeser(
rapidsConnection: RapidsConnection,
private val aaregClient: AaregClient
) : Loeser(rapidsConnection) {

private val logger = logger()
private val sikkerLogger = sikkerLogger()

private val behovType = BehovType.ARBEIDSFORHOLD
private val requestLatency = Summary.build()
.name("simba_aareg_hent_arbeidsforhold_latency_seconds")
.help("aareg hent arbeidsforhold latency in seconds")
Expand All @@ -44,7 +45,7 @@ class ArbeidsforholdLoeser(
override fun accept(): River.PacketValidation =
River.PacketValidation {
it.demandValues(
Key.BEHOV to behovType.name
Key.BEHOV to BehovType.ARBEIDSFORHOLD.name
)
it.requireKeys(
Key.IDENTITETSNUMMER,
Expand All @@ -58,16 +59,17 @@ class ArbeidsforholdLoeser(
measureTimeMillis {
val transaksjonId = Key.UUID.les(UuidSerializer, json)
val identitetsnummer = Key.IDENTITETSNUMMER.les(String.serializer(), json)
val forespoerselId = Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, json)

logger.info("Løser behov $behovType med transaksjon-ID $transaksjonId")
logger.info("Løser behov ${BehovType.ARBEIDSFORHOLD} med transaksjon-ID $transaksjonId")

val arbeidsforhold = hentArbeidsforhold(identitetsnummer, transaksjonId)

if (arbeidsforhold != null) {
rapidsConnection.publishData(
eventName = behov.event,
transaksjonId = transaksjonId,
forespoerselId = behov.forespoerselId?.let(UUID::fromString),
forespoerselId = forespoerselId,
Key.ARBEIDSFORHOLD to arbeidsforhold.toJson(Arbeidsforhold.serializer())
)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ import io.mockk.coEvery
import io.mockk.coVerifySequence
import io.mockk.mockk
import kotlinx.serialization.UseSerializers
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.json.JsonElement
import no.nav.helse.rapids_rivers.testsupport.TestRapid
import no.nav.helsearbeidsgiver.aareg.AaregClient
import no.nav.helsearbeidsgiver.felles.Arbeidsforhold
Expand All @@ -29,7 +27,6 @@ import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson
import no.nav.helsearbeidsgiver.inntektsmelding.aareg.ArbeidsforholdLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.aareg.tilArbeidsforhold
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.fromJsonMapFiltered
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
import java.util.UUID
Expand Down Expand Up @@ -91,12 +88,7 @@ class ArbeidsforholdLoeserTest : FunSpec({
event = event,
transaksjonId = transaksjonId,
forespoerselId = forespoerselId,
utloesendeMelding = innkommendeMelding.toJson(
MapSerializer(
Key.serializer(),
JsonElement.serializer()
)
)
utloesendeMelding = innkommendeMelding.toJson()
)

coEvery { mockAaregClient.hentArbeidsforhold(any(), any()) } throws RuntimeException()
Expand All @@ -112,7 +104,7 @@ class ArbeidsforholdLoeserTest : FunSpec({
val fail = testRapid.firstMessage().readFail()

fail.shouldBeEqualToIgnoringFields(expected, Fail::utloesendeMelding)
fail.utloesendeMelding.fromJsonMapFiltered(Key.serializer()) shouldContainAll innkommendeMelding
fail.utloesendeMelding.toMap() shouldContainAll innkommendeMelding
}
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,12 +208,7 @@ class AktiveOrgnrService(
event = event,
transaksjonId = transaksjonId,
forespoerselId = null,
utloesendeMelding = toJson(
MapSerializer(
Key.serializer(),
JsonElement.serializer()
)
)
utloesendeMelding = toJson()
)

private fun trekkUtArbeidsforhold(arbeidsforholdListe: List<Arbeidsforhold>?, orgrettigheter: Set<String>?): Result<List<String>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.altinn.AltinnClient
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.IKey
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.krev
import no.nav.helsearbeidsgiver.felles.json.les
Expand All @@ -29,15 +28,15 @@ class AltinnLoeser(
private val altinnClient: AltinnClient
) : ObjectRiver<Melding>() {

override fun les(json: Map<IKey, JsonElement>): Melding =
override fun les(json: Map<Key, JsonElement>): Melding =
Melding(
eventName = Key.EVENT_NAME.les(EventName.serializer(), json),
transactionId = Key.UUID.les(UuidSerializer, json),
behovType = Key.BEHOV.krev(BehovType.ARBEIDSGIVERE, BehovType.serializer(), json),
identitetsnummer = Key.IDENTITETSNUMMER.les(String.serializer(), json)
)

override fun Melding.haandter(): Map<IKey, JsonElement> {
override fun Melding.haandter(): Map<Key, JsonElement> {
val rettigheterForenklet =
Metrics.altinnRequest.recordTime {
altinnClient
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import no.nav.helse.rapids_rivers.RapidsConnection
import no.nav.helse.rapids_rivers.River
import no.nav.helsearbeidsgiver.altinn.AltinnClient
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.IKey
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.Tilgang
import no.nav.helsearbeidsgiver.felles.json.les
Expand Down Expand Up @@ -70,7 +69,7 @@ class TilgangLoeser(
}
}

private fun hentTilgang(behov: Behov, json: Map<IKey, JsonElement>, transaksjonId: UUID) {
private fun hentTilgang(behov: Behov, json: Map<Key, JsonElement>, transaksjonId: UUID) {
val fnr = Key.FNR.les(String.serializer(), json)
val orgnr = Key.ORGNRUNDERENHET.les(String.serializer(), json)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,11 @@ import io.mockk.coVerify
import io.mockk.coVerifySequence
import io.mockk.mockk
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helse.rapids_rivers.testsupport.TestRapid
import no.nav.helsearbeidsgiver.altinn.AltinnClient
import no.nav.helsearbeidsgiver.altinn.AltinnOrganisasjon
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.IKey
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
Expand Down Expand Up @@ -43,7 +41,7 @@ class AltinnLoeserTest : FunSpec({
val mockId = "long-john-silver"
val mockUuid = randomUuid()

val expectedPublished = mapOf<IKey, JsonElement>(
val expectedPublished = mapOf(
Key.DATA to "".toJson(),
Key.UUID to mockUuid.toJson(),
Key.ORG_RETTIGHETER to mockAltinnOrganisasjonSet().mapNotNull { it.orgnr }.toSet().toJson(String.serializer().set())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ package no.nav.helsearbeidsgiver.inntektsmelding.brreg

import io.prometheus.client.Summary
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer
import no.nav.helse.rapids_rivers.RapidsConnection
import no.nav.helse.rapids_rivers.River
import no.nav.helsearbeidsgiver.brreg.BrregClient
import no.nav.helsearbeidsgiver.brreg.Virksomhet
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.rapidsrivers.Loeser
import no.nav.helsearbeidsgiver.felles.rapidsrivers.demandValues
Expand Down Expand Up @@ -108,7 +107,7 @@ class VirksomhetLoeser(
transaksjonId = transaksjonId,
forespoerselId = behov.forespoerselId?.let(UUID::fromString),
Key.VIRKSOMHET to navnListe.values.first().toJson(),
Key.VIRKSOMHETER to navnListe.toJson(MapSerializer(String.serializer(), String.serializer()))
Key.VIRKSOMHETER to navnListe.toJson()
)
} catch (ex: FantIkkeVirksomhetException) {
logger.error("Fant ikke virksomhet for $orgnr")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.ModelUtils.toFailOrNull
import no.nav.helsearbeidsgiver.felles.rapidsrivers.toPretty
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.fromJsonMapFiltered
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.log.sikkerLogger

Expand Down Expand Up @@ -46,7 +45,7 @@ class FeilLytter(rapidsConnection: RapidsConnection, private val repository: Bak

override fun onPacket(packet: JsonMessage, context: MessageContext) {
sikkerLogger.info("Mottok feil: ${packet.toPretty()}")
val fail = toFailOrNull(packet.toJson().parseJson().fromJsonMapFiltered(Key.serializer()))
val fail = toFailOrNull(packet.toJson().parseJson().toMap())
if (skalHaandteres(fail)) {
sikkerLogger.info("Lagrer mottatt pakke!")
val jobb = Bakgrunnsjobb(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package no.nav.helsearbeidsgiver.felles.json

import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.nullable
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.IKey
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.Pri
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.fromJsonMapFiltered
import no.nav.helsearbeidsgiver.utils.json.toJson
Expand All @@ -18,14 +19,26 @@ fun EventName.toJson(): JsonElement =
fun BehovType.toJson(): JsonElement =
toJson(BehovType.serializer())

fun JsonElement.toMap(): Map<IKey, JsonElement> =
listOf(
Key.serializer(),
Pri.Key.serializer()
@JvmName("toJsonMapKeyStringValueString")
fun Map<String, String>.toJson(): JsonElement =
toJson(
MapSerializer(
String.serializer(),
String.serializer()
)
)
.fold(emptyMap()) { jsonMap, keySerializer ->
jsonMap + fromJsonMapFiltered(keySerializer)
}

@JvmName("toJsonMapKeyKeyValueJsonElement")
fun Map<Key, JsonElement>.toJson(): JsonElement =
toJson(
MapSerializer(
Key.serializer(),
JsonElement.serializer()
)
)

fun JsonElement.toMap(): Map<Key, JsonElement> =
fromJsonMapFiltered(Key.serializer())

fun <K : IKey, T : Any> K.lesOrNull(serializer: KSerializer<T>, melding: Map<K, JsonElement>): T? =
melding[this]?.fromJson(serializer.nullable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package no.nav.helsearbeidsgiver.felles.loeser

import kotlinx.serialization.json.JsonElement
import no.nav.helse.rapids_rivers.RapidsConnection
import no.nav.helsearbeidsgiver.felles.IKey
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.utils.log.logger
import no.nav.helsearbeidsgiver.utils.log.sikkerLogger

Expand All @@ -29,14 +29,14 @@ import no.nav.helsearbeidsgiver.utils.log.sikkerLogger
*
* class HobbitFoodRiver : ObjectRiver<LotrCharacter>() {
*
* override fun les(json: Map<IKey, JsonElement>): LotrCharacter =
* override fun les(json: Map<Key, JsonElement>): LotrCharacter =
* LotrCharacter(
* race = Key.RACE.krev(Race.HOBBIT, Race.serializer(), json),
* name = Key.NAME.les(String.serializer(), json),
* height = Key.HEIGHT.lesOrNull(Int.serializer(), json)
* )
*
* override fun LotrCharacter.haandter(): Map<IKey, JsonElement> {
* override fun LotrCharacter.haandter(): Map<Key, JsonElement> {
* val favouriteFood = when (name) {
* "Frodo" -> "\uD83C\uDF53"
* "Sam" -> "\uD83E\uDD54"
Expand Down Expand Up @@ -74,7 +74,7 @@ abstract class ObjectRiver<Melding : Any> {
*
* @return Verdi lest fra [json]. Brukes som input i [haandter].
*/
protected abstract fun les(json: Map<IKey, JsonElement>): Melding
protected abstract fun les(json: Map<Key, JsonElement>): Melding

/**
* Riverens hovedfunksjon. Agerer på innkommende melding.
Expand All @@ -86,7 +86,7 @@ abstract class ObjectRiver<Melding : Any> {
* Utgående melding som skal publiseres når innkommende melding er ferdig prosessert.
* Returneres '`null`' så vil ingen utgående melding publiseres.
*/
protected abstract fun Melding.haandter(): Map<IKey, JsonElement>?
protected abstract fun Melding.haandter(): Map<Key, JsonElement>?

/**
* Kalles ved exception under [haandter].
Expand All @@ -95,7 +95,7 @@ abstract class ObjectRiver<Melding : Any> {
* Utgående melding som skal publiseres når feil er ferdig prosessert.
* Default implementasjon returnerer '`null`', som betyr at ingen utgående melding publiseres.
*/
protected open fun Throwable.haandterFeil(json: Map<IKey, JsonElement>): Map<IKey, JsonElement>? {
protected open fun Throwable.haandterFeil(json: Map<Key, JsonElement>): Map<Key, JsonElement>? {
"Ukjent feil.".also {
logger.error(it)
sikkerLogger.error(it, this)
Expand All @@ -104,7 +104,7 @@ abstract class ObjectRiver<Melding : Any> {
}

/** Brukes av [OpenRiver]. */
internal fun lesOgHaandter(json: Map<IKey, JsonElement>): Map<IKey, JsonElement>? {
internal fun lesOgHaandter(json: Map<Key, JsonElement>): Map<Key, JsonElement>? {
val innkommende = runCatching { les(json) }.getOrNull()

val utgaaende = runCatching {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.helse.rapids_rivers.JsonMessage
import no.nav.helse.rapids_rivers.MessageContext
import no.nav.helse.rapids_rivers.MessageProblems
import no.nav.helsearbeidsgiver.felles.IKey
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.toJson
Expand Down Expand Up @@ -51,10 +52,10 @@ fun JsonMessage.interestedIn(vararg keys: IKey) {
interestedIn(*keysAsStr)
}

fun MessageContext.publish(vararg messageFields: Pair<IKey, JsonElement>): JsonElement =
fun MessageContext.publish(vararg messageFields: Pair<Key, JsonElement>): JsonElement =
publish(messageFields.toMap())

fun MessageContext.publish(messageFields: Map<IKey, JsonElement>): JsonElement =
fun MessageContext.publish(messageFields: Map<Key, JsonElement>): JsonElement =
messageFields
.mapKeys { (key, _) -> key.toString() }
.toJson()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import no.nav.helse.rapids_rivers.River
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.lesOrNull
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.ModelUtils.toFailOrNull
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.fromJsonMapFiltered
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toPretty
Expand All @@ -40,7 +40,7 @@ abstract class CompositeEventListener : River.PacketListener {
abstract fun onError(melding: Map<Key, JsonElement>, fail: Fail)

override fun onPacket(packet: JsonMessage, context: MessageContext) {
val melding = packet.toJson().parseJson().fromJsonMapFiltered(Key.serializer())
val melding = packet.toJson().parseJson().toMap()

if (Key.FORESPOERSEL_ID.lesOrNull(String.serializer(), melding).isNullOrEmpty()) {
logger.warn("Mangler forespørselId!")
Expand Down
Loading