Skip to content

Commit

Permalink
Erstatt river for å lagre ekstern inntektsmelding (#657)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga authored Aug 7, 2024
1 parent b403d82 commit d85deb0
Show file tree
Hide file tree
Showing 11 changed files with 253 additions and 132 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,11 @@ class SpinnService(
Key.EVENT_NAME to EventName.EKSTERN_INNTEKTSMELDING_MOTTATT.toJson(),
Key.BEHOV to BehovType.LAGRE_EKSTERN_INNTEKTSMELDING.toJson(),
Key.UUID to steg0.transaksjonId.toJson(),
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.EKSTERN_INNTEKTSMELDING to steg1.eksternInntektsmelding.toJson(EksternInntektsmelding.serializer()),
Key.DATA to
mapOf(
Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(),
Key.EKSTERN_INNTEKTSMELDING to steg1.eksternInntektsmelding.toJson(EksternInntektsmelding.serializer()),
).toJson(),
)

MdcUtils.withLogFields(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import no.nav.helsearbeidsgiver.felles.db.exposed.Database
import no.nav.helsearbeidsgiver.felles.rapidsrivers.registerShutdownLifecycle
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.HentLagretImRiver
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.HentSelvbestemtImRiver
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreEksternInntektsmeldingLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreEksternImRiver
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreForespoerselLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreImRiver
import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreJournalpostIdRiver
Expand Down Expand Up @@ -53,6 +53,9 @@ fun RapidsConnection.createDbRivers(
logger.info("Starter ${LagreImRiver::class.simpleName}...")
LagreImRiver(imRepo).connect(this)

logger.info("Starter ${LagreEksternImRiver::class.simpleName}...")
LagreEksternImRiver(imRepo).connect(this)

logger.info("Starter ${LagreJournalpostIdRiver::class.simpleName}...")
LagreJournalpostIdRiver(imRepo, selvbestemtImRepo).connect(this)

Expand All @@ -65,9 +68,6 @@ fun RapidsConnection.createDbRivers(
logger.info("Starter ${NotifikasjonHentIdLoeser::class.simpleName}...")
NotifikasjonHentIdLoeser(this, forespoerselRepo)

logger.info("Starter ${LagreEksternInntektsmeldingLoeser::class.simpleName}...")
LagreEksternInntektsmeldingLoeser(this, imRepo)

logger.info("Starter ${HentSelvbestemtImRiver::class.simpleName}...")
HentSelvbestemtImRiver(selvbestemtImRepo).connect(this)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,12 @@ class InntektsmeldingRepository(
}

fun lagreEksternInntektsmelding(
forespoerselId: String,
forespoerselId: UUID,
eksternIm: EksternInntektsmelding,
) {
transaction(db) {
InntektsmeldingEntitet.insert {
it[this.forespoerselId] = forespoerselId
it[this.forespoerselId] = forespoerselId.toString()
it[eksternInntektsmelding] = eksternIm
it[innsendt] = LocalDateTime.now()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package no.nav.helsearbeidsgiver.inntektsmelding.db.river

import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EksternInntektsmelding
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.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.inntektsmelding.db.InntektsmeldingRepository
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

data class LagreEksternImMelding(
val eventName: EventName,
val behovType: BehovType,
val transaksjonId: UUID,
val forespoerselId: UUID,
val eksternInntektsmelding: EksternInntektsmelding,
)

class LagreEksternImRiver(
private val imRepo: InntektsmeldingRepository,
) : ObjectRiver<LagreEksternImMelding>() {
private val logger = logger()
private val sikkerLogger = sikkerLogger()

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

LagreEksternImMelding(
eventName = Key.EVENT_NAME.les(EventName.serializer(), json),
behovType = Key.BEHOV.krev(BehovType.LAGRE_EKSTERN_INNTEKTSMELDING, BehovType.serializer(), json),
transaksjonId = Key.UUID.les(UuidSerializer, json),
forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, data),
eksternInntektsmelding = Key.EKSTERN_INNTEKTSMELDING.les(EksternInntektsmelding.serializer(), data),
)
}

override fun LagreEksternImMelding.haandter(json: Map<Key, JsonElement>): Map<Key, JsonElement>? {
imRepo.lagreEksternInntektsmelding(forespoerselId, eksternInntektsmelding)

"Lagret ekstern inntektsmelding med arkiv referanse ${eksternInntektsmelding.arkivreferanse} i database.".also {
logger.info(it)
sikkerLogger.info(it)
}

return mapOf(
Key.EVENT_NAME to EventName.EKSTERN_INNTEKTSMELDING_LAGRET.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
)
}

override fun LagreEksternImMelding.haandterFeil(
json: Map<Key, JsonElement>,
error: Throwable,
): Map<Key, JsonElement>? {
val fail =
Fail(
feilmelding = "Klarte ikke lagre ekstern inntektsmelding i database.",
event = eventName,
transaksjonId = transaksjonId,
forespoerselId = forespoerselId,
utloesendeMelding = json.toJson(),
)

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

return fail.tilMelding()
}

override fun LagreEksternImMelding.loggfelt(): Map<String, String> =
mapOf(
Log.klasse(this@LagreEksternImRiver),
Log.event(eventName),
Log.behov(behovType),
Log.transaksjonId(transaksjonId),
Log.forespoerselId(forespoerselId),
)
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ class RepositoryTest :

foresporselRepo.lagreForespoersel(forespoerselId.toString(), orgnr)
inntektsmeldingRepo.lagreInntektsmelding(forespoerselId, INNTEKTSMELDING_DOKUMENT)
inntektsmeldingRepo.lagreEksternInntektsmelding(forespoerselId.toString(), mockEksternInntektsmelding())
inntektsmeldingRepo.lagreEksternInntektsmelding(forespoerselId, mockEksternInntektsmelding())

inntektsmeldingRepo.oppdaterJournalpostId(forespoerselId, journalpostId)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Naturalytelse
import no.nav.helsearbeidsgiver.felles.db.exposed.test.FunSpecWithDb
import no.nav.helsearbeidsgiver.felles.test.mock.mockInntektsmeldingV1
import no.nav.helsearbeidsgiver.felles.test.mock.randomDigitString
import no.nav.helsearbeidsgiver.inntektsmelding.db.tabell.SelvbestemtInntektsmeldingEntitet
import no.nav.helsearbeidsgiver.utils.test.date.oktober
import no.nav.helsearbeidsgiver.utils.test.date.september
Expand All @@ -20,7 +21,6 @@ import org.jetbrains.exposed.sql.ResultRow
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction
import java.util.UUID
import kotlin.random.Random

class SelvbestemtImRepoTest :
FunSpecWithDb(listOf(SelvbestemtInntektsmeldingEntitet), { db ->
Expand Down Expand Up @@ -300,8 +300,3 @@ private fun lesAlleRader(db: Database): List<ResultRow> =
.orderBy(SelvbestemtInntektsmeldingEntitet.opprettet)
.toList()
}

// TODO erstatt med versjon fra felles-pakke
private fun randomDigitString(length: Int): String =
List(length) { Random.nextInt(10) }
.joinToString(separator = "")
Loading

0 comments on commit d85deb0

Please sign in to comment.