diff --git a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/App.kt b/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/App.kt index 9c6cebfff..d98717142 100644 --- a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/App.kt +++ b/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/App.kt @@ -22,9 +22,6 @@ fun RapidsConnection.createBrregRiver( isDevelopmentMode: Boolean, ): RapidsConnection = also { - logger.info("Starter ${VirksomhetLoeser::class.simpleName}... developmentMode: $isDevelopmentMode") - VirksomhetLoeser(this, brregClient, isDevelopmentMode) - logger.info("Starter ${HentVirksomhetNavnRiver::class.simpleName}... (isDevelopmentMode: $isDevelopmentMode)") HentVirksomhetNavnRiver(brregClient, isDevelopmentMode).connect(this) } diff --git a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/FantIkkeVirksomhetException.kt b/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/FantIkkeVirksomhetException.kt deleted file mode 100644 index dc2404cd1..000000000 --- a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/FantIkkeVirksomhetException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.brreg - -class FantIkkeVirksomhetException( - orgnr: String, -) : Exception("Fant ikke virksomhet for orgnr $orgnr") diff --git a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/VirksomhetLoeser.kt b/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/VirksomhetLoeser.kt deleted file mode 100644 index e0cdb8e50..000000000 --- a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/VirksomhetLoeser.kt +++ /dev/null @@ -1,127 +0,0 @@ -@file:Suppress("NonAsciiCharacters") - -package no.nav.helsearbeidsgiver.inntektsmelding.brreg - -import io.prometheus.client.Summary -import kotlinx.coroutines.runBlocking -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.les -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 -import no.nav.helsearbeidsgiver.felles.rapidsrivers.interestedIn -import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Behov -import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.publishData -import no.nav.helsearbeidsgiver.felles.rapidsrivers.requireKeys -import no.nav.helsearbeidsgiver.utils.json.parseJson -import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer -import no.nav.helsearbeidsgiver.utils.json.toJson -import no.nav.helsearbeidsgiver.utils.log.logger -import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -import java.util.UUID -import kotlin.system.measureTimeMillis - -class VirksomhetLoeser( - rapidsConnection: RapidsConnection, - private val brregClient: BrregClient, - private val isPreProd: Boolean, -) : Loeser(rapidsConnection) { - private val logger = logger() - private val sikkerLogger = sikkerLogger() - private val preprodOrgnr = - mapOf( - "810007702" to "ANSTENDIG PIGGSVIN BYDEL", - "810007842" to "ANSTENDIG PIGGSVIN BARNEHAGE", - "810008032" to "ANSTENDIG PIGGSVIN BRANNVESEN", - "810007982" to "ANSTENDIG PIGGSVIN SYKEHJEM", - ) - - private val behov = BehovType.HENT_VIRKSOMHET_NAVN - private val requestLatency = - Summary - .build() - .name("simba_brreg_hent_virksomhet_latency_seconds") - .help("brreg hent virksomhet latency in seconds") - .register() - - private fun hentVirksomheter(orgnrListe: List): List = - if (isPreProd) { - orgnrListe.map { orgnr -> Virksomhet(preprodOrgnr.getOrDefault(orgnr, "Ukjent arbeidsgiver"), orgnr) } - } else { - runBlocking { - val virksomheterNavn: List - val requestTimer = requestLatency.startTimer() - measureTimeMillis { - virksomheterNavn = brregClient.hentVirksomheter(orgnrListe) - }.also { - logger.info("BREG execution took $it") - requestTimer.observeDuration() - } - virksomheterNavn.ifEmpty { throw FantIkkeVirksomhetException(orgnrListe.toString()) } - } - } - - override fun accept(): River.PacketValidation = - River.PacketValidation { - it.demandValues( - Key.BEHOV to behov.name, - ) - it.requireKeys( - Key.UUID, - ) - it.interestedIn( - Key.ORGNRUNDERENHET, - Key.ORGNR_UNDERENHETER, - ) - } - - override fun onBehov(behov: Behov) { - val json = - behov.jsonMessage - .toJson() - .parseJson() - .toMap() - - val transaksjonId = Key.UUID.les(UuidSerializer, json) - val orgnr: List = - if (behov[Key.ORGNR_UNDERENHETER].isEmpty) { - listOf( - behov[Key.ORGNRUNDERENHET] - .asText(), - ) - } else { - behov[Key.ORGNR_UNDERENHETER] - .map { it.asText() } - } - - logger.info("Løser behov ${this.behov} med uuid $transaksjonId") - - try { - val navnListe: Map = - hentVirksomheter(orgnr) - .associate { it.organisasjonsnummer to it.navn } - - rapidsConnection.publishData( - eventName = behov.event, - transaksjonId = transaksjonId, - forespoerselId = behov.forespoerselId?.let(UUID::fromString), - Key.SELVBESTEMT_ID to json[Key.SELVBESTEMT_ID], - Key.VIRKSOMHET to navnListe.values.first().toJson(), - Key.VIRKSOMHETER to navnListe.toJson(), - ) - } catch (ex: FantIkkeVirksomhetException) { - logger.error("Fant ikke virksomhet for $orgnr") - publishFail(behov.createFail("Fant ikke virksomhet")) - } catch (ex: Exception) { - logger.error("Det oppstod en feil ved henting for $orgnr") - sikkerLogger.error("Det oppstod en feil ved henting for orgnr $orgnr: ", ex) - publishFail(behov.createFail("Klarte ikke hente virksomhet")) - } - } -} diff --git a/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/VirksomhetLoeserTest.kt b/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/VirksomhetLoeserTest.kt deleted file mode 100644 index 7a69be0a0..000000000 --- a/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/VirksomhetLoeserTest.kt +++ /dev/null @@ -1,93 +0,0 @@ -@file:Suppress("NonAsciiCharacters") - -package no.nav.helsearbeidsgiver.inntektsmelding.brreg - -import io.kotest.matchers.nulls.shouldNotBeNull -import io.kotest.matchers.shouldBe -import io.mockk.coEvery -import io.mockk.mockk -import io.prometheus.client.CollectorRegistry -import kotlinx.serialization.builtins.serializer -import no.nav.helse.rapids_rivers.testsupport.TestRapid -import no.nav.helsearbeidsgiver.brreg.BrregClient -import no.nav.helsearbeidsgiver.brreg.Virksomhet -import no.nav.helsearbeidsgiver.felles.BehovType -import no.nav.helsearbeidsgiver.felles.EventName -import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.json.toJson -import no.nav.helsearbeidsgiver.felles.json.toMap -import no.nav.helsearbeidsgiver.felles.test.json.readFail -import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage -import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson -import no.nav.helsearbeidsgiver.utils.json.fromJson -import no.nav.helsearbeidsgiver.utils.json.toJson -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import java.util.UUID - -class VirksomhetLoeserTest { - private val testRapid = TestRapid() - private val mockBrregClient = mockk() - - private val orgnr = "orgnr-1" - private val virksomhetNavn = "Norge AS" - - init { - VirksomhetLoeser(testRapid, mockBrregClient, false) - } - - @BeforeEach - fun setup() { - testRapid.reset() - CollectorRegistry.defaultRegistry.clear() // prometheus metrics - } - - @Test - fun `skal håndtere at klient feiler`() { - coEvery { mockBrregClient.hentVirksomheter(any()) } returns emptyList() - - testRapid.sendJson( - Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), - Key.BEHOV to BehovType.HENT_VIRKSOMHET_NAVN.toJson(), - Key.ORGNRUNDERENHET to orgnr.toJson(), - Key.UUID to UUID.randomUUID().toJson(), - ) - - val publisert = testRapid.firstMessage().readFail() - - publisert.feilmelding shouldBe "Fant ikke virksomhet" - } - - @Test - fun `skal returnere løsning når gyldige data`() { - coEvery { mockBrregClient.hentVirksomheter(any()) } returns listOf(Virksomhet(organisasjonsnummer = orgnr, navn = virksomhetNavn)) - - testRapid.sendJson( - Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), - Key.BEHOV to BehovType.HENT_VIRKSOMHET_NAVN.toJson(), - Key.ORGNRUNDERENHET to orgnr.toJson(), - Key.UUID to UUID.randomUUID().toJson(), - ) - - val publisert = testRapid.firstMessage().toMap() - - publisert[Key.VIRKSOMHET] - .shouldNotBeNull() - .fromJson(String.serializer()) - .shouldBe(virksomhetNavn) - } - - @Test - fun `skal håndtere ukjente feil`() { - testRapid.sendJson( - Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), - Key.BEHOV to BehovType.HENT_VIRKSOMHET_NAVN.toJson(), - Key.ORGNRUNDERENHET to orgnr.toJson(), - Key.UUID to UUID.randomUUID().toJson(), - ) - - val publisert = testRapid.firstMessage() - - publisert.readFail().feilmelding shouldBe "Klarte ikke hente virksomhet" - } -}