From 50208c5e29d4c6d71ccbc1df96c13ac3cf171cc2 Mon Sep 17 00:00:00 2001 From: Nils Martin Sande Date: Tue, 5 Nov 2024 09:41:47 +0100 Subject: [PATCH] =?UTF-8?q?La=20til=20hendelser=20for=20id=20h=C3=A5ndteri?= =?UTF-8?q?ng?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/funksjoner/GenererTilstander.kt | 2 + apps/kafka-key-maintenance/build.gradle.kts | 3 ++ .../ApplicationMetadata.kt | 27 ++++++++++ .../paw/kafkakeymaintenance/PdlConsumer.kt | 50 ++++++++++++++++++- .../kafkakeymaintenance/vo/IdOppdatering.kt | 2 +- .../intern/v1/Hendelse.kt | 2 + .../intern/v1/HendelseSerde.kt | 2 + .../intern/v1/IdentitetsnummerOpphoert.kt | 14 ++++++ .../intern/v1/IdentitetsnummerSammenslaatt.kt | 15 ++++++ 9 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/ApplicationMetadata.kt create mode 100644 domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerOpphoert.kt create mode 100644 domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerSammenslaatt.kt diff --git a/apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/funksjoner/GenererTilstander.kt b/apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/funksjoner/GenererTilstander.kt index 86bf4eb9..5535a47b 100644 --- a/apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/funksjoner/GenererTilstander.kt +++ b/apps/hendelseprosessor/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/app/funksjoner/GenererTilstander.kt @@ -17,6 +17,8 @@ fun genererNyInternTilstandOgNyeApiTilstander( is OpplysningerOmArbeidssoekerMottatt -> opplysningerOmArbeidssoekerMottatt(hendelse) is Avvist -> avvist(hendelse) is AvvistStoppAvPeriode -> ingenEndringEllerUtgaaendeMeldinger() + is IdentitetsnummerOpphoert -> ingenEndringEllerUtgaaendeMeldinger() + is IdentitetsnummerSammenslaatt -> ingenEndringEllerUtgaaendeMeldinger() } } } diff --git a/apps/kafka-key-maintenance/build.gradle.kts b/apps/kafka-key-maintenance/build.gradle.kts index e60367b3..9f83ba3a 100644 --- a/apps/kafka-key-maintenance/build.gradle.kts +++ b/apps/kafka-key-maintenance/build.gradle.kts @@ -86,6 +86,9 @@ jib { to.image = "${image ?: project.name}:${project.version}" container { jvmFlags = listOf("-XX:ActiveProcessorCount=4", "-XX:+UseZGC", "-XX:+ZGenerational") + environment = mapOf( + "IMAGE_WITH_VERSION" to "${image ?: project.name}:${project.version}" + ) } } diff --git a/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/ApplicationMetadata.kt b/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/ApplicationMetadata.kt new file mode 100644 index 00000000..ced3e24b --- /dev/null +++ b/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/ApplicationMetadata.kt @@ -0,0 +1,27 @@ +package no.nav.paw.kafkakeymaintenance + +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.BrukerType +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.TidspunktFraKilde +import java.time.Instant + +private val systemId = System.getenv("IMAGE_WITH_VERSION")?: "UNSPECIFIED" + +fun metadata( + kilde: String, + tidspunkt: Instant = Instant.now(), + tidspunktFraKilde: TidspunktFraKilde +): Metadata { + + return Metadata( + tidspunkt = tidspunkt, + utfoertAv = Bruker( + type = BrukerType.SYSTEM, + id = systemId + ), + kilde = kilde, + aarsak = "Id oppdatering", + tidspunktFraKilde = tidspunktFraKilde + ) +} diff --git a/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/PdlConsumer.kt b/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/PdlConsumer.kt index c538de36..518c26a1 100644 --- a/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/PdlConsumer.kt +++ b/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/PdlConsumer.kt @@ -1,6 +1,10 @@ package no.nav.paw.kafkakeymaintenance import kotlinx.coroutines.runBlocking +import no.nav.paw.arbeidssokerregisteret.intern.v1.Hendelse +import no.nav.paw.arbeidssokerregisteret.intern.v1.IdentitetsnummerOpphoert +import no.nav.paw.arbeidssokerregisteret.intern.v1.IdentitetsnummerSammenslaatt +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient import no.nav.paw.kafkakeygenerator.client.LokaleAlias import no.nav.paw.kafkakeymaintenance.functions.genererIdOppdatering @@ -10,13 +14,13 @@ import no.nav.paw.kafkakeymaintenance.functions.hentPerioder import no.nav.paw.kafkakeymaintenance.kafka.Topic import no.nav.paw.kafkakeymaintenance.kafka.TransactionContext import no.nav.paw.kafkakeymaintenance.kafka.updateHwm -import no.nav.paw.kafkakeymaintenance.vo.IdOppdatering -import no.nav.paw.kafkakeymaintenance.vo.avviksMelding +import no.nav.paw.kafkakeymaintenance.vo.* import no.nav.person.pdl.aktor.v2.Aktor import org.apache.kafka.clients.consumer.ConsumerRecord import org.jetbrains.exposed.sql.Transaction import org.jetbrains.exposed.sql.transactions.transaction import java.time.Instant +import java.util.* const val ANTALL_PARTISJONER = 6 @@ -48,3 +52,45 @@ fun process( null } } + +fun genererHendelser(metadata: Metadata, idOppdatering: IdOppdatering): List { + return when (idOppdatering) { + is AutomatiskIdOppdatering -> genererHendelse(metadata, idOppdatering) + is ManuellIdOppdatering -> TODO() + } +} + +fun genererHendelse(metadata: Metadata, idOppdatering: AutomatiskIdOppdatering): List { + val identitetsnummerOpphoert = idOppdatering + .frieIdentiteter + .groupBy { it.arbeidsoekerId } + .map { (arbeidsoekerId, alias) -> + val identiteter = alias.map { it.identitetsnummer } + IdentitetsnummerOpphoert( + id = arbeidsoekerId, + hendelseId = UUID.randomUUID(), + identitetsnummer = identiteter.first(), + metadata = metadata, + alleIdentitetsnummer = identiteter + ) + } + val identitetsnummerSammenslaatt = idOppdatering.oppdatertData?.let { genererHendelse(metadata, it) } ?: emptyList() + TODO() +} + +fun genererHendelse(metadata: Metadata, idMap: IdMap): List = + idMap.identiteter + .filter { it.arbeidsoekerId != idMap.arbeidsoekerId } + .groupBy { it.arbeidsoekerId } + .map { (arbeidsoekerId, alias) -> + val identiteter = alias.map { it.identitetsnummer } + IdentitetsnummerSammenslaatt( + id = arbeidsoekerId, + hendelseId = UUID.randomUUID(), + identitetsnummer = identiteter.first(), + metadata = metadata, + alleIdentitetsnummer = identiteter, + flyttetTilArbeidssoekerId = idMap.arbeidsoekerId + ) + } + diff --git a/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/vo/IdOppdatering.kt b/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/vo/IdOppdatering.kt index 51cf385f..638a177f 100644 --- a/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/vo/IdOppdatering.kt +++ b/apps/kafka-key-maintenance/src/main/kotlin/no/nav/paw/kafkakeymaintenance/vo/IdOppdatering.kt @@ -3,7 +3,7 @@ package no.nav.paw.kafkakeymaintenance.vo import no.nav.paw.kafkakeygenerator.client.Alias import no.nav.paw.kafkakeymaintenance.perioder.PeriodeRad -interface IdOppdatering {} +sealed interface IdOppdatering {} data class ManuellIdOppdatering( val gjeldeneIdentitetsnummer: String?, val pdlIdentitetsnummer: List, diff --git a/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/Hendelse.kt b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/Hendelse.kt index d2878332..1961f831 100644 --- a/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/Hendelse.kt +++ b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/Hendelse.kt @@ -7,6 +7,8 @@ const val avsluttetHendelseType = "intern.v1.avsluttet" const val avvistHendelseType = "intern.v1.avvist" const val avvistStoppAvPeriodeHendelseType = "intent.v1.avvist_stopp_av_periode" const val opplysningerOmArbeidssoekerHendelseType = "intern.v1.opplysninger_om_arbeidssoeker" +const val identitetsnummerOpphoertHendelseType = "intern.v1.identitetsnummer_opphoert" +const val identitetsnummerSammenslaattHendelseType = "intern.v1.identitetsnummer_sammenslaatt" sealed interface Hendelse : HarIdentitetsnummer, HarMetadata { val id: Long diff --git a/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/HendelseSerde.kt b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/HendelseSerde.kt index b889a58a..4fbd16fd 100644 --- a/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/HendelseSerde.kt +++ b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/HendelseSerde.kt @@ -78,5 +78,7 @@ fun eventTypeToClass(type: String?): KClass = avvistHendelseType -> Avvist::class avvistStoppAvPeriodeHendelseType -> AvvistStoppAvPeriode::class opplysningerOmArbeidssoekerHendelseType -> OpplysningerOmArbeidssoekerMottatt::class + identitetsnummerOpphoertHendelseType -> IdentitetsnummerOpphoert::class + identitetsnummerSammenslaattHendelseType -> IdentitetsnummerSammenslaatt::class else -> throw IllegalArgumentException("Ukjent hendelse type: '$type'") } diff --git a/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerOpphoert.kt b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerOpphoert.kt new file mode 100644 index 00000000..4ddfbaa5 --- /dev/null +++ b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerOpphoert.kt @@ -0,0 +1,14 @@ +package no.nav.paw.arbeidssokerregisteret.intern.v1 + +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata +import java.util.* + +data class IdentitetsnummerOpphoert( + override val id: Long, + override val hendelseId: UUID, + override val identitetsnummer: String, + override val metadata: Metadata, + val alleIdentitetsnummer: List +): Hendelse { + override val hendelseType: String = identitetsnummerOpphoertHendelseType +} \ No newline at end of file diff --git a/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerSammenslaatt.kt b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerSammenslaatt.kt new file mode 100644 index 00000000..e54e1652 --- /dev/null +++ b/domain/interne-hendelser/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/intern/v1/IdentitetsnummerSammenslaatt.kt @@ -0,0 +1,15 @@ +package no.nav.paw.arbeidssokerregisteret.intern.v1 + +import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata +import java.util.* + +data class IdentitetsnummerSammenslaatt( + override val id: Long, + override val hendelseId: UUID, + override val identitetsnummer: String, + override val metadata: Metadata, + val alleIdentitetsnummer: List, + val flyttetTilArbeidssoekerId: Long +): Hendelse { + override val hendelseType: String = identitetsnummerSammenslaattHendelseType +} \ No newline at end of file