diff --git a/src/main/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerService.kt b/src/main/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerService.kt index 7359bd5cf5..e4e43c2b6e 100644 --- a/src/main/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerService.kt +++ b/src/main/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerService.kt @@ -57,10 +57,6 @@ class ArbeidssoekerService( @Transactional fun behandleKafkaMeldingLogikk(kafkaMelding: Periode) { - if (!FeatureToggle.brukNyttArbeidssoekerregisterKafka(defaultUnleash)) { - secureLog.info("Bryter for å lytte på kafkameldinger fra nytt arbeidssøkerregister er skrudd av. Ignorerer melding.") - return - } val periodeId = kafkaMelding.id val identitetsnummer = kafkaMelding.identitetsnummer @@ -76,6 +72,14 @@ class ArbeidssoekerService( val aktorId = pdlIdentRepository.hentAktorIdForAktivBruker(fnr) sisteArbeidssoekerPeriodeRepository.slettSisteArbeidssoekerPeriode(fnr) + + if (kafkaMelding.avsluttet != null) { + secureLog.info("Slettet siste arbeidssøkerperiode med tilhørende opplysninger og profilering for bruker med fnr: $fnr") + opensearchIndexerV2.deleteOpplysningerOmArbeidssoeker(aktorId) + opensearchIndexerV2.deleteProfilering(aktorId) + return + } + sisteArbeidssoekerPeriodeRepository.insertSisteArbeidssoekerPeriode(ArbeidssoekerPeriodeEntity(periodeId, fnr.get())) secureLog.info("Lagret siste arbeidssøkerperiode for bruker med fnr: $fnr") @@ -115,10 +119,6 @@ class ArbeidssoekerService( @Transactional fun behandleKafkaMeldingLogikk(opplysninger: OpplysningerOmArbeidssoekerKafkaMelding) { - if (!FeatureToggle.brukNyttArbeidssoekerregisterKafka(defaultUnleash)) { - secureLog.info("Bryter for å lytte på kafkameldinger fra nytt arbeidssøkerregister er skrudd av. Ignorerer melding.") - return - } val arbeidssoekerPeriodeId = opplysninger.periodeId val opplysningerOmArbeidssoekerId = opplysninger.id diff --git a/src/main/java/no/nav/pto/veilarbportefolje/opensearch/OpensearchIndexerV2.java b/src/main/java/no/nav/pto/veilarbportefolje/opensearch/OpensearchIndexerV2.java index 96d9b2a80e..ae12cf87d3 100644 --- a/src/main/java/no/nav/pto/veilarbportefolje/opensearch/OpensearchIndexerV2.java +++ b/src/main/java/no/nav/pto/veilarbportefolje/opensearch/OpensearchIndexerV2.java @@ -62,6 +62,30 @@ public void updateOpplysningerOmArbeidssoeker(AktorId aktoerId, OpplysningerOmAr update(aktoerId, content, "Oppdater opplysninger om arbeidssøker"); } + @SneakyThrows + public void deleteProfilering(AktorId aktoerId) { + final XContentBuilder content = jsonBuilder() + .startObject() + .nullField("profilering_resultat") + .endObject(); + + update(aktoerId, content, "Oppdater profileringsresultat"); + } + + @SneakyThrows + public void deleteOpplysningerOmArbeidssoeker(AktorId aktoerId) { + final XContentBuilder content = jsonBuilder() + .startObject() + .nullField("brukers_situasjoner") + .nullField("utdanning") + .nullField("utdanning_bestatt") + .nullField("utdanning_godkjent") + .nullField("utdanning_og_situasjon_sist_endret") + .endObject(); + + update(aktoerId, content, "Oppdater opplysninger om arbeidssøker"); + } + @SneakyThrows public void updateProfilering(AktorId aktoerId, ProfileringEntity profileringEntity) { final XContentBuilder content = jsonBuilder() diff --git a/src/test/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerServiceTest.kt b/src/test/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerServiceTest.kt index d8b8eb61f6..c3a3286127 100644 --- a/src/test/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerServiceTest.kt +++ b/src/test/java/no/nav/pto/veilarbportefolje/arbeidssoeker/v2/ArbeidssoekerServiceTest.kt @@ -46,7 +46,10 @@ import org.springframework.boot.test.mock.mockito.MockBean import org.springframework.jdbc.core.JdbcTemplate import java.time.Instant import java.time.ZonedDateTime +import java.time.temporal.ChronoUnit +import java.time.temporal.TemporalUnit import java.util.* +import java.util.concurrent.TimeUnit import no.nav.paw.arbeidssokerregisteret.api.v1.JaNeiVetIkke as JaNeiVetIkkeEkstern import no.nav.paw.arbeidssokerregisteret.api.v1.Profilering as ProfileringKafkamelding import no.nav.paw.arbeidssokerregisteret.api.v4.OpplysningerOmArbeidssoeker as OpplysningerOmArbeidssoekerKafkamelding @@ -327,6 +330,53 @@ class ArbeidssoekerServiceTest( assertTrue(harNyProfilering) } + @Test + fun `Ved kafkamelding om avsluttet arbeidssøkerperiode skal all data fra arbeidssøkerregisteret slettes`() { + // Arrange + `when`(FeatureToggle.brukNyttArbeidssoekerregister(defaultUnleash)).thenReturn(true) + val arbeidssoekerPeriodeId = UUID.fromString("ea0ad984-8b99-4fff-afd6-07737ab19d16") + val fnr = Fnr.of("17858998980") + val aktorId = randomAktorId() + + mockPdlIdenterRespons(aktorId, fnr) + mockPdlPersonRespons(fnr) + mockPdlPersonBarnRespons() + mockHentOppfolgingsbrukerResponse(fnr) + mockHentArbeidssoekerPerioderResponse(fnr) + mockHentOpplysningerOmArbeidssoekerResponse(fnr, arbeidssoekerPeriodeId) + mockHentProfileringResponse(fnr, arbeidssoekerPeriodeId) + + oppfolgingPeriodeService.behandleKafkaMeldingLogikk(genererStartetOppfolgingsperiode(aktorId)) + + val arbeidssoekerPeriodeMeldingMedAvsluttDato = Periode( + arbeidssoekerPeriodeId, + fnr.get(), + Metadata( + Instant.now().minus(1, ChronoUnit.DAYS), + null, + null, + null + ), + Metadata( + Instant.now(), + null, + null, + null + ) + ) + + // Act + val lagretArbeidssoekerPeriodeForAvslutting = sisteArbeidssoekerPeriodeRepository.hentSisteArbeidssoekerPeriode(arbeidssoekerPeriodeId) + arbeidssoekerService.behandleKafkaMeldingLogikk(arbeidssoekerPeriodeMeldingMedAvsluttDato) + val lagretArbeidssoekerPeriodeEtterAvslutting = sisteArbeidssoekerPeriodeRepository.hentSisteArbeidssoekerPeriode(arbeidssoekerPeriodeId) + + // Assert + assertThat(lagretArbeidssoekerPeriodeForAvslutting).isNotNull + assertThat(lagretArbeidssoekerPeriodeForAvslutting?.arbeidssoekerperiodeId).isEqualTo(arbeidssoekerPeriodeId) + assertThat(lagretArbeidssoekerPeriodeEtterAvslutting).isNull() + // TODO: Litt fleire asserts + } + @Test fun ved_kafkamelding_om_nye_opplysninger_om_arbeidssoeker_paa_ny_arbeidssoekerperiode_ignoreres_meldingen_dersom_vi_ikke_har_data_paa_periodeId() { // Arrange