diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java b/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java index 3bca3f104..8f08e7f23 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java @@ -5,8 +5,6 @@ import java.util.List; import java.util.function.Function; -import no.nav.foreldrepenger.abakus.rydding.OppryddingTjeneste; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,6 +26,7 @@ import no.nav.foreldrepenger.abakus.domene.iay.søknad.OppgittOpptjening; import no.nav.foreldrepenger.abakus.iay.InntektArbeidYtelseTjeneste; import no.nav.foreldrepenger.abakus.kobling.KoblingReferanse; +import no.nav.foreldrepenger.abakus.rydding.OppryddingTjeneste; import no.nav.foreldrepenger.abakus.typer.JournalpostId; import no.nav.foreldrepenger.abakus.typer.OrgNummer; import no.nav.vedtak.sikkerhet.abac.AbacDataAttributter; @@ -144,6 +143,7 @@ public Response ryddOppGrunnlagUtenReferanse() { LOG.info("FORVALTNING ABAKUS ryddOppGrunnlagUtenReferanse"); oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse(); oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse(); + oppryddingTjeneste.fjernAlleIayInntektsmeldingerUtenReferanse(); return Response.ok().build(); } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayAggregatRepository.java similarity index 85% rename from web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java rename to web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayAggregatRepository.java index 8cdc8a97c..10ee1cf65 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayAggregatRepository.java @@ -1,32 +1,33 @@ package no.nav.foreldrepenger.abakus.rydding; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; -import jakarta.persistence.EntityManager; -import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static java.util.Collections.emptyList; import java.util.List; import java.util.Objects; -import static java.util.Collections.emptyList; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; +import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregat; @ApplicationScoped -public class OppryddingIAYAggregatRepository { - private static final Logger LOG = LoggerFactory.getLogger(OppryddingIAYAggregatRepository.class); +public class OppryddingIayAggregatRepository { + private static final Logger LOG = LoggerFactory.getLogger(OppryddingIayAggregatRepository.class); protected static final String PARAM_IAY_ID = "iayId"; protected static final String PARAM_RELATERT_YTELSE_ID_LIST = "relatertYtelseIdList"; private EntityManager entityManager; - OppryddingIAYAggregatRepository() { + OppryddingIayAggregatRepository() { // CDI proxy } @Inject - public OppryddingIAYAggregatRepository(EntityManager entityManager) { + public OppryddingIayAggregatRepository(EntityManager entityManager) { Objects.requireNonNull(entityManager, "entityManager"); this.entityManager = entityManager; } @@ -38,10 +39,10 @@ public List hentIayAggregaterUtenReferanse(Integer maxResults) { .setMaxResults(maxResults) .getResultList(); if (result.isEmpty()) { - LOG.info("Fant ingen IAY-aggregater uten grunnlag referanse"); + LOG.debug("Fant ingen IAY-aggregater uten grunnlag referanse"); return emptyList(); } - LOG.info("Fant {} IAY-aggregater uten grunnlag referanse", result.size()); + LOG.debug("Fant {} IAY-aggregater uten grunnlag referanse", result.size()); return result.stream().map(Number::longValue).toList(); } @@ -112,42 +113,42 @@ private List hentYtelseAnvistFor(List relatertYtelseIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_ytelse_stoerrelse where ytelse_grunnlag_id in (:ytelseGrunnlagIdList)") .setParameter("ytelseGrunnlagIdList", ytelseGrunnlagIdList) .executeUpdate(); - LOG.info("Fjernet {} ytelse størrelser for ytelse grunnlag: {}", antallFjernet, ytelseGrunnlagIdList); + LOG.debug("Fjernet {} ytelse størrelser for ytelse grunnlag: {}", antallFjernet, ytelseGrunnlagIdList); } private void fjernYtelseGrunnlagFor(List relatertYtelseIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_ytelse_grunnlag where ytelse_id in (:relatertYtelseIdList)") .setParameter(PARAM_RELATERT_YTELSE_ID_LIST, relatertYtelseIdList) .executeUpdate(); - LOG.info("Fjernet {} ytelse grunnlag for relatert ytelse: {}", antallFjernet, relatertYtelseIdList); + LOG.debug("Fjernet {} ytelse grunnlag for relatert ytelse: {}", antallFjernet, relatertYtelseIdList); } private void fjernYtelseAnvistAndelFor(List ytelseAnvistIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_ytelse_anvist_andel where ytelse_anvist_id in (:ytelseAnvistIdList)") .setParameter("ytelseAnvistIdList", ytelseAnvistIdList) .executeUpdate(); - LOG.info("Fjernet {} ytelse anvist andeler for ytelse anvist: {}", antallFjernet, ytelseAnvistIdList); + LOG.debug("Fjernet {} ytelse anvist andeler for ytelse anvist: {}", antallFjernet, ytelseAnvistIdList); } private void fjernYtelseAnvistFor(List relatertYtelseIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_ytelse_anvist where ytelse_id in (:relatertYtelseIdList)") .setParameter(PARAM_RELATERT_YTELSE_ID_LIST, relatertYtelseIdList) .executeUpdate(); - LOG.info("Fjernet {} ytelse anvist for relatert ytelse: {}", antallFjernet, relatertYtelseIdList); + LOG.debug("Fjernet {} ytelse anvist for relatert ytelse: {}", antallFjernet, relatertYtelseIdList); } private void fjernRelatertYtelseFor(List aktørYtelseIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_relatert_ytelse where aktoer_ytelse_id in (:aktoerYtelseIdList)") .setParameter("aktoerYtelseIdList", aktørYtelseIdList) .executeUpdate(); - LOG.info("Fjernet {} relatert ytelse for aktør ytelse: {}", antallFjernet, aktørYtelseIdList); + LOG.debug("Fjernet {} relatert ytelse for aktør ytelse: {}", antallFjernet, aktørYtelseIdList); } private void fjernAktørYtelseFor(Long iayIdForSletting) { var antallFjernet = entityManager.createNativeQuery("delete from iay_aktoer_ytelse where inntekt_arbeid_ytelser_id = :iayId") .setParameter(PARAM_IAY_ID, iayIdForSletting) .executeUpdate(); - LOG.info("Fjernet {} aktør ytelse for iay-aggregat: {}", antallFjernet, iayIdForSletting); + LOG.debug("Fjernet {} aktør ytelse for iay-aggregat: {}", antallFjernet, iayIdForSletting); } private void slettIayAktørArbeid(Long iayIdForSletting) { @@ -183,28 +184,28 @@ private void fjernPermisjonerFor(List yrkesaktivitetIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_permisjon where yrkesaktivitet_id in (:yrkesaktivitetIdList)") .setParameter("yrkesaktivitetIdList", yrkesaktivitetIdList) .executeUpdate(); - LOG.info("Fjernet {} permisjoner for yrkesaktiviteter: {}", antallFjernet, yrkesaktivitetIdList); + LOG.debug("Fjernet {} permisjoner for yrkesaktiviteter: {}", antallFjernet, yrkesaktivitetIdList); } private void fjernAktivitetsAvtalerFor(List yrkesaktivitetIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_aktivitets_avtale where yrkesaktivitet_id in (:yrkesaktivitetIdList)") .setParameter("yrkesaktivitetIdList", yrkesaktivitetIdList) .executeUpdate(); - LOG.info("Fjernet {} aktivitets avtaler for yrkesaktiviteter: {}", antallFjernet, yrkesaktivitetIdList); + LOG.debug("Fjernet {} aktivitets avtaler for yrkesaktiviteter: {}", antallFjernet, yrkesaktivitetIdList); } private void fjernYrkesaktiviteterFor(List aktørArbeidIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_yrkesaktivitet where aktoer_arbeid_id in (:aktoerArbeidIdList)") .setParameter("aktoerArbeidIdList", aktørArbeidIdList) .executeUpdate(); - LOG.info("Fjernet {} yrkesaktiviteter for aktør arbeid: {}", antallFjernet, aktørArbeidIdList); + LOG.debug("Fjernet {} yrkesaktiviteter for aktør arbeid: {}", antallFjernet, aktørArbeidIdList); } private void fjernAktørArbeidFor(Long iayIdForSletting) { var antallFjernet = entityManager.createNativeQuery("delete from iay_aktoer_arbeid where inntekt_arbeid_ytelser_id = :iayId") .setParameter(PARAM_IAY_ID, iayIdForSletting) .executeUpdate(); - LOG.info("Fjernet {} aktør arbeid for iay-aggregat: {}", antallFjernet, iayIdForSletting); + LOG.debug("Fjernet {} aktør arbeid for iay-aggregat: {}", antallFjernet, iayIdForSletting); } private void slettIayAktørIntekt(Long iayIdForSletting) { @@ -239,14 +240,14 @@ private void fjernInntektsposterFor(List inntektIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_inntektspost where inntekt_id in (:inntektIdList)") .setParameter("inntektIdList", inntektIdList) .executeUpdate(); - LOG.info("Fjernet {} inntektsposter for inntekter: {}", antallFjernet, inntektIdList); + LOG.debug("Fjernet {} inntektsposter for inntekter: {}", antallFjernet, inntektIdList); } private void fjernInntekterFor(List aktørInntektIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_inntekt where aktoer_inntekt_id in (:aktoerInntektIdList)") .setParameter("aktoerInntektIdList", aktørInntektIdList) .executeUpdate(); - LOG.info("Fjernet {} inntekter for aktør inntekter: {}", antallFjernet, aktørInntektIdList); + LOG.debug("Fjernet {} inntekter for aktør inntekter: {}", antallFjernet, aktørInntektIdList); } @@ -254,13 +255,13 @@ private void fjernInntekterFor(List aktørInntektIdList) { var antallFjernet = entityManager.createNativeQuery("delete from iay_aktoer_inntekt where inntekt_arbeid_ytelser_id = :iayId") .setParameter(PARAM_IAY_ID, iayIdForSletting) .executeUpdate(); - LOG.info("Fjernet {} aktør inntekter for iay-aggregat: {}", antallFjernet, iayIdForSletting); + LOG.debug("Fjernet {} aktør inntekter for iay-aggregat: {}", antallFjernet, iayIdForSletting); } private void fjernInntektArbeidYtelseFor(Long iayIdForSletting) { var antallFjernet = entityManager.createNativeQuery("delete from iay_inntekt_arbeid_ytelser where id = :iayId") - .setParameter(PARAM_IAY_ID, iayIdForSletting) - .executeUpdate(); - LOG.info("Fjernet {} IAY-aggregat med id: {}", antallFjernet, iayIdForSletting); + .setParameter(PARAM_IAY_ID, iayIdForSletting) + .executeUpdate(); + LOG.debug("Fjernet {} IAY-aggregat med id: {}", antallFjernet, iayIdForSletting); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java index 702a38c98..7d4df9572 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java @@ -1,17 +1,16 @@ package no.nav.foreldrepenger.abakus.rydding; -import static java.util.Collections.emptyList; - -import java.util.List; -import java.util.Objects; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.persistence.EntityManager; import no.nav.foreldrepenger.abakus.domene.iay.arbeidsforhold.ArbeidsforholdInformasjon; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Objects; + +import static java.util.Collections.emptyList; @ApplicationScoped public class OppryddingIayInformasjonRepository { @@ -31,12 +30,12 @@ public OppryddingIayInformasjonRepository(EntityManager entityManager) { public List hentIayInformasjonUtenReferanse(Integer maxResults) { @SuppressWarnings("unchecked") List result = entityManager.createNativeQuery("select distinct id from iay_informasjon info where " - + "not exists (select 1 from gr_arbeid_inntekt gr where info.id = gr.informasjon_id)").setMaxResults(maxResults).getResultList(); + + "not exists (select 1 from gr_arbeid_inntekt gr where info.id = gr.informasjon_id)").setMaxResults(maxResults).getResultList(); if (result.isEmpty()) { - LOG.info("Fant ingen IAY-Informasjon uten grunnlag referanse"); + LOG.debug("Fant ingen IAY-Informasjon uten grunnlag referanse"); return emptyList(); } - LOG.info("Fant {} IAY-Informasjon uten grunnlag referanse", result.size()); + LOG.debug("Fant {} IAY-Informasjon uten grunnlag referanse", result.size()); return result.stream().map(Number::longValue).toList(); } @@ -59,36 +58,36 @@ private void slettArbeidsforholdInformasjon(Long informasjonId) { private List hentOverstyrteArbeidsforholdFor(Long informasjonId) { @SuppressWarnings("unchecked") List result = entityManager.createNativeQuery( - "select distinct id from iay_arbeidsforhold where informasjon_id = :infoId").setParameter("infoId", informasjonId).getResultList(); + "select distinct id from iay_arbeidsforhold where informasjon_id = :infoId").setParameter("infoId", informasjonId).getResultList(); return result.stream().map(Number::longValue).toList(); } private void fjernOverstyrteArbeidsforholdPerioderFor(List overstyrteArbeidsforholdIdList) { var antallFjernet = entityManager.createNativeQuery( - "delete from iay_overstyrte_perioder where arbeidsforhold_id in (:overstyrteArbeidsforholdIdList)") - .setParameter("overstyrteArbeidsforholdIdList", overstyrteArbeidsforholdIdList) - .executeUpdate(); - LOG.info("Fjernet {} overstyrte arbeidsforhold perioder for arbeidsforhold: {}", antallFjernet, overstyrteArbeidsforholdIdList); + "delete from iay_overstyrte_perioder where arbeidsforhold_id in (:overstyrteArbeidsforholdIdList)") + .setParameter("overstyrteArbeidsforholdIdList", overstyrteArbeidsforholdIdList) + .executeUpdate(); + LOG.debug("Fjernet {} overstyrte arbeidsforhold perioder for arbeidsforhold: {}", antallFjernet, overstyrteArbeidsforholdIdList); } private void fjernOverstyrteArbeidsforholFor(Long informasjonId) { var antallFjernet = entityManager.createNativeQuery("delete from iay_arbeidsforhold where informasjon_id = :informasjonId") - .setParameter("informasjonId", informasjonId) - .executeUpdate(); - LOG.info("Fjernet {} overstyrte arbeidsforhold for informasjon: {}", antallFjernet, informasjonId); + .setParameter("informasjonId", informasjonId) + .executeUpdate(); + LOG.debug("Fjernet {} overstyrte arbeidsforhold for informasjon: {}", antallFjernet, informasjonId); } private void fjernArbeidsforholReferanserFor(Long informasjonId) { var antallFjernet = entityManager.createNativeQuery("delete from iay_arbeidsforhold_refer where informasjon_id = :informasjonId") - .setParameter("informasjonId", informasjonId) - .executeUpdate(); - LOG.info("Fjernet {} arbeidsforhold referanser for informasjon: {}", antallFjernet, informasjonId); + .setParameter("informasjonId", informasjonId) + .executeUpdate(); + LOG.debug("Fjernet {} arbeidsforhold referanser for informasjon: {}", antallFjernet, informasjonId); } private void fjernInformasjonFor(Long informasjonId) { var antallFjernet = entityManager.createNativeQuery("delete from iay_informasjon where id = :informasjonId") - .setParameter("informasjonId", informasjonId) - .executeUpdate(); - LOG.info("Fjernet {} arbeidsforhold informasjon med id: {}", antallFjernet, informasjonId); + .setParameter("informasjonId", informasjonId) + .executeUpdate(); + LOG.debug("Fjernet {} arbeidsforhold informasjon med id: {}", antallFjernet, informasjonId); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInntektsmeldingerRepository.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInntektsmeldingerRepository.java new file mode 100644 index 000000000..470e20d74 --- /dev/null +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInntektsmeldingerRepository.java @@ -0,0 +1,120 @@ +package no.nav.foreldrepenger.abakus.rydding; + +import static java.util.Collections.emptyList; + +import java.util.List; +import java.util.Objects; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; +import no.nav.foreldrepenger.abakus.domene.iay.InntektsmeldingAggregat; + +@ApplicationScoped +public class OppryddingIayInntektsmeldingerRepository { + private static final Logger LOG = LoggerFactory.getLogger(OppryddingIayInntektsmeldingerRepository.class); + + private EntityManager entityManager; + + OppryddingIayInntektsmeldingerRepository() { + // CDI proxy + } + + @Inject + public OppryddingIayInntektsmeldingerRepository(EntityManager entityManager) { + Objects.requireNonNull(entityManager, "entityManager"); + this.entityManager = entityManager; + } + + public List hentIayInntektsmeldingerUtenReferanse(Integer maxResults) { + @SuppressWarnings("unchecked") List result = entityManager.createNativeQuery("select distinct id from iay_inntektsmeldinger im where " + + "not exists (select 1 from gr_arbeid_inntekt gr where im.id = gr.inntektsmeldinger_id)").setMaxResults(maxResults).getResultList(); + if (result.isEmpty()) { + LOG.debug("Fant ingen IAY-Inntektsmeldinger uten grunnlag referanse"); + return emptyList(); + } + LOG.debug("Fant {} IAY-Inntektsmeldinger uten grunnlag referanse", result.size()); + return result.stream().map(Number::longValue).toList(); + } + + public void slettIayInntektsmeldinger(Long id) { + var inntektsmeldingAggregat = entityManager.find(InntektsmeldingAggregat.class, id); + if (inntektsmeldingAggregat != null) { + slettInntektsmeldingFor(id); + fjernInntektsmeldingerFor(id); + } + } + + private void slettInntektsmeldingFor(Long inntektsmeldingerId) { + var inntektsmeldinger = hentInntektsmeldingerFor(inntektsmeldingerId); + if (!inntektsmeldinger.isEmpty()) { + fjernRefusjonFor(inntektsmeldinger); + fjernNaturalYtelseFor(inntektsmeldinger); + fjernGraderingFor(inntektsmeldinger); + fjernFraværFor(inntektsmeldinger); + fjernUtsettelsePeriodeFor(inntektsmeldinger); + + fjernInntektsmeldingFor(inntektsmeldingerId); + } + } + + private List hentInntektsmeldingerFor(Long inntektsmeldingerId) { + @SuppressWarnings("unchecked") List result = entityManager.createNativeQuery( + "select distinct id from iay_inntektsmelding where inntektsmeldinger_id = :imId") + .setParameter("imId", inntektsmeldingerId) + .getResultList(); + return result.stream().map(Number::longValue).toList(); + } + + private void fjernRefusjonFor(List inntektsmeldingIdList) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_refusjon where inntektsmelding_id in (:inntektsmeldingIdList)") + .setParameter("inntektsmeldingIdList", inntektsmeldingIdList) + .executeUpdate(); + LOG.debug("Fjernet {} refusjon for inntektsmeldinger: {}", antallFjernet, inntektsmeldingIdList); + } + + private void fjernNaturalYtelseFor(List inntektsmeldingIdList) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_natural_ytelse where inntektsmelding_id in (:inntektsmeldingIdList)") + .setParameter("inntektsmeldingIdList", inntektsmeldingIdList) + .executeUpdate(); + LOG.debug("Fjernet {} natural ytelse for inntektsmeldinger: {}", antallFjernet, inntektsmeldingIdList); + } + + private void fjernGraderingFor(List inntektsmeldingIdList) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_gradering where inntektsmelding_id in (:inntektsmeldingIdList)") + .setParameter("inntektsmeldingIdList", inntektsmeldingIdList) + .executeUpdate(); + LOG.debug("Fjernet {} gradering for inntektsmeldinger: {}", antallFjernet, inntektsmeldingIdList); + } + + private void fjernFraværFor(List inntektsmeldingIdList) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_fravaer where inntektsmelding_id in (:inntektsmeldingIdList)") + .setParameter("inntektsmeldingIdList", inntektsmeldingIdList) + .executeUpdate(); + LOG.debug("Fjernet {} fravær for inntektsmeldinger: {}", antallFjernet, inntektsmeldingIdList); + } + + private void fjernUtsettelsePeriodeFor(List inntektsmeldingIdList) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_utsettelse_periode where inntektsmelding_id in (:inntektsmeldingIdList)") + .setParameter("inntektsmeldingIdList", inntektsmeldingIdList) + .executeUpdate(); + LOG.debug("Fjernet {} utsettelse periode for inntektsmeldinger: {}", antallFjernet, inntektsmeldingIdList); + } + + private void fjernInntektsmeldingFor(Long inntektsmeldingerId) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_inntektsmelding where inntektsmeldinger_id = :inntektsmeldingerId") + .setParameter("inntektsmeldingerId", inntektsmeldingerId) + .executeUpdate(); + LOG.debug("Fjernet {} inntektsmelding for inntektsmeldinger: {}", antallFjernet, inntektsmeldingerId); + } + + private void fjernInntektsmeldingerFor(Long inntektsmeldingerId) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_inntektsmeldinger where id = :inntektsmeldingerId") + .setParameter("inntektsmeldingerId", inntektsmeldingerId) + .executeUpdate(); + LOG.debug("Fjernet {} inntektsmeldinger med id: {}", antallFjernet, inntektsmeldingerId); + } +} diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java index 7edf1bb39..2c40b5c67 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java @@ -2,8 +2,9 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask; +import no.nav.foreldrepenger.abakus.rydding.task.FjernIayGrunnlagUtenReferanseTask; import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInformasjonUtenReferanseTask; +import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInntektsmeldingerUtenReferanseTask; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; import org.slf4j.Logger; @@ -32,9 +33,13 @@ public void fjernAlleIayInformasjontUtenReferanse() { opprettFjernIayInformasjonTask(); } + public void fjernAlleIayInntektsmeldingerUtenReferanse() { + opprettFjernIayInntektsmeldingerTask(); + } + private void opprettFjernIayAggregatTask() { LOG.info("Oppretter task for å fjerne IAY-aggregater uten referanse."); - var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); + var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayGrunnlagUtenReferanseTask.class); taskTjeneste.lagre(prosessTaskData); } @@ -43,4 +48,10 @@ private void opprettFjernIayInformasjonTask() { var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class); taskTjeneste.lagre(prosessTaskData); } + + private void opprettFjernIayInntektsmeldingerTask() { + LOG.info("Oppretter task for å fjerne IAY-Inntektsmeldinger uten referanse."); + var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInntektsmeldingerUtenReferanseTask.class); + taskTjeneste.lagre(prosessTaskData); + } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java index 59853f624..90ee113ff 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java @@ -22,5 +22,6 @@ public FjernAlleGrunnlagUtenReferanseBatchTask(OppryddingTjeneste oppryddingTjen public void doTask(ProsessTaskData prosessTaskData) { oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse(); oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse(); + oppryddingTjeneste.fjernAlleIayInntektsmeldingerUtenReferanse(); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayGrunnlagUtenReferanseTask.java similarity index 84% rename from web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java rename to web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayGrunnlagUtenReferanseTask.java index 45ed055cc..f4dadcb87 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayGrunnlagUtenReferanseTask.java @@ -1,28 +1,29 @@ package no.nav.foreldrepenger.abakus.rydding.task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import no.nav.foreldrepenger.abakus.rydding.OppryddingIAYAggregatRepository; +import no.nav.foreldrepenger.abakus.rydding.OppryddingIayAggregatRepository; import no.nav.vedtak.felles.prosesstask.api.ProsessTask; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @ApplicationScoped @ProsessTask(value = "opprydding.iayGrunnlag.uten.referanse", maxFailedRuns = 2) -public class FjernIAYGrunnlagUtenReferanseTask implements ProsessTaskHandler { +public class FjernIayGrunnlagUtenReferanseTask implements ProsessTaskHandler { public static final int IAY_GRUNNLAG_BATCH_SIZE = 500; - private static final Logger LOG = LoggerFactory.getLogger(FjernIAYGrunnlagUtenReferanseTask.class); + private static final Logger LOG = LoggerFactory.getLogger(FjernIayGrunnlagUtenReferanseTask.class); - private final OppryddingIAYAggregatRepository iayAggregatRepository; + private final OppryddingIayAggregatRepository iayAggregatRepository; private final ProsessTaskTjeneste taskTjeneste; @Inject - public FjernIAYGrunnlagUtenReferanseTask(OppryddingIAYAggregatRepository iayAggregatRepository, ProsessTaskTjeneste taskTjeneste) { + public FjernIayGrunnlagUtenReferanseTask(OppryddingIayAggregatRepository iayAggregatRepository, ProsessTaskTjeneste taskTjeneste) { this.iayAggregatRepository = iayAggregatRepository; this.taskTjeneste = taskTjeneste; } @@ -41,7 +42,7 @@ public void doTask(ProsessTaskData unused) { private void opprettFjernIayAggregatTask() { LOG.info("Oppretter en ny task for å fjerne IAY-aggregater uten referanse."); - var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); + var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayGrunnlagUtenReferanseTask.class); taskTjeneste.lagre(prosessTaskData); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInntektsmeldingerUtenReferanseTask.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInntektsmeldingerUtenReferanseTask.java new file mode 100644 index 000000000..52ab05f28 --- /dev/null +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInntektsmeldingerUtenReferanseTask.java @@ -0,0 +1,49 @@ +package no.nav.foreldrepenger.abakus.rydding.task; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import no.nav.foreldrepenger.abakus.rydding.OppryddingIayInntektsmeldingerRepository; +import no.nav.vedtak.felles.prosesstask.api.ProsessTask; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; + +@ApplicationScoped +@ProsessTask(value = "opprydding.iayInntektsmelding.uten.referanse", maxFailedRuns = 2) +public class FjernIayInntektsmeldingerUtenReferanseTask implements ProsessTaskHandler { + public static final int IAY_INNTEKTSMELDING_BATCH_SIZE = 500; + + private static final Logger LOG = LoggerFactory.getLogger(FjernIayInntektsmeldingerUtenReferanseTask.class); + + private final OppryddingIayInntektsmeldingerRepository oppryddingIayInntektsmeldingerRepository; + private final ProsessTaskTjeneste taskTjeneste; + + @Inject + public FjernIayInntektsmeldingerUtenReferanseTask(OppryddingIayInntektsmeldingerRepository oppryddingIayInntektsmeldingerRepository, + ProsessTaskTjeneste taskTjeneste) { + this.oppryddingIayInntektsmeldingerRepository = oppryddingIayInntektsmeldingerRepository; + this.taskTjeneste = taskTjeneste; + } + + @Override + public void doTask(ProsessTaskData unused) { + var iayInntektsmeldingerUtenReferanse = oppryddingIayInntektsmeldingerRepository.hentIayInntektsmeldingerUtenReferanse( + IAY_INNTEKTSMELDING_BATCH_SIZE); + LOG.info("Fjerner {} IAY-Inntektsmeldinger uten referanse.", iayInntektsmeldingerUtenReferanse.size()); + iayInntektsmeldingerUtenReferanse.forEach(oppryddingIayInntektsmeldingerRepository::slettIayInntektsmeldinger); + LOG.info("Slettet {} IAY-Inntektsmeldinger uten referanse", iayInntektsmeldingerUtenReferanse.size()); + + if (iayInntektsmeldingerUtenReferanse.size() >= IAY_INNTEKTSMELDING_BATCH_SIZE) { + opprettFjernInntektsmeldingAggregatTask(); + } + } + + private void opprettFjernInntektsmeldingAggregatTask() { + LOG.info("Oppretter en ny task for å fjerne IAY-Inntektsmeldinger uten referanse."); + var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInntektsmeldingerUtenReferanseTask.class); + taskTjeneste.lagre(prosessTaskData); + } +} diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayAggregatRepositoryTest.java similarity index 91% rename from web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java rename to web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayAggregatRepositoryTest.java index b2b81c1f9..8acdb2720 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayAggregatRepositoryTest.java @@ -15,13 +15,13 @@ import no.nav.vedtak.felles.testutilities.db.EntityManagerAwareTest; @ExtendWith(JpaExtension.class) -class OppryddingIAYAggregatRepositoryTest extends EntityManagerAwareTest { +class OppryddingIayAggregatRepositoryTest extends EntityManagerAwareTest { - private OppryddingIAYAggregatRepository repository; + private OppryddingIayAggregatRepository repository; @BeforeEach void setUp(EntityManager entityManager) { - repository = new OppryddingIAYAggregatRepository(entityManager); + repository = new OppryddingIayAggregatRepository(entityManager); } @Test diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInntektsmeldingerRepositoryTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInntektsmeldingerRepositoryTest.java new file mode 100644 index 000000000..56dda2bd1 --- /dev/null +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInntektsmeldingerRepositoryTest.java @@ -0,0 +1,55 @@ +package no.nav.foreldrepenger.abakus.rydding; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import jakarta.persistence.EntityManager; +import no.nav.foreldrepenger.abakus.dbstoette.JpaExtension; +import no.nav.foreldrepenger.abakus.domene.iay.InntektsmeldingAggregat; +import no.nav.vedtak.felles.testutilities.db.EntityManagerAwareTest; + +@ExtendWith(JpaExtension.class) +class OppryddingIayInntektsmeldingerRepositoryTest extends EntityManagerAwareTest { + + private OppryddingIayInntektsmeldingerRepository repository; + + @BeforeEach + void setUp(EntityManager entityManager) { + repository = new OppryddingIayInntektsmeldingerRepository(entityManager); + } + + @Test + void hentIayInformasjonUtenReferanse_medReferanse_ok() { + opprettEmptyArbeidsforholdInfo(); + + var iayInntektsmeldingerUtenReferanse = repository.hentIayInntektsmeldingerUtenReferanse(10); + + assertThat(iayInntektsmeldingerUtenReferanse).hasSize(1); + } + + @Test + void slettIayInformasjon_ok() { + opprettEmptyArbeidsforholdInfo(); + + var iayInntektsmeldingerUtenReferanse = repository.hentIayInntektsmeldingerUtenReferanse(10); + assertThat(iayInntektsmeldingerUtenReferanse).hasSize(1); + + repository.slettIayInntektsmeldinger(iayInntektsmeldingerUtenReferanse.getFirst()); + + assertThat(repository.hentIayInntektsmeldingerUtenReferanse(10)).isEmpty(); + } + + private void opprettEmptyArbeidsforholdInfo() { + var entity = new InntektsmeldingAggregat(); + getEntityManager().persist(entity); + flushAndClear(); + } + + private void flushAndClear() { + getEntityManager().flush(); + getEntityManager().clear(); + } +} diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java index e9521e14e..f9f5200c6 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java @@ -1,7 +1,8 @@ package no.nav.foreldrepenger.abakus.rydding; -import no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask; +import no.nav.foreldrepenger.abakus.rydding.task.FjernIayGrunnlagUtenReferanseTask; import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInformasjonUtenReferanseTask; +import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInntektsmeldingerUtenReferanseTask; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; import no.nav.vedtak.felles.prosesstask.api.TaskType; @@ -39,8 +40,9 @@ void testFjernAlleIayAggregatUtenReferanse_ok() { // Assert verify(prosessTaskTjeneste, times(1)).lagre(prosessTaskDataCaptor.capture()); + verifyNoMoreInteractions(prosessTaskTjeneste); var prosessTaskData = prosessTaskDataCaptor.getValue(); - assertThat(prosessTaskData.taskType()).isEqualTo(TaskType.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + assertThat(prosessTaskData.taskType()).isEqualTo(TaskType.forProsessTask(FjernIayGrunnlagUtenReferanseTask.class)); } @Test @@ -50,7 +52,20 @@ void testFjernAlleInformasjonAggregatUtenReferanse_ok() { // Assert verify(prosessTaskTjeneste, times(1)).lagre(prosessTaskDataCaptor.capture()); + verifyNoMoreInteractions(prosessTaskTjeneste); var prosessTaskData = prosessTaskDataCaptor.getValue(); assertThat(prosessTaskData.taskType()).isEqualTo(TaskType.forProsessTask(FjernIayInformasjonUtenReferanseTask.class)); } + + @Test + void testFjernAlleInntektsmeldingerUtenReferanse_ok() { + // Act + oppryddingTjeneste.fjernAlleIayInntektsmeldingerUtenReferanse(); + + // Assert + verify(prosessTaskTjeneste, times(1)).lagre(prosessTaskDataCaptor.capture()); + verifyNoMoreInteractions(prosessTaskTjeneste); + var prosessTaskData = prosessTaskDataCaptor.getValue(); + assertThat(prosessTaskData.taskType()).isEqualTo(TaskType.forProsessTask(FjernIayInntektsmeldingerUtenReferanseTask.class)); + } } diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayGrunnlagUtenReferanseTaskTest.java similarity index 84% rename from web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java rename to web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayGrunnlagUtenReferanseTaskTest.java index 047abc421..7ebb49e61 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayGrunnlagUtenReferanseTaskTest.java @@ -1,6 +1,6 @@ package no.nav.foreldrepenger.abakus.rydding.task; -import no.nav.foreldrepenger.abakus.rydding.OppryddingIAYAggregatRepository; +import no.nav.foreldrepenger.abakus.rydding.OppryddingIayAggregatRepository; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; import org.junit.jupiter.api.BeforeEach; @@ -15,27 +15,27 @@ import java.util.stream.LongStream; import static java.util.Collections.emptyList; -import static no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask.IAY_GRUNNLAG_BATCH_SIZE; +import static no.nav.foreldrepenger.abakus.rydding.task.FjernIayGrunnlagUtenReferanseTask.IAY_GRUNNLAG_BATCH_SIZE; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -class FjernIAYGrunnlagUtenReferanseTaskTest { +class FjernIayGrunnlagUtenReferanseTaskTest { @Mock - private OppryddingIAYAggregatRepository oppryddingIAYAggregatRepository; + private OppryddingIayAggregatRepository oppryddingIAYAggregatRepository; @Mock private ProsessTaskTjeneste prosessTaskTjeneste; @Captor private ArgumentCaptor longCaptor; - private FjernIAYGrunnlagUtenReferanseTask task; + private FjernIayGrunnlagUtenReferanseTask task; @BeforeEach void setUp() { - task = new FjernIAYGrunnlagUtenReferanseTask(oppryddingIAYAggregatRepository, prosessTaskTjeneste); + task = new FjernIayGrunnlagUtenReferanseTask(oppryddingIAYAggregatRepository, prosessTaskTjeneste); } @Test @@ -44,7 +44,7 @@ void testDoTask_ok() { when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE)).thenReturn(iayIds); // Act - task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + task.doTask(ProsessTaskData.forProsessTask(FjernIayGrunnlagUtenReferanseTask.class)); // Assert verify(prosessTaskTjeneste, never()).lagre(any(ProsessTaskData.class)); @@ -59,7 +59,7 @@ void testDoTask_ok() { when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE)).thenReturn(emptyList()); // Act - task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + task.doTask(ProsessTaskData.forProsessTask(FjernIayGrunnlagUtenReferanseTask.class)); // Assert verify(oppryddingIAYAggregatRepository, times(1)).hentIayAggregaterUtenReferanse(anyInt()); @@ -73,7 +73,7 @@ void testDoTask_ok_over_max_partition_size() { when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE)).thenReturn(iayIds); // Act - task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + task.doTask(ProsessTaskData.forProsessTask(FjernIayGrunnlagUtenReferanseTask.class)); // Assert verify(oppryddingIAYAggregatRepository, times(IAY_GRUNNLAG_BATCH_SIZE)).slettIayAggregat(longCaptor.capture()); diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java index 7503b4aac..c04bbb2f1 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java @@ -44,7 +44,7 @@ void testDoTask_ok() { when(oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).thenReturn(iayIds); // Act - task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + task.doTask(ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class)); // Assert verifyNoInteractions(prosessTaskTjeneste); @@ -59,7 +59,7 @@ void testDoTask_ok() { when(oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).thenReturn(emptyList()); // Act - task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + task.doTask(ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class)); // Assert verify(oppryddingIayInformasjonRepository, times(1)).hentIayInformasjonUtenReferanse(anyInt()); @@ -74,7 +74,7 @@ void testDoTask_withValidPayload_over_max_partition_size() { iayIds); // Act - task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + task.doTask(ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class)); // Assert verify(oppryddingIayInformasjonRepository, times(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).slettIayInformasjon(longCaptor.capture()); diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInntektsmeldingerUtenReferanseTaskTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInntektsmeldingerUtenReferanseTaskTest.java new file mode 100644 index 000000000..5048986b1 --- /dev/null +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInntektsmeldingerUtenReferanseTaskTest.java @@ -0,0 +1,91 @@ +package no.nav.foreldrepenger.abakus.rydding.task; + +import static java.util.Collections.emptyList; +import static no.nav.foreldrepenger.abakus.rydding.task.FjernIayInntektsmeldingerUtenReferanseTask.IAY_INNTEKTSMELDING_BATCH_SIZE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import java.util.List; +import java.util.stream.LongStream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import no.nav.foreldrepenger.abakus.rydding.OppryddingIayInntektsmeldingerRepository; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; + +@ExtendWith(MockitoExtension.class) +class FjernIayInntektsmeldingerUtenReferanseTaskTest { + + @Mock + private OppryddingIayInntektsmeldingerRepository oppryddingIayInntektsmeldingerRepository; + @Mock + private ProsessTaskTjeneste prosessTaskTjeneste; + @Captor + private ArgumentCaptor longCaptor; + + private FjernIayInntektsmeldingerUtenReferanseTask task; + + @BeforeEach + void setUp() { + task = new FjernIayInntektsmeldingerUtenReferanseTask(oppryddingIayInntektsmeldingerRepository, prosessTaskTjeneste); + } + + @Test + void testDoTask_ok() { + var iayIds = List.of(1L, 2L, 3L); + when(oppryddingIayInntektsmeldingerRepository.hentIayInntektsmeldingerUtenReferanse(IAY_INNTEKTSMELDING_BATCH_SIZE)).thenReturn(iayIds); + + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIayInntektsmeldingerUtenReferanseTask.class)); + + // Assert + verifyNoInteractions(prosessTaskTjeneste); + verify(oppryddingIayInntektsmeldingerRepository, times(1)).hentIayInntektsmeldingerUtenReferanse(anyInt()); + verify(oppryddingIayInntektsmeldingerRepository, times(3)).slettIayInntektsmeldinger(longCaptor.capture()); + var capturedIds = List.copyOf(longCaptor.getAllValues()); + assertEquals(iayIds, capturedIds); + } + + @Test + void testDoTask_ikke_noe_til_å_slette() { + when(oppryddingIayInntektsmeldingerRepository.hentIayInntektsmeldingerUtenReferanse(IAY_INNTEKTSMELDING_BATCH_SIZE)).thenReturn(emptyList()); + + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIayInntektsmeldingerUtenReferanseTask.class)); + + // Assert + verify(oppryddingIayInntektsmeldingerRepository, times(1)).hentIayInntektsmeldingerUtenReferanse(anyInt()); + verifyNoInteractions(prosessTaskTjeneste); + verify(oppryddingIayInntektsmeldingerRepository, never()).slettIayInntektsmeldinger(anyLong()); + } + + @Test + void testDoTask_withValidPayload_over_max_partition_size() { + var iayIds = LongStream.rangeClosed(1, IAY_INNTEKTSMELDING_BATCH_SIZE).boxed().toList(); + when(oppryddingIayInntektsmeldingerRepository.hentIayInntektsmeldingerUtenReferanse(IAY_INNTEKTSMELDING_BATCH_SIZE)).thenReturn( + iayIds); + + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIayInntektsmeldingerUtenReferanseTask.class)); + + // Assert + verify(oppryddingIayInntektsmeldingerRepository, times(IAY_INNTEKTSMELDING_BATCH_SIZE)).slettIayInntektsmeldinger(longCaptor.capture()); + var capturedIds = List.copyOf(longCaptor.getAllValues()); + assertEquals(iayIds, capturedIds); + verify(prosessTaskTjeneste).lagre(any(ProsessTaskData.class)); + } +}