From 26fe230f281ea52b45dd4f12a09827213c744472 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga <6940327+bjerga@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:02:07 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Fjern=20un=C3=B8dvendig=20lagring=20av=20sa?= =?UTF-8?q?k-ID=20for=20selvbestemt=20(#751)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/notifikasjon/dev-gcp.yml | 2 - config/notifikasjon/prod-gcp.yml | 2 - .../felles/metrics/Metrics.kt | 2 - .../integrasjonstest/utils/ContainerTest.kt | 3 - .../integrasjonstest/utils/EndToEndTest.kt | 35 ++------ notifikasjon/build.gradle.kts | 4 - .../inntektsmelding/notifikasjon/App.kt | 25 +----- .../notifikasjon/db/SelvbestemtRepo.kt | 46 ---------- .../notifikasjon/db/SelvbestemtSak.kt | 10 --- .../river/OpprettSelvbestemtSakRiver.kt | 4 - .../notifikasjon/db/SelvbestemtRepoTest.kt | 72 ---------------- .../river/OpprettSelvbestemtSakRiverTest.kt | 86 +++++-------------- 12 files changed, 28 insertions(+), 263 deletions(-) delete mode 100644 notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepo.kt delete mode 100644 notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtSak.kt delete mode 100644 notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepoTest.kt diff --git a/config/notifikasjon/dev-gcp.yml b/config/notifikasjon/dev-gcp.yml index cd4453c2ba..21d0e36bde 100644 --- a/config/notifikasjon/dev-gcp.yml +++ b/config/notifikasjon/dev-gcp.yml @@ -8,8 +8,6 @@ database: envFrom: - type: secret name: google-sql-im-notifikasjon -secureLogs: - enabled: true env: - name: ARBEIDSGIVER_NOTIFIKASJON_API_URL value: "http://notifikasjon-produsent-api.fager/api/graphql" diff --git a/config/notifikasjon/prod-gcp.yml b/config/notifikasjon/prod-gcp.yml index 7cff705570..7eda82a140 100644 --- a/config/notifikasjon/prod-gcp.yml +++ b/config/notifikasjon/prod-gcp.yml @@ -8,8 +8,6 @@ database: envFrom: - type: secret name: google-sql-im-notifikasjon -secureLogs: - enabled: true env: - name: ARBEIDSGIVER_NOTIFIKASJON_API_URL value: "http://notifikasjon-produsent-api.fager/api/graphql" diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/metrics/Metrics.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/metrics/Metrics.kt index 79e213cc86..f69867347c 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/metrics/Metrics.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/metrics/Metrics.kt @@ -22,8 +22,6 @@ object Metrics { val dbSelvbestemtIm = databaseMetric("inntektsmelding", "selvbestemt_inntektsmelding") - val dbSelvbestemtSak = databaseMetric("notifikasjon", "selvbestemt_sak") - val aaregRequest = requestMetric("Aareg") val altinnRequest = requestMetric("Altinn") diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/ContainerTest.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/ContainerTest.kt index d2330e4f2d..95c333b156 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/ContainerTest.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/ContainerTest.kt @@ -18,7 +18,6 @@ abstract class ContainerTest { val redisContainer = RedisContainer(DockerImageName.parse("redis:7")) val postgresContainerOne = postgresContainer() val postgresContainerTwo = postgresContainer() - val postgresContainerThree = postgresContainer() @BeforeAll fun startContainers() { @@ -43,7 +42,6 @@ abstract class ContainerTest { println("Starter Postgres...") postgresContainerOne.start() postgresContainerTwo.start() - postgresContainerThree.start() println("Containerne er klare!") } @@ -54,7 +52,6 @@ abstract class ContainerTest { kafkaContainer.stop() postgresContainerOne.stop() postgresContainerTwo.stop() - postgresContainerThree.stop() redisContainer.stop() println("Containere er stoppet!") } diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt index 8dd4fa161e..05cf205dd8 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt @@ -60,7 +60,6 @@ import no.nav.helsearbeidsgiver.inntektsmelding.joark.createJournalfoerImRiver import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.PaaminnelseToggle import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.createNotifikasjonRivers import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.createNotifikasjonService -import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db.SelvbestemtRepo import no.nav.helsearbeidsgiver.inntektsmelding.pdl.createPdlRiver import no.nav.helsearbeidsgiver.inntektsmelding.selvbestemthentimservice.createHentSelvbestemtImService import no.nav.helsearbeidsgiver.inntektsmelding.selvbestemtlagreimservice.createLagreSelvbestemtImService @@ -138,31 +137,14 @@ abstract class EndToEndTest : ContainerTest() { } } - // Vent på im-notifikasjon database - private val notifikasjonDatabase by lazy { - println("Database jdbcUrl for im-notifikasjon: ${postgresContainerTwo.jdbcUrl}") - - return@lazy withRetries( - feilmelding = "Klarte ikke sette opp notifikasjonDatabase.", - ) { - postgresContainerTwo - .toHikariConfig() - .let(::Database) - .also { - val migrationLocation = Path("../notifikasjon/src/main/resources/db/migration").absolutePathString() - it.migrate(migrationLocation) - }.createTruncateFunction() - } - } - // Vent på feilbehandlerdatabase private val bakgrunnsjobbDatabase by lazy { - println("Database jdbcUrl for im-feil-behandler: ${postgresContainerThree.jdbcUrl}") + println("Database jdbcUrl for im-feil-behandler: ${postgresContainerTwo.jdbcUrl}") return@lazy withRetries( feilmelding = "Klarte ikke sette opp feilbehandlerdatabase.", ) { - postgresContainerThree + postgresContainerTwo .toHikariConfig() .let(::Database) .also { @@ -189,8 +171,6 @@ abstract class EndToEndTest : ContainerTest() { val selvbestemtImRepo by lazy { SelvbestemtImRepo(inntektsmeldingDatabase.db) } private val forespoerselRepository by lazy { ForespoerselRepository(inntektsmeldingDatabase.db) } - private val selvbestemtRepo by lazy { SelvbestemtRepo(notifikasjonDatabase.db) } - val bakgrunnsjobbRepository by lazy { PostgresBakgrunnsjobbRepository(bakgrunnsjobbDatabase.dataSource) } val altinnClient = mockk() @@ -261,12 +241,7 @@ abstract class EndToEndTest : ContainerTest() { createHentInntektRiver(inntektClient) createJournalfoerImRiver(dokarkivClient) createMarkerForespoerselBesvart(priProducer) - createNotifikasjonRivers( - NOTIFIKASJON_LINK, - paaminnelseToggle, - selvbestemtRepo, - agNotifikasjonKlient, - ) + createNotifikasjonRivers(NOTIFIKASJON_LINK, paaminnelseToggle, agNotifikasjonKlient) createPdlRiver(pdlKlient) createFeilLytter(bakgrunnsjobbRepository) } @@ -276,7 +251,7 @@ abstract class EndToEndTest : ContainerTest() { fun afterAllEndToEnd() { redisConnection.close() inntektsmeldingDatabase.dataSource.close() - notifikasjonDatabase.dataSource.close() + bakgrunnsjobbDatabase.dataSource.close() println("Stopped.") } @@ -387,7 +362,7 @@ abstract class EndToEndTest : ContainerTest() { transaction(inntektsmeldingDatabase.db) { exec("SELECT truncate_tables()") } - transaction(notifikasjonDatabase.db) { + transaction(bakgrunnsjobbDatabase.db) { exec("SELECT truncate_tables()") } } diff --git a/notifikasjon/build.gradle.kts b/notifikasjon/build.gradle.kts index 354bfb9198..cd1264add2 100644 --- a/notifikasjon/build.gradle.kts +++ b/notifikasjon/build.gradle.kts @@ -1,9 +1,5 @@ val arbeidsgiverNotifikasjonKlientVersion: String by project dependencies { - implementation(project(":felles-db-exposed")) - implementation("no.nav.helsearbeidsgiver:arbeidsgiver-notifikasjon-klient:$arbeidsgiverNotifikasjonKlientVersion") - - testImplementation(testFixtures(project(":felles-db-exposed"))) } diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/App.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/App.kt index 1a92dbfbe1..8ca26112c6 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/App.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/App.kt @@ -3,10 +3,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection import no.nav.helse.rapids_rivers.RapidApplication import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient -import no.nav.helsearbeidsgiver.felles.db.exposed.Database -import no.nav.helsearbeidsgiver.felles.rapidsrivers.registerShutdownLifecycle import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateless -import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db.SelvbestemtRepo import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.FerdigstillForespoerselSakOgOppgaveRiver import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.FjernPaaminnelseRiver import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettForespoerselSakOgOppgaveRiver @@ -18,26 +15,11 @@ import no.nav.helsearbeidsgiver.utils.log.logger private val logger = "im-notifikasjon".logger() fun main() { - val database = Database("NAIS_DATABASE_IM_NOTIFIKASJON_NOTIFIKASJON") - - logger.info("Migrering starter...") - database.migrate() - logger.info("Migrering ferdig.") - - val selvbestemtRepo = SelvbestemtRepo(database.db) - RapidApplication .create(System.getenv()) .createNotifikasjonService() - .createNotifikasjonRivers( - linkUrl = Env.linkUrl, - paaminnelseToggle = Env.paaminnelseToggle, - selvbestemtRepo = selvbestemtRepo, - agNotifikasjonKlient = buildClient(), - ).registerShutdownLifecycle { - logger.info("Stoppsignal mottatt, lukker databasetilkobling.") - database.dataSource.close() - }.start() + .createNotifikasjonRivers(Env.linkUrl, Env.paaminnelseToggle, buildClient()) + .start() } fun RapidsConnection.createNotifikasjonService(): RapidsConnection = @@ -51,7 +33,6 @@ fun RapidsConnection.createNotifikasjonService(): RapidsConnection = fun RapidsConnection.createNotifikasjonRivers( linkUrl: String, paaminnelseToggle: PaaminnelseToggle, - selvbestemtRepo: SelvbestemtRepo, agNotifikasjonKlient: ArbeidsgiverNotifikasjonKlient, ): RapidsConnection = also { @@ -63,7 +44,7 @@ fun RapidsConnection.createNotifikasjonRivers( ).connect(this) logger.info("Starter ${OpprettSelvbestemtSakRiver::class.simpleName}...") - OpprettSelvbestemtSakRiver(linkUrl, selvbestemtRepo, agNotifikasjonKlient).connect(this) + OpprettSelvbestemtSakRiver(linkUrl, agNotifikasjonKlient).connect(this) logger.info("Starter ${FerdigstillForespoerselSakOgOppgaveRiver::class.simpleName}...") FerdigstillForespoerselSakOgOppgaveRiver(linkUrl, agNotifikasjonKlient).connect(this) diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepo.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepo.kt deleted file mode 100644 index 43bc1eeab8..0000000000 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepo.kt +++ /dev/null @@ -1,46 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db - -import no.nav.helsearbeidsgiver.felles.metrics.Metrics -import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.sakLevetid -import no.nav.helsearbeidsgiver.utils.log.logger -import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.transactions.transaction -import java.time.LocalDateTime -import java.util.UUID -import kotlin.time.toJavaDuration - -class SelvbestemtRepo( - private val db: Database, -) { - private val logger = logger() - private val sikkerLogger = sikkerLogger() - - fun lagreSakId( - selvbestemtId: UUID, - sakId: String, - ): Int { - "Skal lagre sak-ID for selvbestemt inntektsmelding.".also { - logger.info(it) - sikkerLogger.info(it) - } - - return Metrics.dbSelvbestemtSak - .recordTime(::lagreSakId) { - transaction(db) { - SelvbestemtSak - .insert { - it[this.selvbestemtId] = selvbestemtId - it[this.sakId] = sakId - it[slettes] = LocalDateTime.now().plus(sakLevetid.toJavaDuration()) - }.insertedCount - } - }.also { - "Lagret sak-ID for selvbestemt inntektsmelding.".also { - logger.info(it) - sikkerLogger.info(it) - } - } - } -} diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtSak.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtSak.kt deleted file mode 100644 index 279559bca7..0000000000 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtSak.kt +++ /dev/null @@ -1,10 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db - -import org.jetbrains.exposed.sql.Table -import org.jetbrains.exposed.sql.javatime.datetime - -object SelvbestemtSak : Table("selvbestemt_sak") { - val selvbestemtId = uuid("selvbestemt_id") - val sakId = text("sak_id") - val slettes = datetime("slettes") -} diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiver.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiver.kt index 04c2207c3d..9350632984 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiver.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiver.kt @@ -16,7 +16,6 @@ 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.notifikasjon.NotifikasjonTekst -import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db.SelvbestemtRepo import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.opprettSak import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson @@ -34,7 +33,6 @@ data class OpprettSelvbestemtSakMelding( class OpprettSelvbestemtSakRiver( private val linkUrl: String, - private val selvbestemtRepo: SelvbestemtRepo, private val agNotifikasjonKlient: ArbeidsgiverNotifikasjonKlient, ) : ObjectRiver() { private val logger = logger() @@ -66,8 +64,6 @@ class OpprettSelvbestemtSakRiver( initiellStatus = SaksStatus.FERDIG, ) - selvbestemtRepo.lagreSakId(inntektsmelding.type.id, sakId) - return mapOf( Key.EVENT_NAME to eventName.toJson(), Key.UUID to transaksjonId.toJson(), diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepoTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepoTest.kt deleted file mode 100644 index 4ad4e388ff..0000000000 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/db/SelvbestemtRepoTest.kt +++ /dev/null @@ -1,72 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db - -import io.kotest.assertions.throwables.shouldThrowExactly -import io.kotest.matchers.collections.shouldHaveSize -import io.kotest.matchers.ints.shouldBeExactly -import io.kotest.matchers.shouldBe -import no.nav.helsearbeidsgiver.felles.db.exposed.test.FunSpecWithDb -import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.sakLevetid -import org.jetbrains.exposed.exceptions.ExposedSQLException -import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.ResultRow -import org.jetbrains.exposed.sql.selectAll -import org.jetbrains.exposed.sql.transactions.transaction -import java.time.LocalDate -import java.util.UUID - -class SelvbestemtRepoTest : - FunSpecWithDb(listOf(SelvbestemtSak), { db -> - - val selvbestemtRepo = SelvbestemtRepo(db) - - test("lagrer sak-ID") { - val selvbestemtId = UUID.randomUUID() - val sakId = "trallende-sarkofag" - - val antallLagret = selvbestemtRepo.lagreSakId(selvbestemtId, sakId) - - antallLagret shouldBeExactly 1 - - val alleSaker = lesAlleSaker(db) - - alleSaker shouldHaveSize 1 - alleSaker.first().also { lagret -> - lagret[SelvbestemtSak.selvbestemtId] shouldBe selvbestemtId - lagret[SelvbestemtSak.sakId] shouldBe sakId - lagret[SelvbestemtSak.slettes].toLocalDate() shouldBe LocalDate.now().plusDays(sakLevetid.inWholeDays) - } - } - - test("lagrer ikke sak-ID ved konflikt på selvbestemt-ID") { - val selvbestemtId = UUID.randomUUID() - val sakId1 = "sensitiv-xylofon" - val sakId2 = "kampklar-banan" - - selvbestemtRepo.lagreSakId(selvbestemtId, sakId1) - - lesAlleSaker(db) shouldHaveSize 1 - - shouldThrowExactly { - selvbestemtRepo.lagreSakId(selvbestemtId, sakId2) - } - } - - test("lagrer ikke sak-ID ved konflikt på sak-ID") { - val selvbestemtId1 = UUID.randomUUID() - val selvbestemtId2 = UUID.randomUUID() - val sakId = "brautende-flaske" - - selvbestemtRepo.lagreSakId(selvbestemtId1, sakId) - - lesAlleSaker(db) shouldHaveSize 1 - - shouldThrowExactly { - selvbestemtRepo.lagreSakId(selvbestemtId2, sakId) - } - } - }) - -private fun lesAlleSaker(db: Database): List = - transaction(db) { - SelvbestemtSak.selectAll().toList() - } diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiverTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiverTest.kt index d343a8bf69..cd318cfdaa 100644 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiverTest.kt +++ b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettSelvbestemtSakRiverTest.kt @@ -9,9 +9,7 @@ import io.mockk.clearAllMocks import io.mockk.coEvery import io.mockk.coVerify import io.mockk.coVerifySequence -import io.mockk.every import io.mockk.mockk -import io.mockk.verify import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonNull import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient @@ -27,7 +25,6 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.test.mock.mockInntektsmeldingV1 import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson -import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.db.SelvbestemtRepo import no.nav.helsearbeidsgiver.utils.json.toJson import java.util.UUID @@ -36,10 +33,9 @@ class OpprettSelvbestemtSakRiverTest : val testRapid = TestRapid() val mockUrl = "selvbestemt-lenke" - val mockSelvbestemtRepo = mockk() val mockagNotifikasjonKlient = mockk() - OpprettSelvbestemtSakRiver(mockUrl, mockSelvbestemtRepo, mockagNotifikasjonKlient).connect(testRapid) + OpprettSelvbestemtSakRiver(mockUrl, mockagNotifikasjonKlient).connect(testRapid) beforeTest { testRapid.reset() @@ -51,7 +47,6 @@ class OpprettSelvbestemtSakRiverTest : val innkommendeMelding = innkommendeMelding() coEvery { mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) } returns sakId - every { mockSelvbestemtRepo.lagreSakId(any(), any()) } returns 1 testRapid.sendJson(innkommendeMelding.toMap()) @@ -84,7 +79,6 @@ class OpprettSelvbestemtSakRiverTest : initiellStatus = SaksStatus.FERDIG, hardDeleteOm = any(), ) - mockSelvbestemtRepo.lagreSakId(innkommendeMelding.inntektsmelding.type.id, sakId) } } @@ -96,8 +90,6 @@ class OpprettSelvbestemtSakRiverTest : mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) } throws SakEllerOppgaveDuplikatException(duplikatSakId, "mock feilmelding") - every { mockSelvbestemtRepo.lagreSakId(any(), any()) } returns 1 - testRapid.sendJson(innkommendeMelding.toMap()) testRapid.inspektør.size shouldBeExactly 1 @@ -115,70 +107,33 @@ class OpprettSelvbestemtSakRiverTest : coVerifySequence { mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) - mockSelvbestemtRepo.lagreSakId(innkommendeMelding.inntektsmelding.type.id, duplikatSakId) } } - context("håndterer feil") { - - test("fra klient") { - val innkommendeMelding = innkommendeMelding() - val forventetFail = innkommendeMelding.toFail() - - coEvery { - mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) - } throws RuntimeException("RIP in peace") - - testRapid.sendJson(innkommendeMelding.toMap()) - - testRapid.inspektør.size shouldBeExactly 1 - - testRapid.firstMessage().toMap() shouldContainExactly - forventetFail - .tilMelding() - .minus(Key.FORESPOERSEL_ID) - .plus( - Key.SELVBESTEMT_ID to - innkommendeMelding.inntektsmelding.type.id - .toJson(), - ) - - coVerifySequence { - mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) - } - verify(exactly = 0) { - mockSelvbestemtRepo.lagreSakId(any(), any()) - } - } - - test("fra repo") { - val innkommendeMelding = innkommendeMelding() - val forventetFail = innkommendeMelding.toFail() - - coEvery { - mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) - } returns UUID.randomUUID().toString() + test("håndterer feil fra klient") { + val innkommendeMelding = innkommendeMelding() + val forventetFail = innkommendeMelding.toFail() - every { mockSelvbestemtRepo.lagreSakId(any(), any()) } throws RuntimeException("RIPperoni") + coEvery { + mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) + } throws RuntimeException("RIP in peace") - testRapid.sendJson(innkommendeMelding.toMap()) + testRapid.sendJson(innkommendeMelding.toMap()) - testRapid.inspektør.size shouldBeExactly 1 + testRapid.inspektør.size shouldBeExactly 1 - testRapid.firstMessage().toMap() shouldContainExactly - forventetFail - .tilMelding() - .minus(Key.FORESPOERSEL_ID) - .plus( - Key.SELVBESTEMT_ID to - innkommendeMelding.inntektsmelding.type.id - .toJson(), - ) + testRapid.firstMessage().toMap() shouldContainExactly + forventetFail + .tilMelding() + .minus(Key.FORESPOERSEL_ID) + .plus( + Key.SELVBESTEMT_ID to + innkommendeMelding.inntektsmelding.type.id + .toJson(), + ) - coVerifySequence { - mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) - mockSelvbestemtRepo.lagreSakId(any(), any()) - } + coVerifySequence { + mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) } } @@ -200,7 +155,6 @@ class OpprettSelvbestemtSakRiverTest : coVerify(exactly = 0) { mockagNotifikasjonKlient.opprettNySak(any(), any(), any(), any(), any(), any(), any(), any(), any()) - mockSelvbestemtRepo.lagreSakId(any(), any()) } } } From 2f92e423058d00536957a8322e42cc7d9f33d949 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga <6940327+bjerga@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:06:55 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Skru=20p=C3=A5=20cascading=20delete=20for?= =?UTF-8?q?=20notifikasjondatabase=20(#752)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/nais.yml | 8 ++++++-- config/notifikasjon/dev-gcp.yml | 1 + config/notifikasjon/prod-gcp.yml | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/nais.yml b/config/nais.yml index a899e3c436..2405aae9e6 100644 --- a/config/nais.yml +++ b/config/nais.yml @@ -58,6 +58,9 @@ spec: gcp: sqlInstances: - type: POSTGRES_14 + {{#if database.cascadingDelete}} + cascadingDelete: {{ database.cascadingDelete }} + {{/if}} tier: {{ database.tier }} databases: - name: {{ database.name }} @@ -73,9 +76,10 @@ spec: {{/if}} {{#if envFrom}} envFrom: - {{# each envFrom as |item| }} + {{# each envFrom as |item| }} - {{ item.type }}: {{ item.name }} - {{/each}}{{/if}} + {{/each}} + {{/if}} env: - name: KAFKA_CONSUMER_GROUP_ID value: helsearbeidsgiver-im-{{app}}-v1 diff --git a/config/notifikasjon/dev-gcp.yml b/config/notifikasjon/dev-gcp.yml index 21d0e36bde..9c77ab53f7 100644 --- a/config/notifikasjon/dev-gcp.yml +++ b/config/notifikasjon/dev-gcp.yml @@ -5,6 +5,7 @@ database: name: notifikasjon tier: db-custom-1-3840 logicalDecoding: true + cascadingDelete: true envFrom: - type: secret name: google-sql-im-notifikasjon diff --git a/config/notifikasjon/prod-gcp.yml b/config/notifikasjon/prod-gcp.yml index 7eda82a140..fd6dc16c98 100644 --- a/config/notifikasjon/prod-gcp.yml +++ b/config/notifikasjon/prod-gcp.yml @@ -5,6 +5,7 @@ database: name: notifikasjon tier: db-custom-1-3840 logicalDecoding: true + cascadingDelete: true envFrom: - type: secret name: google-sql-im-notifikasjon From 1a2bec6906bc3e211969710bf67075ddd415fde1 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga <6940327+bjerga@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:23:32 +0100 Subject: [PATCH 3/5] =?UTF-8?q?Fjern=20lagring=20av=20foresp=C3=B8rsel=20(?= =?UTF-8?q?#753)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fjern lagring av forespørsel * Fjern test for flere behov (kun ett behov mulig) --- .../inntektsmelding/db/App.kt | 8 +-- .../db/ForespoerselRepository.kt | 24 ------- .../db/river/LagreForespoerselRiver.kt | 72 ------------------- .../db/tabell/ForespoerselEntitet.kt | 10 --- .../feilbehandler/river/FeilLytter.kt | 1 - .../feilbehandler/river/FeilLytterTest.kt | 28 -------- .../helsearbeidsgiver/felles/EventTypes.kt | 3 - .../ForespoerselMottattRiver.kt | 16 +---- .../ForespoerselMottattRiverTest.kt | 14 ++-- .../integrasjonstest/ForespoerselMottattIT.kt | 65 +++++++---------- .../integrasjonstest/utils/EndToEndTest.kt | 4 +- .../HentDataTilSakOgOppgaveService.kt | 16 +---- .../OpprettForespoerselSakOgOppgaveRiver.kt | 4 +- .../HentDataTilSakOgOppgaveServiceTest.kt | 25 +++---- 14 files changed, 51 insertions(+), 239 deletions(-) delete mode 100644 db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt delete mode 100644 db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreForespoerselRiver.kt delete mode 100644 db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/tabell/ForespoerselEntitet.kt diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt index 627fa64e52..b40e1edf54 100644 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt +++ b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt @@ -7,7 +7,6 @@ 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.LagreEksternImRiver -import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreForespoerselRiver import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreImRiver import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreImSkjemaRiver import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreJournalpostIdRiver @@ -25,11 +24,10 @@ fun main() { val imRepo = InntektsmeldingRepository(database.db) val selvbestemtImRepo = SelvbestemtImRepo(database.db) - val forespoerselRepo = ForespoerselRepository(database.db) return RapidApplication .create(System.getenv()) - .createDbRivers(imRepo, selvbestemtImRepo, forespoerselRepo) + .createDbRivers(imRepo, selvbestemtImRepo) .registerShutdownLifecycle { logger.info("Stoppsignal mottatt, lukker databasetilkobling.") database.dataSource.close() @@ -39,12 +37,8 @@ fun main() { fun RapidsConnection.createDbRivers( imRepo: InntektsmeldingRepository, selvbestemtImRepo: SelvbestemtImRepo, - forespoerselRepo: ForespoerselRepository, ): RapidsConnection = also { - logger.info("Starter ${LagreForespoerselRiver::class.simpleName}...") - LagreForespoerselRiver(forespoerselRepo).connect(this) - logger.info("Starter ${HentLagretImRiver::class.simpleName}...") HentLagretImRiver(imRepo).connect(this) diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt deleted file mode 100644 index 3054eb3f9b..0000000000 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt +++ /dev/null @@ -1,24 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.db - -import no.nav.helsearbeidsgiver.inntektsmelding.db.tabell.ForespoerselEntitet -import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.insert -import org.jetbrains.exposed.sql.transactions.transaction -import java.time.LocalDateTime - -class ForespoerselRepository( - private val db: Database, -) { - fun lagreForespoersel( - forespoerselId: String, - organisasjonsnummer: String, - ) { - transaction(db) { - ForespoerselEntitet.insert { - it[this.forespoerselId] = forespoerselId - it[orgnr] = organisasjonsnummer - it[opprettet] = LocalDateTime.now() - } - } - } -} diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreForespoerselRiver.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreForespoerselRiver.kt deleted file mode 100644 index 9d48da4e94..0000000000 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreForespoerselRiver.kt +++ /dev/null @@ -1,72 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.db.river - -import kotlinx.serialization.json.JsonElement -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.toMap -import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver -import no.nav.helsearbeidsgiver.felles.utils.Log -import no.nav.helsearbeidsgiver.inntektsmelding.db.ForespoerselRepository -import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer -import no.nav.helsearbeidsgiver.utils.log.logger -import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr -import java.util.UUID - -data class LagreForespoerselMelding( - val eventName: EventName, - val behovType: BehovType, - val transaksjonId: UUID, - val forespoerselId: UUID, - val orgnr: Orgnr, -) - -class LagreForespoerselRiver( - private val repository: ForespoerselRepository, -) : ObjectRiver() { - private val logger = logger() - private val sikkerLogger = sikkerLogger() - - override fun les(json: Map): LagreForespoerselMelding? = - if (Key.FAIL in json) { - null - } else { - val data = json[Key.DATA]?.toMap().orEmpty() - - LagreForespoerselMelding( - eventName = Key.EVENT_NAME.les(EventName.serializer(), json), - behovType = Key.BEHOV.krev(BehovType.LAGRE_FORESPOERSEL, BehovType.serializer(), json), - transaksjonId = Key.UUID.les(UuidSerializer, json), - forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, data), - orgnr = Key.ORGNRUNDERENHET.les(Orgnr.serializer(), data), - ) - } - - override fun LagreForespoerselMelding.haandter(json: Map): Map? { - repository.lagreForespoersel(forespoerselId.toString(), orgnr.verdi) - return null - } - - override fun LagreForespoerselMelding.haandterFeil( - json: Map, - error: Throwable, - ): Map? { - "Klarte ikke lagre forespørsel.".also { - logger.error(it) - sikkerLogger.error(it, error) - } - return null - } - - override fun LagreForespoerselMelding.loggfelt(): Map = - mapOf( - Log.klasse(this@LagreForespoerselRiver), - Log.event(eventName), - Log.behov(behovType), - Log.transaksjonId(transaksjonId), - Log.forespoerselId(forespoerselId), - ) -} diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/tabell/ForespoerselEntitet.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/tabell/ForespoerselEntitet.kt deleted file mode 100644 index 06bd9f96f8..0000000000 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/tabell/ForespoerselEntitet.kt +++ /dev/null @@ -1,10 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.db.tabell - -import org.jetbrains.exposed.sql.Table -import org.jetbrains.exposed.sql.javatime.datetime - -object ForespoerselEntitet : Table("forespoersel") { - val forespoerselId = varchar(name = "forespoersel_id", length = 40) - val orgnr = text("orgnr") - val opprettet = datetime("opprettet") -} diff --git a/feil-behandler/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytter.kt b/feil-behandler/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytter.kt index 0d6c3caff4..b94405bb98 100644 --- a/feil-behandler/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytter.kt +++ b/feil-behandler/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytter.kt @@ -32,7 +32,6 @@ class FeilLytter( private val sikkerLogger = sikkerLogger() val behovSomHaandteres = listOf( - BehovType.LAGRE_FORESPOERSEL, BehovType.JOURNALFOER, ) val eventerSomHaandteres = diff --git a/feil-behandler/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytterTest.kt b/feil-behandler/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytterTest.kt index be351c640f..1d30b1b303 100644 --- a/feil-behandler/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytterTest.kt +++ b/feil-behandler/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/feilbehandler/river/FeilLytterTest.kt @@ -3,12 +3,10 @@ package no.nav.helsearbeidsgiver.inntektsmelding.feilbehandler.river import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.booleans.shouldBeTrue -import io.kotest.matchers.equals.shouldNotBeEqual import io.kotest.matchers.ints.shouldBeExactly import io.kotest.matchers.maps.shouldContainExactly import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe -import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonElement import no.nav.hag.utils.bakgrunnsjobb.Bakgrunnsjobb import no.nav.hag.utils.bakgrunnsjobb.BakgrunnsjobbStatus @@ -16,7 +14,6 @@ import no.nav.hag.utils.bakgrunnsjobb.MockBakgrunnsjobbRepository import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName 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.model.Fail @@ -122,31 +119,6 @@ class FeilLytterTest : repository.findByKjoeretidBeforeAndStatusIn(now.plusMinutes(1), setOf(BakgrunnsjobbStatus.STOPPET), true).size shouldBe 1 } - test("Flere feil i en lang verdikjede (ny feil / nytt behov og ny transaksjon etter en OK rekjøring) skal opprette en ny feil") { - val now = LocalDateTime.now() - val transaksjonId = UUID.randomUUID() - val feilmeldingJournalfoer = lagRapidFeilmelding(BehovType.JOURNALFOER, transaksjonId) - rapid.sendTestMessage(feilmeldingJournalfoer) - repository.findByKjoeretidBeforeAndStatusIn(now.plusMinutes(1), setOf(BakgrunnsjobbStatus.OPPRETTET), true).size shouldBe 1 - // nå kjører bakgrunnsjobb, plukker opp feilen og rekjører - det går fint, så feilen kommer ikke på nytt. - // Istedet feiler neste steg - nytt behov fra samme transaksjon - val feilmeldingLagre = lagRapidFeilmelding(BehovType.LAGRE_FORESPOERSEL, transaksjonId) - rapid.sendTestMessage(feilmeldingLagre) - // status på gammel jobb blir ikke oppdatert i denne testen.. - repository.findByKjoeretidBeforeAndStatusIn(now.plusMinutes(1), setOf(BakgrunnsjobbStatus.OPPRETTET), true).size shouldBe 2 - - val utloesendeMelding = repository.findByKjoeretidBeforeAndStatusIn(now.plusMinutes(1), setOf(BakgrunnsjobbStatus.OPPRETTET), true)[1].data - val nyTransaksjonId = Key.UUID.les(UuidSerializer, Json.parseToJsonElement(utloesendeMelding).toMap()) - transaksjonId shouldNotBeEqual nyTransaksjonId - - val nyFeilmeldingLagre = lagRapidFeilmelding(BehovType.LAGRE_FORESPOERSEL, nyTransaksjonId) - rapid.sendTestMessage(nyFeilmeldingLagre) // !! ny tx, ikke samme igjen! - - // Bakgrunnsjobben har blitt oppdatert og går til status FEILET.. - repository.findByKjoeretidBeforeAndStatusIn(now.plusMinutes(1), setOf(BakgrunnsjobbStatus.OPPRETTET), true).size shouldBe 1 - repository.findByKjoeretidBeforeAndStatusIn(now.plusMinutes(1), setOf(BakgrunnsjobbStatus.FEILET), true).size shouldBe 1 - } - test("ved flere feil på samme transaksjon-ID og event, så oppdateres eksisterende jobb") { val omEttMinutt = LocalDateTime.now().plusMinutes(1) val forespoerselMottattFail = lagFail(EventName.FORESPOERSEL_MOTTATT) diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt index fc3b88597e..77f0d4dd44 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt @@ -23,9 +23,6 @@ enum class BehovType { LAGRE_SELVBESTEMT_IM, OPPRETT_SELVBESTEMT_SAK, - // Asynkrone endringer - LAGRE_FORESPOERSEL, // TODO slett etter databasen er flyttet - // Asynkrone endringer, men brukt til å prøve igjen ved feil JOURNALFOER, DISTRIBUER_IM, diff --git a/forespoersel-mottatt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiver.kt b/forespoersel-mottatt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiver.kt index c3c1ed8c54..684dec4546 100644 --- a/forespoersel-mottatt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiver.kt +++ b/forespoersel-mottatt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiver.kt @@ -18,18 +18,14 @@ import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.json.toPretty import no.nav.helsearbeidsgiver.utils.log.logger import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -import no.nav.helsearbeidsgiver.utils.wrapper.Fnr -import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import java.util.UUID data class Melding( val notisType: Pri.NotisType, val transaksjonId: UUID, val forespoerselId: UUID, - val orgnr: Orgnr, - val fnr: Fnr, - val skalHaPaaminnelse: Boolean, val forespoerselFraBro: ForespoerselFraBro, + val skalHaPaaminnelse: Boolean, ) /** Tar imot notifikasjon om at det er kommet en forespørsel om arbeidsgiveropplysninger. */ @@ -42,10 +38,8 @@ class ForespoerselMottattRiver : PriObjectRiver() { notisType = Pri.Key.NOTIS.krev(Pri.NotisType.FORESPØRSEL_MOTTATT, Pri.NotisType.serializer(), json), transaksjonId = UUID.randomUUID(), forespoerselId = Pri.Key.FORESPOERSEL_ID.les(UuidSerializer, json), - orgnr = Pri.Key.ORGNR.les(Orgnr.serializer(), json), - fnr = Pri.Key.FNR.les(Fnr.serializer(), json), - skalHaPaaminnelse = Pri.Key.SKAL_HA_PAAMINNELSE.les(Boolean.serializer(), json), forespoerselFraBro = Pri.Key.FORESPOERSEL.les(ForespoerselFraBro.serializer(), json), + skalHaPaaminnelse = Pri.Key.SKAL_HA_PAAMINNELSE.les(Boolean.serializer(), json), ) override fun Melding.haandter(json: Map): Map { @@ -58,12 +52,8 @@ class ForespoerselMottattRiver : PriObjectRiver() { Key.DATA to mapOf( Key.FORESPOERSEL_ID to forespoerselId.toJson(), - // TODO kan fjernes etter overgangsfase - Key.ORGNRUNDERENHET to orgnr.toJson(), - // TODO kan fjernes etter overgangsfase - Key.FNR to fnr.toJson(), - Key.SKAL_HA_PAAMINNELSE to skalHaPaaminnelse.toJson(Boolean.serializer()), Key.FORESPOERSEL to forespoerselFraBro.toForespoersel().toJson(Forespoersel.serializer()), + Key.SKAL_HA_PAAMINNELSE to skalHaPaaminnelse.toJson(Boolean.serializer()), ).toJson(), ) } diff --git a/forespoersel-mottatt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiverTest.kt b/forespoersel-mottatt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiverTest.kt index 3d8f470a8e..7536f2cea3 100644 --- a/forespoersel-mottatt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiverTest.kt +++ b/forespoersel-mottatt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselmottatt/ForespoerselMottattRiverTest.kt @@ -54,10 +54,8 @@ class ForespoerselMottattRiverTest : Key.DATA to mapOf( Key.FORESPOERSEL_ID to innkommendeMelding.forespoerselId.toJson(), - Key.ORGNRUNDERENHET to innkommendeMelding.orgnr.toJson(), - Key.FNR to innkommendeMelding.fnr.toJson(), - Key.SKAL_HA_PAAMINNELSE to innkommendeMelding.skalHaPaaminnelse.toJson(Boolean.serializer()), Key.FORESPOERSEL to innkommendeMelding.forespoerselFraBro.toForespoersel().toJson(Forespoersel.serializer()), + Key.SKAL_HA_PAAMINNELSE to innkommendeMelding.skalHaPaaminnelse.toJson(Boolean.serializer()), ).toJson(), ) } @@ -68,24 +66,20 @@ private fun mockInnkommendeMelding(): Melding = notisType = Pri.NotisType.FORESPØRSEL_MOTTATT, transaksjonId = UUID.randomUUID(), forespoerselId = UUID.randomUUID(), - orgnr = Orgnr.genererGyldig(), - fnr = Fnr.genererGyldig(), - skalHaPaaminnelse = true, forespoerselFraBro = Mock.forespoerselFraBro, + skalHaPaaminnelse = true, ) private fun Melding.toMap(): Map = mapOf( Pri.Key.NOTIS to notisType.toJson(Pri.NotisType.serializer()), Pri.Key.FORESPOERSEL_ID to forespoerselId.toJson(), - Pri.Key.ORGNR to orgnr.toJson(), - Pri.Key.FNR to fnr.toJson(), - Pri.Key.SKAL_HA_PAAMINNELSE to skalHaPaaminnelse.toJson(Boolean.serializer()), Pri.Key.FORESPOERSEL to forespoerselFraBro.toJson(ForespoerselFraBro.serializer()), + Pri.Key.SKAL_HA_PAAMINNELSE to skalHaPaaminnelse.toJson(Boolean.serializer()), ) object Mock { - val orgnr = Orgnr.genererGyldig() + private val orgnr = Orgnr.genererGyldig() val forespoerselFraBro = ForespoerselFraBro( orgnr = orgnr, diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselMottattIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselMottattIT.kt index 1133e008df..1cb3b918e3 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselMottattIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselMottattIT.kt @@ -8,12 +8,12 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.domene.Forespoersel import no.nav.helsearbeidsgiver.felles.domene.ForespoerselFraBro import no.nav.helsearbeidsgiver.felles.domene.Person import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.orgMapSerializer import no.nav.helsearbeidsgiver.felles.json.personMapSerializer -import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.Pri import no.nav.helsearbeidsgiver.felles.test.mock.mockForespurtData @@ -45,22 +45,9 @@ class ForespoerselMottattIT : EndToEndTest() { publish( Pri.Key.NOTIS to Pri.NotisType.FORESPØRSEL_MOTTATT.toJson(Pri.NotisType.serializer()), - Pri.Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), - Pri.Key.ORGNR to Mock.orgnr.toJson(), - Pri.Key.FNR to Mock.fnr.toJson(), - Pri.Key.SKAL_HA_PAAMINNELSE to Mock.skalHaPaaminnelse.toJson(Boolean.serializer()), - Pri.Key.FORESPOERSEL to - ForespoerselFraBro( - orgnr = Mock.orgnr, - fnr = Mock.fnr, - forespoerselId = Mock.forespoerselId, - vedtaksperiodeId = UUID.randomUUID(), - sykmeldingsperioder = listOf(23.januar til 15.mars), - egenmeldingsperioder = emptyList(), - bestemmendeFravaersdager = emptyMap(), - forespurtData = mockForespurtData(), - erBesvart = false, - ).toJson(ForespoerselFraBro.serializer()), + Pri.Key.FORESPOERSEL_ID to Mock.forespoersel.forespoerselId.toJson(), + Pri.Key.FORESPOERSEL to Mock.forespoersel.toJson(ForespoerselFraBro.serializer()), + Pri.Key.SKAL_HA_PAAMINNELSE to Mock.SKAL_HA_PAAMINNELSE.toJson(Boolean.serializer()), ) val messagesFilteredForespoerselMottatt = messages.filter(EventName.FORESPOERSEL_MOTTATT) @@ -73,18 +60,9 @@ class ForespoerselMottattIT : EndToEndTest() { Key.EVENT_NAME.lesOrNull(EventName.serializer(), it) shouldBe EventName.FORESPOERSEL_MOTTATT val data = it[Key.DATA].shouldNotBeNull().toMap() - Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, data) shouldBe Mock.forespoerselId - Key.ORGNRUNDERENHET.lesOrNull(Orgnr.serializer(), data) shouldBe Mock.orgnr - Key.FNR.lesOrNull(Fnr.serializer(), data) shouldBe Mock.fnr - } - - messagesFilteredForespoerselMottatt - .filter(BehovType.LAGRE_FORESPOERSEL) - .firstAsMap() - .also { - val data = it[Key.DATA].shouldNotBeNull().toMap() - data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId - data[Key.ORGNRUNDERENHET]?.fromJson(Orgnr.serializer()) shouldBe Mock.orgnr + Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, data) shouldBe Mock.forespoersel.forespoerselId + Key.FORESPOERSEL.lesOrNull(Forespoersel.serializer(), data) shouldBe Mock.forespoersel.toForespoersel() + Key.SKAL_HA_PAAMINNELSE.lesOrNull(Boolean.serializer(), data) shouldBe Mock.SKAL_HA_PAAMINNELSE } messagesFilteredForespoerselMottatt @@ -92,7 +70,7 @@ class ForespoerselMottattIT : EndToEndTest() { .firstAsMap() .also { val data = it[Key.DATA].shouldNotBeNull().toMap() - data[Key.ORGNR_UNDERENHETER]?.fromJson(Orgnr.serializer().set()) shouldBe setOf(Mock.orgnr) + data[Key.ORGNR_UNDERENHETER]?.fromJson(Orgnr.serializer().set()) shouldBe setOf(Mock.forespoersel.orgnr) } messagesFilteredForespoerselMottatt @@ -100,7 +78,7 @@ class ForespoerselMottattIT : EndToEndTest() { .firstAsMap() .also { val data = it[Key.DATA].shouldNotBeNull().toMap() - data[Key.FNR_LISTE]?.fromJson(Fnr.serializer().set()) shouldBe setOf(Mock.fnr) + data[Key.FNR_LISTE]?.fromJson(Fnr.serializer().set()) shouldBe setOf(Mock.forespoersel.fnr) } messagesFilteredForespoerselMottatt @@ -133,9 +111,9 @@ class ForespoerselMottattIT : EndToEndTest() { data[Key.SYKMELDT]?.fromJson(Person.serializer()).shouldNotBeNull() data[Key.VIRKSOMHET]?.fromJson(String.serializer()).shouldNotBeNull() - data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId - data[Key.ORGNRUNDERENHET]?.fromJson(Orgnr.serializer()) shouldBe Mock.orgnr - data[Key.SKAL_HA_PAAMINNELSE]?.fromJson(Boolean.serializer()) shouldBe Mock.skalHaPaaminnelse + data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoersel.forespoerselId + data[Key.FORESPOERSEL]?.fromJson(Forespoersel.serializer()) shouldBe Mock.forespoersel.toForespoersel() + data[Key.SKAL_HA_PAAMINNELSE]?.fromJson(Boolean.serializer()) shouldBe Mock.SKAL_HA_PAAMINNELSE } messages @@ -143,18 +121,27 @@ class ForespoerselMottattIT : EndToEndTest() { .firstAsMap() .also { val data = it[Key.DATA].shouldNotBeNull().toMap() - data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoerselId + data[Key.FORESPOERSEL_ID]?.fromJson(UuidSerializer) shouldBe Mock.forespoersel.forespoerselId data[Key.SAK_ID]?.fromJson(String.serializer()) shouldBe Mock.sakId data[Key.OPPGAVE_ID]?.fromJson(String.serializer()) shouldBe Mock.oppgaveId } } private object Mock { - val forespoerselId: UUID = UUID.randomUUID() - val orgnr = Orgnr.genererGyldig() - val fnr = Fnr.genererGyldig() + const val SKAL_HA_PAAMINNELSE = false + val forespoersel = + ForespoerselFraBro( + orgnr = Orgnr.genererGyldig(), + fnr = Fnr.genererGyldig(), + forespoerselId = UUID.randomUUID(), + vedtaksperiodeId = UUID.randomUUID(), + sykmeldingsperioder = listOf(23.januar til 15.mars), + egenmeldingsperioder = emptyList(), + bestemmendeFravaersdager = emptyMap(), + forespurtData = mockForespurtData(), + erBesvart = false, + ) val sakId = UUID.randomUUID().toString() val oppgaveId = UUID.randomUUID().toString() - val skalHaPaaminnelse = false } } diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt index 05cf205dd8..8ce56164e0 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt @@ -38,7 +38,6 @@ import no.nav.helsearbeidsgiver.inntektsmelding.brospinn.SpinnKlient import no.nav.helsearbeidsgiver.inntektsmelding.brospinn.createHentEksternImRiver import no.nav.helsearbeidsgiver.inntektsmelding.brospinn.createSpinnService import no.nav.helsearbeidsgiver.inntektsmelding.brreg.createBrregRiver -import no.nav.helsearbeidsgiver.inntektsmelding.db.ForespoerselRepository import no.nav.helsearbeidsgiver.inntektsmelding.db.InntektsmeldingRepository import no.nav.helsearbeidsgiver.inntektsmelding.db.SelvbestemtImRepo import no.nav.helsearbeidsgiver.inntektsmelding.db.createDbRivers @@ -169,7 +168,6 @@ abstract class EndToEndTest : ContainerTest() { val imRepository by lazy { InntektsmeldingRepository(inntektsmeldingDatabase.db) } val selvbestemtImRepo by lazy { SelvbestemtImRepo(inntektsmeldingDatabase.db) } - private val forespoerselRepository by lazy { ForespoerselRepository(inntektsmeldingDatabase.db) } val bakgrunnsjobbRepository by lazy { PostgresBakgrunnsjobbRepository(bakgrunnsjobbDatabase.dataSource) } @@ -230,7 +228,7 @@ abstract class EndToEndTest : ContainerTest() { createAaregRiver(aaregClient) createAltinn(altinnClient) createBrregRiver(brregClient, false) - createDbRivers(imRepository, selvbestemtImRepo, forespoerselRepository) + createDbRivers(imRepository, selvbestemtImRepo) createDistribusjonRiver(mockk(relaxed = true)) createForespoerselBesvartRivers() createForespoerselMottattRiver() diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveService.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveService.kt index 7ce89198df..1f6d4713cc 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveService.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveService.kt @@ -27,8 +27,8 @@ import java.util.UUID data class Steg0( val transaksjonId: UUID, val forespoerselId: UUID, - val skalHaPaaminnelse: Boolean, val forespoersel: Forespoersel, + val skalHaPaaminnelse: Boolean, ) data class Steg1( @@ -51,8 +51,8 @@ class HentDataTilSakOgOppgaveService( Steg0( transaksjonId = Key.UUID.les(UuidSerializer, melding), forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, melding), - skalHaPaaminnelse = Key.SKAL_HA_PAAMINNELSE.les(Boolean.serializer(), melding), forespoersel = Key.FORESPOERSEL.les(Forespoersel.serializer(), melding), + skalHaPaaminnelse = Key.SKAL_HA_PAAMINNELSE.les(Boolean.serializer(), melding), ) override fun lesSteg1(melding: Map): Steg1 = @@ -74,14 +74,6 @@ class HentDataTilSakOgOppgaveService( sikkerLogger.info(it) } - // Brukes midlertidig til å lagre forespørsel, til tabellen fjernes - rapid.publish( - Key.EVENT_NAME to eventName.toJson(), - Key.BEHOV to BehovType.LAGRE_FORESPOERSEL.toJson(BehovType.serializer()), - Key.UUID to steg0.transaksjonId.toJson(), - Key.DATA to data.toJson(), - ) - rapid.publish( Key.EVENT_NAME to eventName.toJson(), Key.BEHOV to BehovType.HENT_VIRKSOMHET_NAVN.toJson(), @@ -132,12 +124,10 @@ class HentDataTilSakOgOppgaveService( Key.DATA to mapOf( Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(), - // TODO kan fjernes etter overgangsfase - Key.ORGNRUNDERENHET to steg0.forespoersel.orgnr.toJson(), + Key.FORESPOERSEL to steg0.forespoersel.toJson(Forespoersel.serializer()), Key.SYKMELDT to sykmeldt.toJson(Person.serializer()), Key.VIRKSOMHET to orgNavn.toJson(), Key.SKAL_HA_PAAMINNELSE to steg0.skalHaPaaminnelse.toJson(Boolean.serializer()), - Key.FORESPOERSEL to steg0.forespoersel.toJson(Forespoersel.serializer()), ).toJson(), ) } diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiver.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiver.kt index 402ad04708..22ef49de9d 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiver.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiver.kt @@ -29,10 +29,10 @@ data class OpprettForespoerselSakOgOppgaveMelding( val eventName: EventName, val transaksjonId: UUID, val forespoerselId: UUID, + val forespoersel: Forespoersel, val sykmeldt: Person, val orgNavn: String, val skalHaPaaminnelse: Boolean, - val forespoersel: Forespoersel, ) class OpprettForespoerselSakOgOppgaveRiver( @@ -53,10 +53,10 @@ class OpprettForespoerselSakOgOppgaveRiver( eventName = Key.EVENT_NAME.krev(EventName.SAK_OG_OPPGAVE_OPPRETT_REQUESTED, EventName.serializer(), json), transaksjonId = Key.UUID.les(UuidSerializer, json), forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, data), + forespoersel = Key.FORESPOERSEL.les(Forespoersel.serializer(), data), sykmeldt = Key.SYKMELDT.les(Person.serializer(), data), orgNavn = Key.VIRKSOMHET.les(String.serializer(), data), skalHaPaaminnelse = Key.SKAL_HA_PAAMINNELSE.les(Boolean.serializer(), data), - forespoersel = Key.FORESPOERSEL.les(Forespoersel.serializer(), data), ) } diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveServiceTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveServiceTest.kt index 92633ea6f9..882a9b13f0 100644 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveServiceTest.kt +++ b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/HentDataTilSakOgOppgaveServiceTest.kt @@ -46,26 +46,25 @@ class HentDataTilSakOgOppgaveServiceTest : testRapid.sendJson(Mock.steg0()) - testRapid.inspektør.size shouldBeExactly 2 - testRapid.firstMessage().lesBehov() shouldBe BehovType.LAGRE_FORESPOERSEL - testRapid.message(1).lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN + testRapid.inspektør.size shouldBeExactly 1 + testRapid.firstMessage().lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN testRapid.sendJson(Mock.steg1()) - testRapid.inspektør.size shouldBeExactly 3 - testRapid.message(2).lesBehov() shouldBe BehovType.HENT_PERSONER + testRapid.inspektør.size shouldBeExactly 2 + testRapid.message(1).lesBehov() shouldBe BehovType.HENT_PERSONER testRapid.sendJson(Mock.steg2()) - testRapid.inspektør.size shouldBeExactly 4 - testRapid.message(3).toMap() shouldContainExactly + testRapid.inspektør.size shouldBeExactly 3 + testRapid.message(2).toMap() shouldContainExactly mapOf( Key.EVENT_NAME to EventName.SAK_OG_OPPGAVE_OPPRETT_REQUESTED.toJson(), Key.UUID to Mock.transaksjonId.toJson(), Key.DATA to mapOf( Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), - Key.ORGNRUNDERENHET to Mock.forespoersel.orgnr.toJson(), + Key.FORESPOERSEL to Mock.forespoersel.toJson(Forespoersel.serializer()), Key.SYKMELDT to Mock.personer.values .first() @@ -75,7 +74,6 @@ class HentDataTilSakOgOppgaveServiceTest : .first() .toJson(), Key.SKAL_HA_PAAMINNELSE to Mock.SKAL_HA_PAAMINNELSE.toJson(Boolean.serializer()), - Key.FORESPOERSEL to Mock.forespoersel.toJson(Forespoersel.serializer()), ).toJson(), ) } @@ -97,13 +95,12 @@ class HentDataTilSakOgOppgaveServiceTest : testRapid.sendJson(Mock.steg0()) - testRapid.inspektør.size shouldBeExactly 2 - testRapid.firstMessage().lesBehov() shouldBe BehovType.LAGRE_FORESPOERSEL - testRapid.message(1).lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN + testRapid.inspektør.size shouldBeExactly 1 + testRapid.firstMessage().lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN testRapid.sendJson(fail.tilMelding()) - testRapid.inspektør.size shouldBeExactly 2 + testRapid.inspektør.size shouldBeExactly 1 } }) @@ -122,8 +119,8 @@ private object Mock { Key.DATA to mapOf( Key.FORESPOERSEL_ID to forespoerselId.toJson(), - Key.SKAL_HA_PAAMINNELSE to SKAL_HA_PAAMINNELSE.toJson(Boolean.serializer()), Key.FORESPOERSEL to forespoersel.toJson(Forespoersel.serializer()), + Key.SKAL_HA_PAAMINNELSE to SKAL_HA_PAAMINNELSE.toJson(Boolean.serializer()), ).toJson(), ) From 4bb4dba26f993a0d843a5945b662aa301de924b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20S=C3=A6lensminde?= <41949947+magnusae@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:30:27 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Juster=20tittel=20og=20innhold=20i=20oppgav?= =?UTF-8?q?evarsel=20og=20p=C3=A5minnelse=20(#755)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endrer litt på formuleringer i epost/sms-varselet og påminnelsen for oppgaven. Sykmeldingsperioder i varselet. Tankestrek i påminnelsetittel. orgnr blir org.nr. (https://sprakradet.no/spraksporsmal-og-svar/forkorting-av-organisasjonsnummer-fodselsnummer-og-personnummer/) --- .../ArbeidsgiverNotifikasjonKlientUtils.kt | 16 ++++++++-------- .../OpprettForespoerselSakOgOppgaveRiverTest.kt | 9 +++++++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt index b601c6061b..9594fd8317 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt @@ -56,9 +56,10 @@ object NotifikasjonTekst { fun oppgaveInnhold( orgnr: Orgnr, orgNavn: String, + sykmeldingsperioder: List, ): String = listOf( - "$orgNavn - orgnr $orgnr: En av dine ansatte har søkt om sykepenger", + "$orgNavn - org.nr. $orgnr: En av dine ansatte har søkt om sykepenger for perioden ${sykmeldingsperioder.tilString()}", "og vi trenger inntektsmelding for å behandle søknaden.", "Logg inn på Min side – arbeidsgiver hos Nav.", "Hvis dere sender inntektsmelding via lønnssystem kan dere fortsatt gjøre dette,", @@ -71,11 +72,10 @@ object NotifikasjonTekst { sykmeldingsperioder: List, ): String = listOf( - "Nav venter fortsatt på inntektsmelding for en av deres ansatte for periode: ${sykmeldingsperioder.tilString()}.", - "Vi trenger inntektsmeldingen så snart som mulig,", - "ellers kan vi ikke behandle søknaden om sykepenger.", - "Logg inn på Min side – arbeidsgiver på Nav for å finne ut hvilken inntektsmelding det gjelder.", - "Gjelder $orgNavn – orgnr $orgnr.", + "Nav har ennå ikke mottatt inntektsmeldingen for en av deres ansatte for perioden ${sykmeldingsperioder.tilString()}.", + "For at vi skal kunne behandle søknaden om sykepenger, må inntektsmeldingen sendes inn så snart som mulig.", + "Vennligst logg inn på Min side – arbeidsgiver hos Nav for å se hvilken inntektsmelding det gjelder.", + "Arbeidsgiver: $orgNavn (org.nr. $orgnr).", ).joinToString(separator = " ") } @@ -190,12 +190,12 @@ fun ArbeidsgiverNotifikasjonKlient.opprettOppgave( lenke = lenke, tekst = NotifikasjonTekst.OPPGAVE_TEKST, varslingTittel = NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING, - varslingInnhold = NotifikasjonTekst.oppgaveInnhold(orgnr, orgNavn), + varslingInnhold = NotifikasjonTekst.oppgaveInnhold(orgnr, orgNavn, sykmeldingsPerioder), tidspunkt = null, paaminnelse = if (skalHaPaaminnelse && paaminnelseAktivert) { Paaminnelse( - tittel = "Påminnelse: ${NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING}", + tittel = "Påminnelse – ${NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING}", innhold = NotifikasjonTekst.paaminnelseInnhold(orgnr, orgNavn, sykmeldingsPerioder), tidMellomOppgaveopprettelseOgPaaminnelse = tidMellomOppgaveopprettelseOgPaaminnelse, ).also { logger.info("Satte påminnelse for forespørsel $forespoerselId") } diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiverTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiverTest.kt index be24f42311..884f10b70f 100644 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiverTest.kt +++ b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/OpprettForespoerselSakOgOppgaveRiverTest.kt @@ -91,11 +91,16 @@ class OpprettForespoerselSakOgOppgaveRiverTest : lenke = "en-slags-url/im-dialog/${innkommendeMelding.forespoerselId}", tekst = NotifikasjonTekst.OPPGAVE_TEKST, varslingTittel = NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING, - varslingInnhold = NotifikasjonTekst.oppgaveInnhold(innkommendeMelding.forespoersel.orgnr.let(::Orgnr), innkommendeMelding.orgNavn), + varslingInnhold = + NotifikasjonTekst.oppgaveInnhold( + innkommendeMelding.forespoersel.orgnr.let(::Orgnr), + innkommendeMelding.orgNavn, + innkommendeMelding.forespoersel.sykmeldingsperioder, + ), tidspunkt = null, paaminnelse = Paaminnelse( - tittel = "Påminnelse: ${NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING}", + tittel = "Påminnelse – ${NotifikasjonTekst.STATUS_TEKST_UNDER_BEHANDLING}", innhold = NotifikasjonTekst.paaminnelseInnhold( innkommendeMelding.forespoersel.orgnr.let(::Orgnr), From 3b83891ed5c720a05dae36c392672d318122d66e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20S=C3=A6lensminde?= <41949947+magnusae@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:27:02 +0100 Subject: [PATCH 5/5] Endre orgnr-format i varseltekst (#758) Endre orgnr format fordi den korrekte forkortelsen blir en lenke i epostvarselet --- .../notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt index 9594fd8317..e1c6208975 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ArbeidsgiverNotifikasjonKlientUtils.kt @@ -59,7 +59,7 @@ object NotifikasjonTekst { sykmeldingsperioder: List, ): String = listOf( - "$orgNavn - org.nr. $orgnr: En av dine ansatte har søkt om sykepenger for perioden ${sykmeldingsperioder.tilString()}", + "$orgNavn - orgnr $orgnr: En av dine ansatte har søkt om sykepenger for perioden ${sykmeldingsperioder.tilString()}", "og vi trenger inntektsmelding for å behandle søknaden.", "Logg inn på Min side – arbeidsgiver hos Nav.", "Hvis dere sender inntektsmelding via lønnssystem kan dere fortsatt gjøre dette,", @@ -75,7 +75,7 @@ object NotifikasjonTekst { "Nav har ennå ikke mottatt inntektsmeldingen for en av deres ansatte for perioden ${sykmeldingsperioder.tilString()}.", "For at vi skal kunne behandle søknaden om sykepenger, må inntektsmeldingen sendes inn så snart som mulig.", "Vennligst logg inn på Min side – arbeidsgiver hos Nav for å se hvilken inntektsmelding det gjelder.", - "Arbeidsgiver: $orgNavn (org.nr. $orgnr).", + "Arbeidsgiver: $orgNavn (orgnr $orgnr).", ).joinToString(separator = " ") }