Skip to content

Commit

Permalink
Legg til ny river for å hente arbeidsforhold
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga committed Jul 23, 2024
1 parent 42a7a97 commit 57d9988
Show file tree
Hide file tree
Showing 16 changed files with 311 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,20 @@ private val logger = "im-aareg".logger()
fun main() {
RapidApplication
.create(System.getenv())
.createAareg(buildClient(setUpEnvironment()))
.createAaregRiver(buildClient())
.start()
}

fun RapidsConnection.createAareg(aaregClient: AaregClient): RapidsConnection =
fun RapidsConnection.createAaregRiver(aaregClient: AaregClient): RapidsConnection =
also {
logger.info("Starter ${ArbeidsforholdLoeser::class.simpleName}...")
ArbeidsforholdLoeser(this, aaregClient)

logger.info("Starter ${HentArbeidsforholdRiver::class.simpleName}...")
HentArbeidsforholdRiver(aaregClient).connect(this)
}

fun buildClient(environment: Environment): AaregClient {
val tokenGetter = oauth2ClientCredentialsTokenGetter(environment.oauth2Environment)
return AaregClient(url = environment.aaregUrl, getAccessToken = tokenGetter)
private fun buildClient(): AaregClient {
val tokenGetter = oauth2ClientCredentialsTokenGetter(Env.oauth2Environment)
return AaregClient(url = Env.aaregUrl, getAccessToken = tokenGetter)
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class ArbeidsforholdLoeser(
override fun accept(): River.PacketValidation =
River.PacketValidation {
it.demandValues(
Key.BEHOV to BehovType.ARBEIDSFORHOLD.name,
Key.BEHOV to BehovType.HENT_ARBEIDSFORHOLD.name,
)
it.requireKeys(
Key.IDENTITETSNUMMER,
Expand All @@ -66,7 +66,7 @@ class ArbeidsforholdLoeser(
val identitetsnummer = Key.IDENTITETSNUMMER.les(String.serializer(), json)
val forespoerselId = Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, json)

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

val arbeidsforhold = hentArbeidsforhold(identitetsnummer, transaksjonId)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package no.nav.helsearbeidsgiver.inntektsmelding.aareg

import no.nav.helsearbeidsgiver.felles.fromEnv
import no.nav.helsearbeidsgiver.tokenprovider.OAuth2Environment

object Env {
val aaregUrl = "AAREG_URL".fromEnv()

val oauth2Environment =
OAuth2Environment(
scope = "AAREG_SCOPE".fromEnv(),
wellKnownUrl = "AZURE_APP_WELL_KNOWN_URL".fromEnv(),
tokenEndpointUrl = "AZURE_OPENID_CONFIG_TOKEN_ENDPOINT".fromEnv(),
clientId = "AZURE_APP_CLIENT_ID".fromEnv(),
clientSecret = "AZURE_APP_CLIENT_SECRET".fromEnv(),
clientJwk = "AZURE_APP_JWK".fromEnv(),
)
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package no.nav.helsearbeidsgiver.inntektsmelding.aareg

import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.aareg.AaregClient
import no.nav.helsearbeidsgiver.felles.Arbeidsforhold
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.krev
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.loeser.ObjectRiver
import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import no.nav.helsearbeidsgiver.felles.metrics.recordTime
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.utils.json.fromJson
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 no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.util.UUID

data class HentArbeidsforholdMelding(
val eventName: EventName,
val behovType: BehovType,
val transaksjonId: UUID,
val data: Map<Key, JsonElement>,
val fnr: Fnr,
)

class HentArbeidsforholdRiver(
private val aaregClient: AaregClient,
) : ObjectRiver<HentArbeidsforholdMelding>() {
private val logger = logger()
private val sikkerLogger = sikkerLogger()

override fun les(json: Map<Key, JsonElement>): HentArbeidsforholdMelding? =
if (Key.FAIL in json) {
null
} else {
val data = json[Key.DATA]?.toMap().orEmpty()

HentArbeidsforholdMelding(
eventName = Key.EVENT_NAME.les(EventName.serializer(), json),
behovType = Key.BEHOV.krev(BehovType.HENT_ARBEIDSFORHOLD, BehovType.serializer(), json),
transaksjonId = Key.UUID.les(UuidSerializer, json),
data = data,
fnr = Key.FNR.les(Fnr.serializer(), data),
)
}

override fun HentArbeidsforholdMelding.haandter(json: Map<Key, JsonElement>): Map<Key, JsonElement> {
val arbeidsforhold =
Metrics.aaregRequest
.recordTime(aaregClient::hentArbeidsforhold) {
aaregClient.hentArbeidsforhold(fnr.verdi, transaksjonId.toString())
}.map { it.tilArbeidsforhold() }

"Fant ${arbeidsforhold.size} arbeidsforhold.".also {
logger.info(it)
sikkerLogger.info(it)
}

return mapOf(
Key.EVENT_NAME to eventName.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.DATA to
data
.plus(
Key.ARBEIDSFORHOLD to arbeidsforhold.toJson(Arbeidsforhold.serializer()),
).toJson(),
)
}

override fun HentArbeidsforholdMelding.haandterFeil(
json: Map<Key, JsonElement>,
error: Throwable,
): Map<Key, JsonElement> {
val fail =
Fail(
feilmelding = "Klarte ikke hente arbeidsforhold fra Aareg.",
event = eventName,
transaksjonId = transaksjonId,
forespoerselId = json[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer),
utloesendeMelding = json.toJson(),
)

logger.error(fail.feilmelding)
sikkerLogger.error(fail.feilmelding, error)

return fail.tilMelding()
}

override fun HentArbeidsforholdMelding.loggfelt(): Map<String, String> =
mapOf(
Log.klasse(this@HentArbeidsforholdRiver),
Log.event(eventName),
Log.behov(behovType),
Log.transaksjonId(transaksjonId),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import no.nav.helsearbeidsgiver.inntektsmelding.aareg.tilArbeidsforhold
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.util.UUID

class ArbeidsforholdLoeserTest :
Expand All @@ -46,6 +48,7 @@ class ArbeidsforholdLoeserTest :

test("ved innkommende behov så hentes og publiseres arbeidsforhold fra aareg") {
val expectedUuid = UUID.randomUUID()
val fnr = Fnr.genererGyldig().verdi

val expectedArbeidsforhold =
mockKlientArbeidsforhold()
Expand All @@ -57,14 +60,14 @@ class ArbeidsforholdLoeserTest :

testRapid.sendJson(
Key.EVENT_NAME to EventName.INSENDING_STARTED.toJson(),
Key.BEHOV to BehovType.ARBEIDSFORHOLD.toJson(),
Key.IDENTITETSNUMMER to Mock.FNR.toJson(),
Key.BEHOV to BehovType.HENT_ARBEIDSFORHOLD.toJson(),
Key.IDENTITETSNUMMER to fnr.toJson(),
Key.UUID to expectedUuid.toJson(),
)

val actual = testRapid.firstMessage().toMap()

coVerifySequence { mockAaregClient.hentArbeidsforhold(Mock.FNR, expectedUuid.toString()) }
coVerifySequence { mockAaregClient.hentArbeidsforhold(fnr, expectedUuid.toString()) }
testRapid.inspektør.size shouldBeExactly 1

actual[Key.UUID]?.fromJson(UuidSerializer) shouldBe expectedUuid
Expand All @@ -76,12 +79,13 @@ class ArbeidsforholdLoeserTest :
val event = EventName.TRENGER_REQUESTED
val transaksjonId = UUID.randomUUID()
val forespoerselId = UUID.randomUUID()
val fnr = Fnr.genererGyldig().verdi

val innkommendeMelding =
mapOf(
Key.EVENT_NAME to event.toJson(),
Key.BEHOV to BehovType.ARBEIDSFORHOLD.toJson(),
Key.IDENTITETSNUMMER to Mock.FNR.toJson(),
Key.BEHOV to BehovType.HENT_ARBEIDSFORHOLD.toJson(),
Key.IDENTITETSNUMMER to fnr.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
)
Expand All @@ -99,7 +103,7 @@ class ArbeidsforholdLoeserTest :

testRapid.sendJson(innkommendeMelding)

coVerifySequence { mockAaregClient.hentArbeidsforhold(Mock.FNR, expected.transaksjonId.toString()) }
coVerifySequence { mockAaregClient.hentArbeidsforhold(fnr, expected.transaksjonId.toString()) }

testRapid.inspektør.size shouldBeExactly 1

Expand All @@ -109,7 +113,3 @@ class ArbeidsforholdLoeserTest :
fail.utloesendeMelding.toMap() shouldContainAll innkommendeMelding
}
})

private object Mock {
const val FNR = "12121200012"
}
Loading

0 comments on commit 57d9988

Please sign in to comment.