-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
La til initiell håndtering ev Melding mottatt
- Loading branch information
Showing
7 changed files
with
80 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
Periode starter -> - oppretter intern state med start tidspunkt fra periode | ||
- opprette bekreftelse i tilstand "ikke klar" | ||
Schedule task: | ||
for hver bekreftelse i "ikke klar", sett til til "klar for utfylling" x tid før gjelderTil og send hendelse BekreftelseTilgjenelig | ||
|
||
for hver bekreftelse i "klar for utfylling" og gjelderTil passert, sett til til "venter på svar" og send hendelse LeveringsFristUtloept | ||
|
||
for hver bekreftelse i "venter på svar" og ingen purring sendt og x tid passert siden frist, send RegisterGracePeriodeGjenstaaendeTid og sett purring sendt timestamp til now() | ||
|
||
for hver bekreftelse i "venter på svar" og grace periode utløpt, send RegisterGracePeriodeUtloept | ||
|
||
Melding med svar fra bruker mottatt -> - finn matchene berkreftelse i status "venter på svar" || "klar for utfylling" og set til "levert", ta vare på x siste bekreftelser. | ||
- Send ut BekreftelseMeldingMottatt | ||
- Dersom ønsker å avslutte: send BaOmAaAvsluttePeriode | ||
|
||
Periode avsluttet -> slett intern state og send PeriodeAvsluttet hendelse | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
60 changes: 53 additions & 7 deletions
60
...else-tjeneste/src/main/kotlin/no/nav/paw/bekretelsetjeneste/RapportingsMeldingTopology.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,76 @@ | ||
package no.nav.paw.bekretelsetjeneste | ||
|
||
import no.nav.paw.config.kafka.streams.genericProcess | ||
import no.nav.paw.bekretelsetjeneste.tilstand.InternTilstand | ||
import no.nav.paw.bekreftelse.internehendelser.BaOmAaAvsluttePeriode | ||
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse | ||
import no.nav.paw.bekreftelse.internehendelser.BekreftelseMeldingMottatt | ||
import no.nav.paw.bekretelsetjeneste.tilstand.Bekreftelse | ||
import no.nav.paw.bekretelsetjeneste.tilstand.InternTilstand | ||
import no.nav.paw.bekretelsetjeneste.tilstand.Tilstand | ||
import no.nav.paw.bekretelsetjeneste.tilstand.Tilstand.KlarForUtfylling | ||
import no.nav.paw.bekretelsetjeneste.tilstand.Tilstand.VenterSvar | ||
import no.nav.paw.config.kafka.streams.genericProcess | ||
import no.nav.paw.rapportering.melding.v1.Melding | ||
import org.apache.kafka.streams.StreamsBuilder | ||
import org.apache.kafka.streams.processor.api.Record | ||
import org.slf4j.LoggerFactory | ||
import java.util.* | ||
|
||
context(ApplicationConfiguration, ApplicationContext) | ||
fun StreamsBuilder.processRapporteringsMeldingTopic() { | ||
fun StreamsBuilder.processBekreftelseMeldingTopic() { | ||
stream<Long, Melding>(bekreftelseTopic) | ||
.genericProcess<Long, Melding, Long, BekreftelseHendelse>( | ||
name = "meldingMottatt", | ||
stateStoreName | ||
) { record -> | ||
val gjeldeneTilstand: InternTilstand? = getStateStore<StateStore>(stateStoreName)[record.value().periodeId] | ||
val stateStore = getStateStore<StateStore>(stateStoreName) | ||
val gjeldeneTilstand: InternTilstand? = stateStore[record.value().periodeId] | ||
if (gjeldeneTilstand == null) { | ||
meldingsLogger.warn("Melding mottatt for periode som ikke er aktiv/eksisterer") | ||
} else { | ||
TODO() | ||
return@genericProcess | ||
} | ||
if (record.value().namespace == pawNamespace) { | ||
val bekreftelse = gjeldeneTilstand.bekreftelser.find { bekreftelse -> bekreftelse.bekreftelseId == record.value().id } | ||
when { | ||
bekreftelse == null -> { | ||
meldingsLogger.warn("Melding {} har ingen matchene bekreftelse", record.value().id) | ||
} | ||
bekreftelse.tilstand is VenterSvar || bekreftelse.tilstand is KlarForUtfylling -> { | ||
val (hendelser, oppdatertBekreftelse) = behandleGyldigSvar(gjeldeneTilstand.periode.arbeidsoekerId, record, bekreftelse) | ||
val oppdatertBekreftelser = gjeldeneTilstand.bekreftelser | ||
.filterNot { t -> t.bekreftelseId == oppdatertBekreftelse.bekreftelseId } + oppdatertBekreftelse | ||
val oppdatertTilstand = gjeldeneTilstand.copy(bekreftelser = oppdatertBekreftelser) | ||
stateStore.put(oppdatertTilstand.periode.periodeId, oppdatertTilstand) | ||
hendelser | ||
.map (record::withValue) | ||
.forEach (::forward) | ||
} | ||
else -> { | ||
meldingsLogger.warn("Melding {} har ikke forventet tilstand, tilstand={}", record.value().id, bekreftelse.tilstand) | ||
} | ||
} | ||
} | ||
|
||
} | ||
} | ||
|
||
fun behandleGyldigSvar(arbeidssoekerId: Long, record: Record<Long, Melding>, bekreftelse: Bekreftelse): Pair<List<BekreftelseHendelse>, Bekreftelse> { | ||
val oppdatertBekreftelse = bekreftelse.copy(tilstand = Tilstand.Levert) | ||
val baOmAaAvslutte = if (!record.value().svar.vilFortsetteSomArbeidssoeker) { | ||
BaOmAaAvsluttePeriode( | ||
hendelseId = UUID.randomUUID(), | ||
periodeId = record.value().periodeId, | ||
arbeidssoekerId = arbeidssoekerId | ||
) | ||
} else null | ||
val meldingMottatt = BekreftelseMeldingMottatt( | ||
hendelseId = UUID.randomUUID(), | ||
periodeId = record.value().periodeId, | ||
arbeidssoekerId = arbeidssoekerId, | ||
bekreftelseId = bekreftelse.bekreftelseId | ||
) | ||
return listOfNotNull(meldingMottatt, baOmAaAvslutte) to oppdatertBekreftelse | ||
} | ||
|
||
|
||
private val meldingsLogger = LoggerFactory.getLogger("meldingsLogger") | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters