Skip to content

Commit

Permalink
Skriv resultat til redis på samme format i alle servicer
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga committed Nov 20, 2024
1 parent 2996851 commit 9c2c44d
Show file tree
Hide file tree
Showing 50 changed files with 226 additions and 263 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ class AktiveOrgnrService(
avsenderNavn = avsenderNavn,
underenheter = gyldigeUnderenheter,
).toJson(AktiveArbeidsgivere.serializer()),
).toJson(ResultJson.serializer())
)

redisStore.skrivResultat(steg0.transaksjonId, gyldigResponse)
} else {
Expand All @@ -207,10 +207,7 @@ class AktiveOrgnrService(
logger.error(feilmelding)
sikkerLogger.error(feilmelding)

val feilResponse =
ResultJson(
failure = feilmelding.toJson(),
).toJson(ResultJson.serializer())
val feilResponse = ResultJson(failure = feilmelding.toJson())

redisStore.skrivResultat(transaksjonId, feilResponse)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ private object Mock {
fnr to Person(fnr, navn)
}

fun successResult(orgnr: Orgnr): JsonElement =
fun successResult(orgnr: Orgnr): ResultJson =
ResultJson(
success =
AktiveArbeidsgivere(
Expand All @@ -219,22 +219,22 @@ private object Mock {
),
),
).toJson(AktiveArbeidsgivere.serializer()),
).toJson(ResultJson.serializer())
)

fun successResultTomListe(): JsonElement =
fun successResultTomListe(): ResultJson =
ResultJson(
success =
AktiveArbeidsgivere(
fulltNavn = SYKMELDT_NAVN,
avsenderNavn = AVSENDER_NAVN,
underenheter = emptyList(),
).toJson(AktiveArbeidsgivere.serializer()),
).toJson(ResultJson.serializer())
)

fun failureResult(feilmelding: String): JsonElement =
fun failureResult(feilmelding: String): ResultJson =
ResultJson(
failure = feilmelding.toJson(),
).toJson(ResultJson.serializer())
)

