From fe4800c5eee5816dcd411f23b44776a023ff522f Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Thu, 19 Oct 2023 10:42:29 +0200 Subject: [PATCH] Terminate med fail-objekt --- .../inntektsmelding/brospinn/SpinnService.kt | 10 ++++---- .../composite/CompositeEventListener.kt | 22 ++++++++--------- .../rapidsrivers/composite/Transaction.kt | 12 ++++++++-- .../innsending/InnsendingService.kt | 14 +++++------ .../innsending/KvitteringService.kt | 11 ++++----- .../inntektservice/InntektService.kt | 24 ++++++++----------- .../inntektservice/InntektServiceTest.kt | 4 ++-- .../notifikasjon/ManuellOpprettSakService.kt | 10 ++++---- .../notifikasjon/OpprettSak.kt | 12 +++++----- .../tilgangservice/TilgangService.kt | 20 +++++++--------- .../inntektservice/TilgangServiceTest.kt | 6 ++--- .../trengerservice/TrengerService.kt | 17 +++++++------ 12 files changed, 79 insertions(+), 83 deletions(-) diff --git a/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt b/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt index fe28db598..e36a39435 100644 --- a/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt +++ b/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt @@ -6,6 +6,7 @@ import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.DataFelt import no.nav.helsearbeidsgiver.felles.EksternInntektsmelding import no.nav.helsearbeidsgiver.felles.EventName +import no.nav.helsearbeidsgiver.felles.Fail import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.createFail import no.nav.helsearbeidsgiver.felles.json.les @@ -82,7 +83,7 @@ class SpinnService( Log.forespoerselId(forespoerselId) ) { sikkerLogger.info("Prosesserer transaksjon $transaction.") - if (transaction == Transaction.NEW) { + if (transaction is Transaction.New) { rapid.publish( Key.EVENT_NAME to event.toJson(), Key.BEHOV to BehovType.HENT_EKSTERN_INNTEKTSMELDING.toJson(), @@ -141,12 +142,9 @@ class SpinnService( } } - override fun terminate(message: JsonMessage) { - val json = message.toJsonMap() - val transaksjonId = Key.UUID.les(UuidSerializer, json) - + override fun terminate(fail: Fail) { MdcUtils.withLogFields( - Log.transaksjonId(transaksjonId) + Log.transaksjonId(fail.uuid.let(UUID::fromString)) ) { sikkerLogger.error("$event terminert.") } diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt index ef28a7af6..ebcfc89f3 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt @@ -27,14 +27,14 @@ abstract class CompositeEventListener(open val redisStore: IRedisStore) : River. val transaction: Transaction = determineTransactionState(packet) when (transaction) { - Transaction.NEW -> { + is Transaction.New -> { initialTransactionState(packet) dispatchBehov(packet, transaction) } - Transaction.IN_PROGRESS -> dispatchBehov(packet, transaction) - Transaction.FINALIZE -> finalize(packet) - Transaction.TERMINATE -> terminate(packet) - Transaction.NOT_ACTIVE -> return + is Transaction.InProgress -> dispatchBehov(packet, transaction) + is Transaction.Finalize -> finalize(packet) + is Transaction.Terminate -> terminate(transaction.fail) + is Transaction.NotActive -> return } } @@ -53,7 +53,7 @@ abstract class CompositeEventListener(open val redisStore: IRedisStore) : River. return when { value.isNullOrEmpty() -> { if (!isEventMelding(message)) { - Transaction.NOT_ACTIVE + Transaction.NotActive } else { val clientId = message[Key.CLIENT_ID.str] .takeUnless(JsonNode::isMissingOrNull) @@ -62,11 +62,11 @@ abstract class CompositeEventListener(open val redisStore: IRedisStore) : River. redisStore.set(eventKey, clientId) - Transaction.NEW + Transaction.New } } - isDataCollected(transactionId) -> Transaction.FINALIZE - else -> Transaction.IN_PROGRESS + isDataCollected(transactionId) -> Transaction.Finalize + else -> Transaction.InProgress } } @@ -93,11 +93,11 @@ abstract class CompositeEventListener(open val redisStore: IRedisStore) : River. abstract fun dispatchBehov(message: JsonMessage, transaction: Transaction) abstract fun finalize(message: JsonMessage) - abstract fun terminate(message: JsonMessage) + abstract fun terminate(fail: Fail) open fun initialTransactionState(message: JsonMessage) {} open fun onError(feil: Fail): Transaction { - return Transaction.TERMINATE + return Transaction.Terminate(feil) } fun withFailKanal(failKanalSupplier: (t: CompositeEventListener) -> FailKanal): CompositeEventListener { diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/Transaction.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/Transaction.kt index 8da8dd476..4f7d1e351 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/Transaction.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/Transaction.kt @@ -1,5 +1,13 @@ package no.nav.helsearbeidsgiver.felles.rapidsrivers.composite -enum class Transaction { - NEW, IN_PROGRESS, FINALIZE, TERMINATE, NOT_ACTIVE +import no.nav.helsearbeidsgiver.felles.Fail + +sealed class Transaction { + data object New : Transaction() + data object InProgress : Transaction() + data object Finalize : Transaction() + data object NotActive : Transaction() + data class Terminate( + val fail: Fail + ) : Transaction() } diff --git a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt index 097be5865..7b1acdc86 100644 --- a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt +++ b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt @@ -71,25 +71,25 @@ class InnsendingService( if (feil.behov == BehovType.VIRKSOMHET) { val virksomhetKey = "${feil.uuid}${DataFelt.VIRKSOMHET}" redisStore.set(virksomhetKey, "Ukjent virksomhet") - return Transaction.IN_PROGRESS + return Transaction.InProgress } else if (feil.behov == BehovType.FULLT_NAVN) { val arbeidstakerFulltnavnKey = "${feil.uuid}${DataFelt.ARBEIDSTAKER_INFORMASJON.str}" val arbeidsgiverFulltnavnKey = "${feil.uuid}${DataFelt.ARBEIDSGIVER_INFORMASJON.str}" redisStore.set(arbeidstakerFulltnavnKey, personIkkeFunnet().toJsonStr(PersonDato.serializer())) redisStore.set(arbeidsgiverFulltnavnKey, personIkkeFunnet().toJsonStr(PersonDato.serializer())) - return Transaction.IN_PROGRESS + return Transaction.InProgress } - return Transaction.TERMINATE + return Transaction.Terminate(feil) } - override fun terminate(message: JsonMessage) { - redisStore.set(message[Key.UUID.str].asText(), message[Key.FAIL.str].asText()) + override fun terminate(fail: Fail) { + redisStore.set(fail.uuid!!, fail.feilmelding) } override fun dispatchBehov(message: JsonMessage, transaction: Transaction) { val uuid: String = message[Key.UUID.str].asText() when (transaction) { - Transaction.NEW -> { + is Transaction.New -> { logger.info("InnsendingService: emitting behov Virksomhet") rapid.publish( Key.EVENT_NAME to event.toJson(), @@ -116,7 +116,7 @@ class InnsendingService( ) } - Transaction.IN_PROGRESS -> { + is Transaction.InProgress -> { if (isDataCollected(*step1data(message[Key.UUID.str].asText()))) { val arbeidstakerRedis = redisStore.get(RedisKey.of(uuid, DataFelt.ARBEIDSTAKER_INFORMASJON), PersonDato::class.java) val arbeidsgiverRedis = redisStore.get(RedisKey.of(uuid, DataFelt.ARBEIDSGIVER_INFORMASJON), PersonDato::class.java) diff --git a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt index 23ee4a97f..7e7fc2693 100644 --- a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt +++ b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt @@ -7,6 +7,7 @@ import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.DataFelt import no.nav.helsearbeidsgiver.felles.EksternInntektsmelding import no.nav.helsearbeidsgiver.felles.EventName +import no.nav.helsearbeidsgiver.felles.Fail import no.nav.helsearbeidsgiver.felles.InnsendtInntektsmelding import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.rapidsrivers.DelegatingFailKanal @@ -46,7 +47,7 @@ class KvitteringService( override fun dispatchBehov(message: JsonMessage, transaction: Transaction) { val transactionId: String = message[Key.UUID.str].asText() - if (transaction == Transaction.NEW) { + if (transaction is Transaction.New) { val forespoerselId: String = message[Key.FORESPOERSEL_ID.str].asText() logger.info("Sender event: ${event.name} for forespørsel $forespoerselId") val msg = JsonMessage.newMessage( @@ -77,10 +78,8 @@ class KvitteringService( redisStore.set(clientId!!, im) } - override fun terminate(message: JsonMessage) { - val transaksjonsId = message[Key.UUID.str].asText() - val forespoerselId = message[Key.FORESPOERSEL_ID.str].asText() - logger.info("Terminate kvittering med forespoerselId=$forespoerselId og transaksjonsId $transaksjonsId") - redisStore.set(transaksjonsId, message[Key.FAIL.str].asText()) + override fun terminate(fail: Fail) { + logger.info("Terminate kvittering med forespoerselId=${fail.forespørselId} og transaksjonsId ${fail.uuid}") + redisStore.set(fail.uuid!!, fail.feilmelding) } } diff --git a/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt b/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt index fc1e2fb4c..22ae3c66e 100644 --- a/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt +++ b/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt @@ -87,7 +87,7 @@ class InntektService( sikkerLogger.info("Prosesserer transaksjon $transaction.") when (transaction) { - Transaction.NEW -> { + is Transaction.New -> { rapid.publish( Key.EVENT_NAME to event.toJson(), Key.BEHOV to BehovType.HENT_TRENGER_IM.toJson(), @@ -103,7 +103,7 @@ class InntektService( } } - Transaction.IN_PROGRESS -> { + is Transaction.InProgress -> { val forspoerselKey = RedisKey.of(transaksjonId.toString(), DataFelt.FORESPOERSEL_SVAR) if (isDataCollected(forspoerselKey)) { @@ -173,19 +173,15 @@ class InntektService( } } - override fun terminate(message: JsonMessage) { - val json = message.toJsonMap() - - val transaksjonId = Key.UUID.les(UuidSerializer, json) - - val clientId = RedisKey.of(transaksjonId.toString(), event) + override fun terminate(fail: Fail) { + val clientId = RedisKey.of(fail.uuid!!, event) .read() ?.let(UUID::fromString) if (clientId == null) { - sikkerLogger.error("Forsøkte å terminere, men fant ikke clientID for transaksjon $transaksjonId i Redis") - logger.error("Forsøkte å terminere, men fant ikke clientID for transaksjon $transaksjonId i Redis") + sikkerLogger.error("Forsøkte å terminere, men fant ikke clientID for transaksjon ${fail.uuid} i Redis") + logger.error("Forsøkte å terminere, men fant ikke clientID for transaksjon ${fail.uuid} i Redis") } - val feil = RedisKey.of(transaksjonId.toString(), Feilmelding("")).read() + val feil = RedisKey.of(fail.uuid!!, Feilmelding("")).read() val feilResponse = InntektData( feil = feil?.fromJson(FeilReport.serializer()) @@ -193,7 +189,7 @@ class InntektService( .toJson(InntektData.serializer()) RedisKey.of(clientId.toString()).write(feilResponse) - val logFields = loggFelterNotNull(transaksjonId, clientId) + val logFields = loggFelterNotNull(fail.uuid.let(UUID::fromString), clientId) MdcUtils.withLogFields( *logFields ) { @@ -208,7 +204,7 @@ class InntektService( BehovType.HENT_TRENGER_IM -> { val feilmelding = Feilmelding("Teknisk feil, prøv igjen senere.", -1, DataFelt.FORESPOERSEL_SVAR) - feilmelding to Transaction.TERMINATE + feilmelding to Transaction.Terminate(feil) } BehovType.INNTEKT -> { val feilmelding = Feilmelding( @@ -239,7 +235,7 @@ class InntektService( feilKey.write(feilReport) } - return transaction ?: Transaction.IN_PROGRESS + return transaction ?: Transaction.InProgress } private fun publishFail(fail: Fail) { diff --git a/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt b/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt index f2bae84e0..2835c0aee 100644 --- a/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt +++ b/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt @@ -27,7 +27,7 @@ class InntektServiceTest { forespørselId = null ) val transaction = service.onError(feil) - assertEquals(Transaction.IN_PROGRESS, transaction) - service.terminate(feil.toJsonMessage()) // skal ikke kaste exception.. + assertEquals(Transaction.InProgress, transaction) + service.terminate(feil) // skal ikke kaste exception.. } } diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt index bc88d3182..301fc14af 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt @@ -54,7 +54,7 @@ class ManuellOpprettSakService(private val rapidsConnection: RapidsConnection, o override fun dispatchBehov(message: JsonMessage, transaction: Transaction) { val transaksjonsId = message[Key.UUID.str].asText() val forespoerselId = redisStore.get(transaksjonsId + Key.FORESPOERSEL_ID.str)!! - if (transaction == Transaction.NEW) { + if (transaction is Transaction.New) { rapidsConnection.publish( JsonMessage.newMessage( mapOf( @@ -65,7 +65,7 @@ class ManuellOpprettSakService(private val rapidsConnection: RapidsConnection, o ) ).toJson() ) - } else if (transaction == Transaction.IN_PROGRESS) { + } else if (transaction is Transaction.InProgress) { val forespoersel = redisStore.get(transaksjonsId + DataFelt.FORESPOERSEL_SVAR.str)?.fromJson(TrengerInntekt.serializer()) if (forespoersel == null) { @@ -147,13 +147,13 @@ class ManuellOpprettSakService(private val rapidsConnection: RapidsConnection, o ) } - override fun terminate(message: JsonMessage) { - sikkerLogger.error("Terminerer flyt med transaksjon-ID '${message[Key.UUID.str].asText()}'") + override fun terminate(fail: Fail) { + sikkerLogger.error("Terminerer flyt med transaksjon-ID '${fail.uuid}'") } override fun onError(feil: Fail): Transaction { sikkerLogger.error("Mottok feil:\n$feil") - return Transaction.TERMINATE + return Transaction.Terminate(feil) } private fun steg2(transactionId: String) = arrayOf(RedisKey.of(transactionId, DataFelt.FORESPOERSEL_SVAR)) diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSak.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSak.kt index f7ca71228..4310ee35f 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSak.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSak.kt @@ -44,7 +44,7 @@ class OpprettSak(private val rapidsConnection: RapidsConnection, override val re override fun dispatchBehov(message: JsonMessage, transaction: Transaction) { val transaksjonsId = message[Key.UUID.str].asText() val forespørselId = redisStore.get(transaksjonsId + Key.FORESPOERSEL_ID.str)!! - if (transaction == Transaction.NEW) { + if (transaction is Transaction.New) { rapidsConnection.publish( JsonMessage.newMessage( mapOf( @@ -57,7 +57,7 @@ class OpprettSak(private val rapidsConnection: RapidsConnection, override val re ) ).toJson() ) - } else if (transaction == Transaction.IN_PROGRESS) { + } else if (transaction is Transaction.InProgress) { if (isDataCollected(*steg3(transaksjonsId))) { rapidsConnection.publish( JsonMessage.newMessage( @@ -102,17 +102,17 @@ class OpprettSak(private val rapidsConnection: RapidsConnection, override val re ) } - override fun terminate(message: JsonMessage) { - redisStore.set(message[Key.UUID.str].asText(), message[Key.FAIL.str].asText()) + override fun terminate(fail: Fail) { + redisStore.set(fail.uuid!!, fail.feilmelding) } override fun onError(feil: Fail): Transaction { if (feil.behov == BehovType.FULLT_NAVN) { val fulltNavnKey = "${feil.uuid}${DataFelt.ARBEIDSTAKER_INFORMASJON.str}" redisStore.set(fulltNavnKey, PersonDato("Ukjent person", null, "").toJsonStr(PersonDato.serializer())) - return Transaction.IN_PROGRESS + return Transaction.InProgress } - return Transaction.TERMINATE + return Transaction.Terminate(feil) } fun steg2(transactionId: String) = arrayOf(RedisKey.of(transactionId, DataFelt.ARBEIDSTAKER_INFORMASJON)) diff --git a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt index 3cf666486..fc0dfbcae 100644 --- a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt +++ b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt @@ -79,7 +79,7 @@ class TilgangService( sikkerLogger.info("Prosesserer transaksjon $transaction.") when (transaction) { - Transaction.NEW -> { + is Transaction.New -> { rapid.publish( Key.EVENT_NAME to event.toJson(), Key.BEHOV to BehovType.HENT_IM_ORGNR.toJson(), @@ -95,7 +95,7 @@ class TilgangService( } } - Transaction.IN_PROGRESS -> { + is Transaction.InProgress -> { val orgnrKey = RedisKey.of(transaksjonId.toString(), DataFelt.ORGNRUNDERENHET) if (isDataCollected(orgnrKey)) { @@ -168,16 +168,12 @@ class TilgangService( } } - override fun terminate(message: JsonMessage) { - val json = message.toJsonMap() - - val transaksjonId = Key.UUID.les(UuidSerializer, json) - - val clientId = RedisKey.of(transaksjonId.toString(), event) + override fun terminate(fail: Fail) { + val clientId = RedisKey.of(fail.uuid!!, event) .read() ?.let(UUID::fromString) - val feil = RedisKey.of(transaksjonId.toString(), Feilmelding("")) + val feil = RedisKey.of(fail.uuid!!, Feilmelding("")) .read() val feilResponse = TilgangData( @@ -185,11 +181,11 @@ class TilgangService( ) .toJson(TilgangData.serializer()) if (clientId == null) { - sikkerLogger.error("$event forsøkt terminert, kunne ikke finne $transaksjonId i redis!") + sikkerLogger.error("$event forsøkt terminert, kunne ikke finne ${fail.uuid} i redis!") } RedisKey.of(clientId.toString()).write(feilResponse) - val logFields = loggFelterNotNull(transaksjonId, clientId) + val logFields = loggFelterNotNull(fail.uuid!!.let(UUID::fromString), clientId) MdcUtils.withLogFields( *logFields ) { @@ -224,7 +220,7 @@ class TilgangService( feilKey.write(feilReport) } - return Transaction.TERMINATE + return Transaction.Terminate(feil) } private fun RedisKey.write(json: JsonElement) { diff --git a/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt b/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt index a55215697..978f71693 100644 --- a/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt +++ b/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt @@ -7,7 +7,7 @@ import no.nav.helsearbeidsgiver.felles.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore import no.nav.helsearbeidsgiver.inntektsmelding.tilgangservice.TilgangService -import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import java.util.UUID @@ -33,7 +33,7 @@ class TilgangServiceTest { forespørselId = null ) val transaction = service.onError(feil) - assertEquals(Transaction.TERMINATE, transaction) - service.terminate(feil.toJsonMessage()) + assertTrue(transaction is Transaction.Terminate) + service.terminate(feil) } } diff --git a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt index beed830ee..549533871 100644 --- a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt +++ b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt @@ -73,7 +73,7 @@ class TrengerService(private val rapidsConnection: RapidsConnection, override va val feilReport: FeilReport = redisStore.get(feilKey)?.fromJson(FeilReport.serializer()) ?: FeilReport() feilReport.feil.add(feilmelding) redisStore.set(feilKey, feilReport.toJsonStr(FeilReport.serializer())) - return Transaction.TERMINATE + return Transaction.Terminate(feil) } else if (feil.behov == BehovType.VIRKSOMHET) { feilmelding = Feilmelding("Vi klarte ikke å hente virksomhet navn.", datafelt = DataFelt.VIRKSOMHET) redisStore.set(RedisKey.of(uuid, DataFelt.VIRKSOMHET), "Ukjent navn") @@ -94,13 +94,13 @@ class TrengerService(private val rapidsConnection: RapidsConnection, override va feilReport.feil.add(feilmelding) redisStore.set(feilKey, feilReport.toJsonStr(FeilReport.serializer())) } - return Transaction.IN_PROGRESS + return Transaction.InProgress } override fun dispatchBehov(message: JsonMessage, transaction: Transaction) { val uuid = message[Key.UUID.str].asText() sikkerLogger.info("Dispatcher for $uuid with trans state $transaction") - if (transaction == Transaction.NEW) { + if (transaction is Transaction.New) { sikkerLogger.info("Dispatcher HENT_TRENGER_IM for $uuid") sikkerLogger.info("${simpleName()} Dispatcher HENT_TRENGER_IM for $uuid") val agFnr = message[Key.ARBEIDSGIVER_ID.str].asText() @@ -111,7 +111,7 @@ class TrengerService(private val rapidsConnection: RapidsConnection, override va DataFelt.FORESPOERSEL_ID to redisStore.get(RedisKey.of(uuid, DataFelt.FORESPOERSEL_ID))!!.toJson(), Key.UUID to uuid.toJson() ) - } else if (transaction == Transaction.IN_PROGRESS) { + } else if (transaction is Transaction.InProgress) { message.interestedIn(DataFelt.FORESPOERSEL_SVAR.str) if (isDataCollected(*step1data(uuid)) && !message[DataFelt.FORESPOERSEL_SVAR.str].isMissingNode) { val forespoersel = redisStore.get(RedisKey.of(uuid, DataFelt.FORESPOERSEL_SVAR))!!.fromJson(TrengerInntekt.serializer()) @@ -193,12 +193,11 @@ class TrengerService(private val rapidsConnection: RapidsConnection, override va redisStore.set(RedisKey.of(clientId!!), json) } - override fun terminate(message: JsonMessage) { - val transactionId = message[Key.UUID.str].asText() - sikkerLogger.info("terminate transaction id $transactionId with evenname ${message[Key.EVENT_NAME.str].asText()}") - val clientId: String? = redisStore.get(RedisKey.of(transactionId, EventName.valueOf(message[Key.EVENT_NAME.str].asText()))) + override fun terminate(fail: Fail) { + sikkerLogger.info("terminate transaction id ${fail.uuid} with evenname ${fail.eventName}") + val clientId: String? = redisStore.get(RedisKey.of(fail.uuid!!, fail.eventName!!)) // @TODO kan vare smartere her. Kan definere feilmeldingen i Feil message istedenfor å hardkode det i TrengerService. Vi også ikke trenger å sende alle andre ikke kritiske feilmeldinger hvis vi har noe kritisk - val feilReport: FeilReport = redisStore.get(RedisKey.of(uuid = transactionId, Feilmelding("")))!!.fromJson(FeilReport.serializer()) + val feilReport: FeilReport = redisStore.get(RedisKey.of(uuid = fail.uuid!!, Feilmelding("")))!!.fromJson(FeilReport.serializer()) if (clientId != null) { redisStore.set(RedisKey.of(clientId), TrengerData(feilReport = feilReport).toJsonStr(TrengerData.serializer())) }