diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/BrukerRepository.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/BrukerRepository.kt index 3baee86a1..903336fb0 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/BrukerRepository.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/BrukerRepository.kt @@ -25,10 +25,12 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.OppgaveUtgått import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.PåminnelseOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SakOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SoftDelete +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.TilleggsinformasjonSak import no.nav.arbeidsgiver.notifikasjon.infrastruktur.* import no.nav.arbeidsgiver.notifikasjon.infrastruktur.json.laxObjectMapper import no.nav.arbeidsgiver.notifikasjon.nærmeste_leder.NarmesteLederLeesah import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentModel +import no.nav.arbeidsgiver.notifikasjon.produsent.api.MutationTilleggsinformasjonSak import java.time.LocalDate import java.time.LocalDateTime import java.time.OffsetDateTime @@ -753,6 +755,7 @@ class BrukerRepositoryImpl( is HendelseModel.KalenderavtaleOpprettet -> oppdaterModellEtterKalenderavtaleOpprettet(hendelse) is HendelseModel.KalenderavtaleOppdatert -> oppdaterModellEtterKalenderavtaleOppdatert(hendelse) is NesteStegSak -> oppdaterModellEtterNesteStegSak(hendelse) + is TilleggsinformasjonSak -> oppdaterModellEtterTilleggsinformasjonSak(hendelse) } } @@ -1118,6 +1121,21 @@ class BrukerRepositoryImpl( } } + private suspend fun oppdaterModellEtterTilleggsinformasjonSak ( tilleggsinformasjonSak: TilleggsinformasjonSak) { + database.transaction { + executeUpdate( + """ + update sak + set tilleggsinformasjon = ? + where id = ? + """ + ){ + nullableText(tilleggsinformasjonSak.tilleggsinformasjon) + uuid(tilleggsinformasjonSak.sakId) + } + } + } + private suspend fun oppdaterModellEtterNesteStegSak (nesteStegSak: NesteStegSak) { database.transaction { executeUpdate( diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/dataprodukt/DataproduktModel.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/dataprodukt/DataproduktModel.kt index 5af93cc45..e31d68f3e 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/dataprodukt/DataproduktModel.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/dataprodukt/DataproduktModel.kt @@ -28,6 +28,7 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.PåminnelseTidspu import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SakOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SmsVarselKontaktinfo import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SoftDelete +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.TilleggsinformasjonSak import no.nav.arbeidsgiver.notifikasjon.infrastruktur.Database import no.nav.arbeidsgiver.notifikasjon.infrastruktur.ParameterSetters import no.nav.arbeidsgiver.notifikasjon.infrastruktur.logger @@ -478,6 +479,17 @@ class DataproduktModel( } } + is TilleggsinformasjonSak -> { + database.nonTransactionalExecuteUpdate(""" + update sak + set tilleggsinformasjon = ? + where sak_id = ? + """.trimIndent()) { + nullableText(hendelse.tilleggsinformasjon) + uuid(hendelse.sakId) + } + } + is NesteStegSak -> { database.nonTransactionalExecuteUpdate(""" update sak diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/ekstern_varsling/EksternVarslingRepository.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/ekstern_varsling/EksternVarslingRepository.kt index 74fc4a600..b087685bf 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/ekstern_varsling/EksternVarslingRepository.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/ekstern_varsling/EksternVarslingRepository.kt @@ -26,6 +26,7 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.PåminnelseOppret import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SakOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SmsVarselKontaktinfo import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SoftDelete +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.TilleggsinformasjonSak import no.nav.arbeidsgiver.notifikasjon.infrastruktur.Database import no.nav.arbeidsgiver.notifikasjon.infrastruktur.Transaction import no.nav.arbeidsgiver.notifikasjon.infrastruktur.json.laxObjectMapper @@ -67,6 +68,7 @@ class EksternVarslingRepository( is SakOpprettet -> Unit is NyStatusSak -> Unit is NesteStegSak -> Unit + is TilleggsinformasjonSak -> Unit is FristUtsatt -> Unit } } diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt index 889056721..c5974e29c 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt @@ -306,6 +306,23 @@ object HendelseModel { get() = oppgittTidspunkt ?: mottattTidspunkt } + @JsonTypeName("TilleggsinformasjonSak") + data class TilleggsinformasjonSak( + override val hendelseId: UUID, + override val virksomhetsnummer: String, + override val produsentId: String, + override val kildeAppNavn: String, + override val sakId: UUID, + + val merkelapp: String, + val grupperingsid: String, + val idempotenceKey: String?, + val tilleggsinformasjon: String?, + ) : Hendelse(), Sak { + @JsonIgnore + override val aggregateId: UUID = sakId + } + @JsonTypeName("NesteStegSak") data class NesteStegSak( override val hendelseId: UUID, diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperModel.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperModel.kt index 4c9518d70..5e028804b 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperModel.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperModel.kt @@ -20,6 +20,7 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.OppgaveUtgått import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.PåminnelseOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SakOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SoftDelete +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.TilleggsinformasjonSak import no.nav.arbeidsgiver.notifikasjon.infrastruktur.Database import java.time.OffsetDateTime import java.util.* @@ -164,4 +165,5 @@ val Hendelse.typeNavn: String is KalenderavtaleOpprettet -> "KalenderavtaleOpprettet" is KalenderavtaleOppdatert -> "KalenderavtaleOppdatert" is NesteStegSak -> "NesteStegSak" + is TilleggsinformasjonSak -> "TillegsinformasjonSak" } diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperService.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperService.kt index b571694ac..ab8ca4157 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperService.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/kafka_reaper/KafkaReaperService.kt @@ -19,6 +19,7 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.OppgaveUtgått import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.PåminnelseOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SakOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SoftDelete +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.TilleggsinformasjonSak import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseProdusent interface KafkaReaperService { @@ -43,8 +44,10 @@ class KafkaReaperServiceImpl( kafkaReaperModel.fjernRelasjon(relatertHendelseId) } } + is SakOpprettet, is NesteStegSak, + is TilleggsinformasjonSak, is NyStatusSak, is SoftDelete, is BeskjedOpprettet, diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/manuelt_vedlikehold/ManueltVedlikeholdService.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/manuelt_vedlikehold/ManueltVedlikeholdService.kt index 16ba3f7d1..89d08a1b4 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/manuelt_vedlikehold/ManueltVedlikeholdService.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/manuelt_vedlikehold/ManueltVedlikeholdService.kt @@ -59,6 +59,7 @@ class ManueltVedlikeholdService( is HendelseModel.BrukerKlikket, is HendelseModel.FristUtsatt, is HendelseModel.NesteStegSak, + is HendelseModel.TilleggsinformasjonSak, is HendelseModel.SoftDelete -> Unit } } diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/ProdusentRepository.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/ProdusentRepository.kt index d6e32dc2c..3863c446b 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/ProdusentRepository.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/ProdusentRepository.kt @@ -60,7 +60,7 @@ interface ProdusentRepository { suspend fun oppdaterModellEtterHendelse(hendelse: Hendelse, metadata: HendelseMetadata) suspend fun notifikasjonOppdateringFinnes(id: UUID, idempotenceKey: String): Boolean - suspend fun nesteStegSakFinnes(id: UUID, idempotenceKey: String): Boolean + suspend fun sakOppdateringFinnes(id: UUID, idempotenceKey: String): Boolean } class ProdusentRepositoryImpl( @@ -319,6 +319,7 @@ class ProdusentRepositoryImpl( is KalenderavtaleOpprettet -> oppdaterModellEtterKalenderavtaleOpprettet(hendelse) is KalenderavtaleOppdatert -> oppdaterModellEtterKalenderavtaleOppdatert(hendelse) is NesteStegSak -> oppdaterModellEtterNesteStegSak(hendelse) + is HendelseModel.TilleggsinformasjonSak -> oppdaterModellEtterTillegsinformasjonSak(hendelse) } } @@ -369,7 +370,7 @@ class ProdusentRepositoryImpl( } } - override suspend fun nesteStegSakFinnes(id: UUID, idempotenceKey: String): Boolean = + override suspend fun sakOppdateringFinnes(id: UUID, idempotenceKey: String): Boolean = database.nonTransactionalExecuteQuery( """ select * from sak_oppdatering where sak_id = ? and idempotence_key = ? @@ -380,7 +381,6 @@ class ProdusentRepositoryImpl( } ) {}.isNotEmpty() - private fun Transaction.finnDbSakId(sakId: UUID): UUID? = executeQuery( """ @@ -414,6 +414,37 @@ class ProdusentRepositoryImpl( } } + private suspend fun oppdaterModellEtterTillegsinformasjonSak(tilleggsinformasjonSak: HendelseModel.TilleggsinformasjonSak) { + database.transaction { + executeUpdate( + """ + update sak + set tilleggsinformasjon = ? + where id = ? + """ + ) { + nullableText(tilleggsinformasjonSak.tilleggsinformasjon) + uuid(tilleggsinformasjonSak.sakId) + } + + tilleggsinformasjonSak.idempotenceKey?.also { + executeUpdate( + """ + insert into sak_oppdatering( + hendelse_id, sak_id, idempotence_key + ) + values (?, ?, ?) + on conflict(hendelse_id) do nothing + """.trimIndent() + ) { + uuid(tilleggsinformasjonSak.hendelseId) + uuid(tilleggsinformasjonSak.sakId) + text(tilleggsinformasjonSak.idempotenceKey) + } + } + } + } + private suspend fun oppdaterModellEtterNesteStegSak(nesteStegSak: HendelseModel.NesteStegSak) { database.transaction { executeUpdate( diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/Error.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/Error.kt index 7afe4a415..99409288c 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/Error.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/Error.kt @@ -36,7 +36,9 @@ internal sealed class Error { MutationHardDeleteNotifikasjon.HardDeleteNotifikasjonResultat, MutationNyStatusSak.NyStatusSakResultat, MutationNesteStegSak.NesteStegSakResultat, - MutationKalenderavtale.OppdaterKalenderavtaleResultat + MutationKalenderavtale.OppdaterKalenderavtaleResultat, + MutationTilleggsinformasjonSak.TilleggsinformasjonSakResultat + @JsonTypeName("UkjentProdusent") data class UkjentProdusent( @@ -56,7 +58,8 @@ internal sealed class Error { MutationNySak.NySakResultat, MutationNyStatusSak.NyStatusSakResultat, MutationNesteStegSak.NesteStegSakResultat, - MutationKalenderavtale.OppdaterKalenderavtaleResultat + MutationKalenderavtale.OppdaterKalenderavtaleResultat, + MutationTilleggsinformasjonSak.TilleggsinformasjonSakResultat @JsonTypeName("UgyldigMottaker") data class UgyldigMottaker( @@ -73,7 +76,8 @@ internal sealed class Error { MutationNyStatusSak.NyStatusSakResultat, MutationNesteStegSak.NesteStegSakResultat, MutationOppgaveUtsettFrist.OppgaveUtsettFristResultat, - MutationKalenderavtale.OppdaterKalenderavtaleResultat + MutationKalenderavtale.OppdaterKalenderavtaleResultat, + MutationTilleggsinformasjonSak.TilleggsinformasjonSakResultat @JsonTypeName("DuplikatEksternIdOgMerkelapp") data class DuplikatEksternIdOgMerkelapp( @@ -135,7 +139,8 @@ internal sealed class Error { MutationHardDeleteSak.HardDeleteSakResultat, MutationKalenderavtale.NyKalenderavtaleResultat, QuerySak.HentSakResultat, - MutationNesteStegSak.NesteStegSakResultat + MutationNesteStegSak.NesteStegSakResultat, + MutationTilleggsinformasjonSak.TilleggsinformasjonSakResultat @JsonTypeName("OppgavenErAlleredeUtfoert") data class OppgavenErAlleredeUtfoert( diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNesteStegSak.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNesteStegSak.kt index 9097edf62..7887bbdb6 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNesteStegSak.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNesteStegSak.kt @@ -112,7 +112,7 @@ internal class MutationNesteStegSak( ) { error -> return error } nesteSteg.idempotencyKey?.let { - if (produsentRepository.nesteStegSakFinnes(sak.id, it)) { + if (produsentRepository.sakOppdateringFinnes(sak.id, it)) { return NesteStegSakVellykket(sak.id) } } diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationTilleggsinformasjonSak.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationTilleggsinformasjonSak.kt new file mode 100644 index 000000000..dd0513894 --- /dev/null +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationTilleggsinformasjonSak.kt @@ -0,0 +1,130 @@ +package no.nav.arbeidsgiver.notifikasjon.produsent.api + +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.fasterxml.jackson.annotation.JsonTypeName +import graphql.schema.DataFetchingEnvironment +import graphql.schema.idl.RuntimeWiring +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel +import no.nav.arbeidsgiver.notifikasjon.infrastruktur.graphql.* +import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentModel +import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentRepository +import java.util.* + +internal class MutationTilleggsinformasjonSak( + private val hendelseDispatcher: HendelseDispatcher, + private val produsentRepository: ProdusentRepository, +) { + + private fun DataFetchingEnvironment.getTilleggsinformasjon(): TilleggsinformasjonSakInput { + return TilleggsinformasjonSakInput( + tilleggsinformasjon = getTypedArgumentOrNull("tilleggsinformasjon"), + idempotencyKey = getTypedArgumentOrNull("idempotencyKey"), + ) + } + + fun wire(runtime: RuntimeWiring.Builder) { + runtime.resolveSubtypes() + + runtime.wire("Mutation") { + coDataFetcher("tilleggsinformasjonSak") { env -> + tilleggsinformasjonSak( + context = env.notifikasjonContext(), + id = env.getTypedArgument("id"), + tilleggsinformasjon = env.getTilleggsinformasjon() + ) + } + coDataFetcher("tilleggsinformasjonSakByGrupperingsid") { env -> + tilleggsinformasjonSakByGrupperingsid( + context = env.notifikasjonContext(), + grupperingsid = env.getTypedArgument("grupperingsid"), + merkelapp = env.getTypedArgument("merkelapp"), + tilleggsinformasjon = env.getTilleggsinformasjon() + ) + } + } + } + + + data class TilleggsinformasjonSakInput( + val tilleggsinformasjon: String?, + val idempotencyKey: String?, + ) { + fun tilleggsinformasjonSakHendelse( + kildeAppNavn: String, + produsentId: String, + tilhørendeSak: ProdusentModel.Sak, + idempotencyKey: String? + ): HendelseModel.TilleggsinformasjonSak { + return HendelseModel.TilleggsinformasjonSak( + hendelseId = UUID.randomUUID(), + merkelapp = tilhørendeSak.merkelapp, + grupperingsid = tilhørendeSak.grupperingsid, + kildeAppNavn = kildeAppNavn, + produsentId = produsentId, + sakId = tilhørendeSak.id, + tilleggsinformasjon = tilleggsinformasjon, + idempotenceKey = idempotencyKey, + virksomhetsnummer = tilhørendeSak.virksomhetsnummer, + ) + } + } + + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "__typename") + sealed interface TilleggsinformasjonSakResultat + + @JsonTypeName("TilleggsinformasjonSakVellykket") + data class TilleggsinformasjonSakVellykket( + val id: UUID, + ) : TilleggsinformasjonSakResultat + + + private suspend fun tilleggsinformasjonSak( + context: ProdusentAPI.Context, + id: UUID, + tilleggsinformasjon: TilleggsinformasjonSakInput, + ): TilleggsinformasjonSakResultat { + val sak = produsentRepository.hentSak(id) + ?: return Error.SakFinnesIkke("sak med id=$id finnes ikke") + return tillegsinformasjonSak(context = context, sak = sak, tilleggsinformasjon = tilleggsinformasjon) + } + + private suspend fun tilleggsinformasjonSakByGrupperingsid( + context: ProdusentAPI.Context, + grupperingsid: String, + merkelapp: String, + tilleggsinformasjon: TilleggsinformasjonSakInput + ): TilleggsinformasjonSakResultat { + val sak = produsentRepository.hentSak(merkelapp = merkelapp, grupperingsid = grupperingsid) + ?: return Error.SakFinnesIkke("sak med merkelapp='$merkelapp' og grupperingsid='$grupperingsid' finnes ikke") + return tillegsinformasjonSak(context = context, sak = sak, tilleggsinformasjon = tilleggsinformasjon) + } + + private suspend fun tillegsinformasjonSak( + context: ProdusentAPI.Context, + sak: ProdusentModel.Sak, + tilleggsinformasjon: TilleggsinformasjonSakInput, + ): TilleggsinformasjonSakResultat { + val produsent = hentProdusent(context) { error -> return error } + + tilgangsstyrMerkelapp( + produsent, + sak.merkelapp, + ) { error -> return error } + + tilleggsinformasjon.idempotencyKey?.let { + if (produsentRepository.sakOppdateringFinnes(sak.id, it)) { + return TilleggsinformasjonSakVellykket(sak.id) + } + } + + val hendelse = tilleggsinformasjon.tilleggsinformasjonSakHendelse( + context.appName, + produsent.id, + sak, + tilleggsinformasjon.idempotencyKey + ) + + hendelseDispatcher.send(hendelse) + return TilleggsinformasjonSakVellykket(sak.id) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/ProdusentAPI.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/ProdusentAPI.kt index afa7de2ea..525919bc7 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/ProdusentAPI.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/ProdusentAPI.kt @@ -57,6 +57,7 @@ object ProdusentAPI { MutationNyStatusSak(hendelseDispatcher, produsentRepository).wire(this) MutationKalenderavtale(hendelseDispatcher, produsentRepository).wire(this) MutationNesteStegSak(hendelseDispatcher, produsentRepository).wire(this) + MutationTilleggsinformasjonSak(hendelseDispatcher, produsentRepository).wire(this) } ) } diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/replay_validator/ReplayValidatorService.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/replay_validator/ReplayValidatorService.kt index a5371b88f..44ed7edd6 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/replay_validator/ReplayValidatorService.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/replay_validator/ReplayValidatorService.kt @@ -81,6 +81,7 @@ class ReplayValidatorService( is HendelseModel.EksterntVarselVellykket, is HendelseModel.SoftDelete, is HendelseModel.NesteStegSak, + is HendelseModel.TilleggsinformasjonSak, is HendelseModel.NyStatusSak -> Unit } diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_harddelete/SkedulertHardDeleteRepositoryImpl.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_harddelete/SkedulertHardDeleteRepositoryImpl.kt index b2bc7f8fe..92609d51d 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_harddelete/SkedulertHardDeleteRepositoryImpl.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_harddelete/SkedulertHardDeleteRepositoryImpl.kt @@ -169,6 +169,7 @@ class SkedulertHardDeleteRepositoryImpl( is HendelseModel.HardDelete -> hardDelete(hendelse) is HendelseModel.NesteStegSak, + is HendelseModel.TilleggsinformasjonSak, is HendelseModel.EksterntVarselFeilet, is HendelseModel.EksterntVarselVellykket, is HendelseModel.EksterntVarselKansellert, diff --git "a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/SkedulertP\303\245minnelseRepository.kt" "b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/SkedulertP\303\245minnelseRepository.kt" index 18efa22c4..3a02851e2 100644 --- "a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/SkedulertP\303\245minnelseRepository.kt" +++ "b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/SkedulertP\303\245minnelseRepository.kt" @@ -255,6 +255,7 @@ class SkedulertPåminnelseRepository : AutoCloseable { } } is HendelseModel.NesteStegSak, + is HendelseModel.TilleggsinformasjonSak, is HendelseModel.BeskjedOpprettet, is HendelseModel.BrukerKlikket, is HendelseModel.SakOpprettet, diff --git "a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_utg\303\245tt/SkedulertUtg\303\245ttService.kt" "b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_utg\303\245tt/SkedulertUtg\303\245ttService.kt" index 804ab4cf2..cc7e55327 100644 --- "a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_utg\303\245tt/SkedulertUtg\303\245ttService.kt" +++ "b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_utg\303\245tt/SkedulertUtg\303\245ttService.kt" @@ -96,6 +96,7 @@ class SkedulertUtgåttService( is HendelseModel.SakOpprettet, is HendelseModel.NyStatusSak, is HendelseModel.NesteStegSak, + is HendelseModel.TilleggsinformasjonSak, is HendelseModel.EksterntVarselFeilet, is HendelseModel.EksterntVarselKansellert, is HendelseModel.EksterntVarselVellykket -> Unit diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/statistikk/StatistikkModel.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/statistikk/StatistikkModel.kt index f2bb92189..828479a48 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/statistikk/StatistikkModel.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/statistikk/StatistikkModel.kt @@ -27,6 +27,7 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.PåminnelseOppret import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SakOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SmsVarselKontaktinfo import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.SoftDelete +import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.TilleggsinformasjonSak import no.nav.arbeidsgiver.notifikasjon.infrastruktur.Database import no.nav.arbeidsgiver.notifikasjon.infrastruktur.basedOnEnv import no.nav.arbeidsgiver.notifikasjon.infrastruktur.logger @@ -441,6 +442,10 @@ class StatistikkModel( // noop } + is TilleggsinformasjonSak -> { + // noop + } + is FristUtsatt -> { database.nonTransactionalExecuteUpdate( """ diff --git a/app/src/main/resources/produsent.graphql b/app/src/main/resources/produsent.graphql index 3453acaf0..9bffd4110 100644 --- a/app/src/main/resources/produsent.graphql +++ b/app/src/main/resources/produsent.graphql @@ -332,6 +332,13 @@ type NyStatusSakVellykket { statuser: [StatusOppdatering!]! } +union TilleggsinformasjonSakResultat = + | TilleggsinformasjonSakVellykket + | SakFinnesIkke + | Konflikt + | UgyldigMerkelapp + | UkjentProdusent + union NesteStegSakResultat = | NesteStegSakVellykket | SakFinnesIkke @@ -339,6 +346,10 @@ union NesteStegSakResultat = | UgyldigMerkelapp | UkjentProdusent +type TilleggsinformasjonSakVellykket { + id: ID! +} + type NesteStegSakVellykket { id: ID! } @@ -606,6 +617,19 @@ type Mutation { nyLenkeTilSak: String ): NyStatusSakResultat! + tilleggsinformasjonSak( + idempotencyKey: String + id: ID! + + """ + Dette feltet er frivillig. + Her har dere mulighet til å vise virksomheten mer informasjon om saken. + Feltet er begrenset til 1000 tegn og kan ikke inneholde personnummer. + """ + tilleggsinformasjon: String @Validate @MaxLength(max: 1000) @NonIdentifying + ): TilleggsinformasjonSakResultat! + + nesteStegSak( idempotencyKey: String id: ID! diff --git a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/ProdusentRepositoryStub.kt b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/ProdusentRepositoryStub.kt index 1ed393c9a..e6ac82746 100644 --- a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/ProdusentRepositoryStub.kt +++ b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/ProdusentRepositoryStub.kt @@ -49,7 +49,7 @@ open class ProdusentRepositoryStub : ProdusentRepository { TODO("Not yet implemented") } - override suspend fun nesteStegSakFinnes(id: UUID, idempotenceKey: String): Boolean { + override suspend fun sakOppdateringFinnes(id: UUID, idempotenceKey: String): Boolean { TODO("Not yet implemented") } } \ No newline at end of file