fun startmelding(transaksjonId: UUID): Map<Key, JsonElement> =
mapOf(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package no.nav.helsearbeidsgiver.inntektsmelding.api

import kotlinx.coroutines.delay
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
import no.nav.helsearbeidsgiver.utils.log.sikkerLogger
import java.util.UUID
Expand All @@ -16,7 +16,7 @@ class RedisPoller(
) {
private val sikkerLogger = sikkerLogger()

suspend fun hent(key: UUID): JsonElement {
suspend fun hent(key: UUID): ResultJson {
repeat(MAX_RETRIES) {
sikkerLogger.debug("Polling redis: $it time(s) for key $key")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import io.ktor.server.routing.post
import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.felles.Tekst
import no.nav.helsearbeidsgiver.felles.domene.AktiveArbeidsgivere
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
Expand Down Expand Up @@ -42,7 +41,7 @@ fun Route.aktiveOrgnrRoute(

aktiveOrgnrProducer.publish(transaksjonId, arbeidsgiverFnr = arbeidsgiverFnr, arbeidstagerFnr = request.identitetsnummer)

val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId)

val resultat = resultatJson.success?.fromJson(AktiveArbeidsgivere.serializer())
if (resultat != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.auth
import io.ktor.server.request.ApplicationRequest
import kotlinx.coroutines.runBlocking
import no.nav.helsearbeidsgiver.felles.domene.Tilgang
import no.nav.helsearbeidsgiver.felles.domene.TilgangResultat
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
Expand Down Expand Up @@ -57,12 +56,13 @@ class Tilgangskontroll(

publish(transaksjonId, innloggerFnr)

val resultat =
val tilgang =
redisPoller
.hent(transaksjonId)
.fromJson(TilgangResultat.serializer())
.success
?.fromJson(Tilgang.serializer())

resultat.tilgang ?: throw ManglerAltinnRettigheterException()
tilgang ?: throw ManglerAltinnRettigheterException()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fun Route.hentForespoersel(

hentForespoerselProducer.publish(transaksjonId, request, arbeidsgiverFnr)

val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId)

sikkerLogger.info("Hentet forespørsel: $resultatJson")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.felles.Tekst.TEKNISK_FEIL_FORBIGAAENDE
import no.nav.helsearbeidsgiver.felles.Tekst.UGYLDIG_REQUEST
import no.nav.helsearbeidsgiver.felles.domene.Forespoersel
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.domene.VedtaksperiodeIdForespoerselIdPar
import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
Expand Down Expand Up @@ -91,7 +90,7 @@ suspend fun PipelineContext<Unit, ApplicationCall>.hentForespoersler(

hentForespoerslerProducer.publish(transaksjonId, request)

val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId)

sikkerLogger.info("Hentet forespørslene: $resultatJson")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,7 @@ fun Route.hentSelvbestemtImRoute(

runCatching {
redisPoller.hent(transaksjonId)
}.onSuccess {
val result = it.fromJson(ResultJson.serializer())

}.onSuccess { result ->
val inntektsmelding = result.success?.fromJson(Inntektsmelding.serializer())

if (inntektsmelding != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import io.ktor.server.routing.post
import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding
import no.nav.helsearbeidsgiver.felles.Tekst
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
Expand Down Expand Up @@ -86,12 +85,7 @@ fun Route.innsending(

producer.publish(transaksjonId, skjema, avsenderFnr)

val resultat =
runCatching {
redisPoller.hent(transaksjonId)
}.map {
it.fromJson(ResultJson.serializer())
}
val resultat = runCatching { redisPoller.hent(transaksjonId) }

resultat
.onSuccess {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import kotlinx.serialization.builtins.nullable
import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.felles.Tekst
import no.nav.helsearbeidsgiver.felles.domene.Inntekt
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
Expand Down Expand Up @@ -53,7 +52,7 @@ fun Route.inntektRoute(
try {
inntektProducer.publish(transaksjonId, request)

val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId)
sikkerLogger.info("Fikk inntektresultat:\n$resultatJson")

val resultat = resultatJson.success?.fromJson(Inntekt.serializer())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import kotlinx.serialization.builtins.nullable
import kotlinx.serialization.builtins.serializer
import no.nav.helsearbeidsgiver.felles.Tekst
import no.nav.helsearbeidsgiver.felles.domene.Inntekt
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
Expand Down Expand Up @@ -52,7 +51,7 @@ fun Route.inntektSelvbestemtRoute(
try {
inntektSelvbestemtProducer.publish(transaksjonId, request)

val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId)
sikkerLogger.info("Fikk inntektsresultat for selvbestemt inntektsmelding:\n$resultatJson")

val resultat = resultatJson.success?.fromJson(Inntekt.serializer())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.deprecated.KvitteringSimb
import no.nav.helsearbeidsgiver.felles.Tekst
import no.nav.helsearbeidsgiver.felles.domene.EksternInntektsmelding
import no.nav.helsearbeidsgiver.felles.domene.InnsendtInntektsmelding
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix
Expand Down Expand Up @@ -68,7 +67,7 @@ fun Route.kvittering(
tilgangskontroll.validerTilgangTilForespoersel(call.request, forespoerselId)

kvitteringProducer.publish(transaksjonId, forespoerselId)
val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId)

sikkerLogger.info("Resultat for henting av kvittering for $forespoerselId: $resultatJson")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import io.ktor.server.routing.Route
import io.ktor.server.routing.post
import io.ktor.util.pipeline.PipelineContext
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmeldingSelvbestemt
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisConnection
Expand Down Expand Up @@ -110,12 +109,10 @@ private suspend fun PipelineContext<Unit, ApplicationCall>.lesRequestOrNull(): S
}
}.getOrNull()

private suspend fun PipelineContext<Unit, ApplicationCall>.sendResponse(resultatJson: Result<JsonElement>) {
resultatJson
.map {
it.fromJson(ResultJson.serializer())
}.onSuccess { resultat ->
val selvbestemtId = resultat.success?.fromJson(UuidSerializer)
private suspend fun PipelineContext<Unit, ApplicationCall>.sendResponse(result: Result<ResultJson>) {
result
.onSuccess { resultJson ->
val selvbestemtId = resultJson.success?.fromJson(UuidSerializer)
if (selvbestemtId != null) {
MdcUtils.withLogFields(
Log.selvbestemtId(selvbestemtId),
Expand All @@ -127,7 +124,7 @@ private suspend fun PipelineContext<Unit, ApplicationCall>.sendResponse(resultat
}
respondOk(LagreSelvbestemtImResponse(selvbestemtId), LagreSelvbestemtImResponse.serializer())
} else {
val feilmelding = resultat.failure?.fromJson(String.serializer()).orDefault("Tomt resultat i Redis.")
val feilmelding = resultJson.failure?.fromJson(String.serializer()).orDefault("Tomt resultat i Redis.")

"Klarte ikke motta selvbestemt inntektsmelding pga. feil.".also {
logger.error(it)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,9 @@ import io.kotest.matchers.shouldBe
import io.mockk.clearAllMocks
import io.mockk.every
import io.mockk.mockk
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Periode
import no.nav.helsearbeidsgiver.felles.domene.Forespoersel
import no.nav.helsearbeidsgiver.felles.domene.ForespurtData
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel
import no.nav.helsearbeidsgiver.utils.json.fromJson
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.serializer.LocalDateSerializer
import no.nav.helsearbeidsgiver.utils.json.serializer.list
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.json.toJsonStr
import no.nav.helsearbeidsgiver.utils.test.json.removeJsonWhitespace
import org.junit.jupiter.api.assertThrows
import java.util.UUID

Expand All @@ -32,54 +20,30 @@ class RedisPollerTest :
val redisPoller = RedisPoller(mockRedisStore)

val key = UUID.randomUUID()
val dataJson = "noe data".toJson()
val etSlagsResultat = ResultJson(success = "noe data".toJson())

beforeEach {
clearAllMocks()
}

test("skal finne med tillatt antall forsøk") {
every { mockRedisStore.lesResultat(any()) } returnsMany answers(answerOnAttemptNo = 10, answer = dataJson)
every { mockRedisStore.lesResultat(any()) } returnsMany answers(answerOnAttemptNo = 10, answer = etSlagsResultat)

val json = redisPoller.hent(key)

json shouldBe dataJson
json shouldBe etSlagsResultat
}

test("skal ikke finne etter maks forsøk") {
every { mockRedisStore.lesResultat(any()) } returnsMany answers(answerOnAttemptNo = 11, answer = dataJson)
every { mockRedisStore.lesResultat(any()) } returnsMany answers(answerOnAttemptNo = 11, answer = etSlagsResultat)

assertThrows<RedisPollerTimeoutException> {
redisPoller.hent(key)
}
}

test("skal parse forespurt data korrekt") {
val expected = mockForespoersel()
val expectedJson =
"""
{
"orgnr": "${expected.orgnr}",
"fnr": "${expected.fnr}",
"vedtaksperiodeId": ${expected.vedtaksperiodeId.toJson()},
"sykmeldingsperioder": ${expected.sykmeldingsperioder.toJsonStr(Periode.serializer().list())},
"egenmeldingsperioder": ${expected.egenmeldingsperioder.toJsonStr(Periode.serializer().list())},
"bestemmendeFravaersdager": ${expected.bestemmendeFravaersdager.toJsonStr(MapSerializer(String.serializer(), LocalDateSerializer))},
"forespurtData": ${expected.forespurtData.toJsonStr(ForespurtData.serializer())},
"erBesvart": ${expected.erBesvart}
}
""".removeJsonWhitespace()
.parseJson()

every { mockRedisStore.lesResultat(any()) } returnsMany answers(answerOnAttemptNo = 1, answer = expectedJson)

val resultat = redisPoller.hent(key).fromJson(Forespoersel.serializer())

resultat shouldBe expected
}
})

private fun answers(
answerOnAttemptNo: Int,
answer: JsonElement,
): List<JsonElement?> = List(answerOnAttemptNo - 1) { null }.plus(answer)
answer: ResultJson,
): List<ResultJson?> = List(answerOnAttemptNo - 1) { null }.plus(answer)
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import io.mockk.clearAllMocks
import io.mockk.coEvery
import no.nav.helsearbeidsgiver.felles.domene.AktiveArbeidsgivere
import no.nav.helsearbeidsgiver.felles.domene.ResultJson
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.inntektsmelding.api.Routes
import no.nav.helsearbeidsgiver.inntektsmelding.api.utils.ApiTest
import no.nav.helsearbeidsgiver.utils.json.fromJson
Expand All @@ -35,7 +36,7 @@ class AktiveOrgnrRouteKtTest : ApiTest() {
coEvery { mockRedisConnection.get(any()) } returns
ResultJson(
success = Mock.GYLDIG_AKTIVE_ORGNR_RESPONSE.parseJson(),
).toJson(ResultJson.serializer())
).toJson()
.toString()

val requestBody = """
Expand All @@ -61,7 +62,7 @@ class AktiveOrgnrRouteKtTest : ApiTest() {
coEvery { mockRedisConnection.get(any()) } returns
ResultJson(
success = resultatUtenArbeidsforhold.toJson(AktiveArbeidsgivere.serializer()),
).toJson(ResultJson.serializer())
).toJson()
.toString()

val response = post(path, AktiveOrgnrRequest(Fnr.genererGyldig()), AktiveOrgnrRequest.serializer())
Expand Down
Loading

0 comments on commit 9c2c44d

Please sign in to comment.