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

Skriv resultat til redis på samme format i alle servicer #783

Merged
merged 2 commits into from
Nov 22, 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 @@ -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