Skip to content

Commit

Permalink
Merge pull request #1820 from navikt/dev
Browse files Browse the repository at this point in the history
Prodsette: Gjer at vi tåler nye Hendelse-kategoriar
  • Loading branch information
ingfo authored Dec 20, 2024
2 parents 456d843 + b097887 commit f88b307
Show file tree
Hide file tree
Showing 9 changed files with 374 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ data class HendelseRecordValue @JsonCreator constructor(
}

enum class Kategori {
UTGATT_VARSEL
UTGATT_VARSEL,
UDELT_SAMTALEREFERAT
}

enum class Operasjon {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,20 @@ class HendelseRepository(
}

/**
* Henter den eldste hendelsen:
* Henter den eldste hendelsen med en bestemt kategori:
*
* * dersom minst en hendelse eksisterer for [personIdent] returneres den eldste av disse
* * dersom ingen hendelser eksisterer for [personIdent] kastes en [IngenHendelseForPersonException]
*/
fun getEldste(personIdent: NorskIdent): Hendelse {
fun getEldste(personIdent: NorskIdent, kategori: Kategori): Hendelse {
// language=postgresql
val sql = """
SELECT * FROM ${HENDELSE.TABLE_NAME} WHERE ${HENDELSE.PERSON_IDENT} = ?
SELECT * FROM ${HENDELSE.TABLE_NAME} WHERE ${HENDELSE.PERSON_IDENT} = ? AND ${HENDELSE.KATEGORI} = ?
ORDER BY ${HENDELSE.HENDELSE_DATO} LIMIT 1
""".trimIndent()

val resultat = try {
jdbcTemplate.queryForObject(sql, ::toHendelse, personIdent.get())
jdbcTemplate.queryForObject(sql, ::toHendelse, personIdent.get(), kategori.name)
} catch (ex: EmptyResultDataAccessException) {
throw IngenHendelseForPersonException(cause = ex)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,27 @@ class HendelseService(
}

if (resultatAvInsertNyHendelse is HendelseIdEksistererAlleredeException) {
logger.info("Hendelse med ID ${hendelse.id} allerede startet. Ignorerer melding.")
logger.info("Hendelse med ID ${hendelse.id} og kategori ${hendelse.kategori} allerede startet. Ignorerer melding.")
return
}

val eldsteHendelse = hendelseRepository.getEldste(hendelse.personIdent)
when (hendelse.kategori) {
Kategori.UTGATT_VARSEL -> {
val eldsteUtgattVarselHendelse =
hendelseRepository.getEldste(hendelse.personIdent, Kategori.UTGATT_VARSEL)

if (eldsteHendelse.id == hendelse.id) {
oppdaterUgattVarselForBrukerIOpenSearch(hendelse)
if (eldsteUtgattVarselHendelse.id == hendelse.id) {
oppdaterUtgattVarselForBrukerIOpenSearch(hendelse)

logger.info("Hendelse med id ${hendelse.id} ble lagret i DB og OpenSearch ble oppdatert med ny eldste utgåtte varsel for person.")
} else {
logger.info("Hendelse med id ${hendelse.id} ble lagret i DB")
logger.info("Hendelse med id ${hendelse.id} og kategori ${Kategori.UTGATT_VARSEL} ble lagret i DB og OpenSearch ble oppdatert med ny eldste utgåtte varsel for person.")
} else {
logger.info("Hendelse med id ${hendelse.id} og kategori ${Kategori.UTGATT_VARSEL} ble lagret i DB")
}
}

Kategori.UDELT_SAMTALEREFERAT -> {
logger.info("Hendelse med id ${hendelse.id} og kategori ${hendelse.kategori} ble lagret i DB")
}
}
}

Expand All @@ -102,16 +111,24 @@ class HendelseService(
// Per no ignorer vi melding, då vi forventar å alltid få ei "START"-melding før ei eventuell "OPPDATER"- eller "STOPP"-melding.
// Dette går fint så lenge vi ikkje har skrudd på "compaction" på topic-et. Dersom vi har "compaction" på er det ikkje gitt
// at vi berre kan ignorere, sidan vi då potensielt går glipp av hendelsar ved ein eventuell rewind på topic-et.
logger.warn("Fikk hendelse med operasjon ${Operasjon.OPPDATER} og ID ${hendelse.id}, men ingen hendelse med denne ID-en finnes. Ignorerer melding.")
logger.warn("Fikk hendelse med operasjon ${Operasjon.OPPDATER}, ID ${hendelse.id} og kategori ${hendelse.kategori}, men ingen hendelse med denne ID-en finnes. Ignorerer melding.")
return
}

val eldsteHendelse = hendelseRepository.getEldste(hendelse.personIdent)
if (eldsteHendelse.id == hendelse.id) {
oppdaterUgattVarselForBrukerIOpenSearch(hendelse)
logger.info("Hendelse med id ${hendelse.id} ble oppdatert i DB og OpenSearch ble oppdatert med ny eldste utgåtte varsel for person.")
} else {
logger.info("Hendelse med id ${hendelse.id} ble oppdatert i DB")
when (hendelse.kategori) {
Kategori.UTGATT_VARSEL -> {
val eldsteUtgattVarselHendelse = hendelseRepository.getEldste(hendelse.personIdent, Kategori.UTGATT_VARSEL)

if (eldsteUtgattVarselHendelse.id == hendelse.id) {
oppdaterUtgattVarselForBrukerIOpenSearch(hendelse)
logger.info("Hendelse med id ${hendelse.id} og kategori ${Kategori.UTGATT_VARSEL} ble oppdatert i DB og OpenSearch ble oppdatert med ny eldste utgåtte varsel for person.")
} else {
logger.info("Hendelse med id ${hendelse.id} og kategori ${Kategori.UTGATT_VARSEL} ble oppdatert i DB")
}
}
Kategori.UDELT_SAMTALEREFERAT -> {
logger.info("Hendelse med id ${hendelse.id} og kategori ${hendelse.kategori} ble oppdatert i DB")
}
}
}

Expand All @@ -127,53 +144,46 @@ class HendelseService(
// Per no ignorer vi melding, då vi forventar å alltid få ei "START"-melding før ei eventuell "OPPDATER"- eller "STOPP"-melding.
// Dette går fint så lenge vi ikkje har skrudd på "compaction" på topic-et. Dersom vi har "compaction" på er det ikkje gitt
// at vi berre kan ignorere, sidan vi då potensielt går glipp av hendelsar ved ein eventuell rewind på topic-et.
logger.warn("Fikk hendelse med operasjon ${Operasjon.STOPP} og ID ${hendelse.id}, men ingen hendelse med denne ID-en finnes. Ignorerer melding.")
logger.warn("Fikk hendelse med operasjon ${Operasjon.STOPP}, ID ${hendelse.id} og kategori ${hendelse.kategori}, men ingen hendelse med denne ID-en finnes. Ignorerer melding.")
return
}

val resultatAvGetEldsteHendelse = try {
hendelseRepository.getEldste(hendelse.personIdent)
} catch (ex: IngenHendelseForPersonException) {
ex
}
when (hendelse.kategori) {
Kategori.UTGATT_VARSEL -> {
val resultatAvGetEldsteUtgattVarselHendelse = try {
hendelseRepository.getEldste(hendelse.personIdent, Kategori.UTGATT_VARSEL)
} catch (ex: IngenHendelseForPersonException) {
ex
}

if (resultatAvGetEldsteHendelse is IngenHendelseForPersonException) {
// All good - det var ingen flere hendelser for personen etter at vi slettet den som kom inn som argument
slettUgattVarselForBrukerIOpenSearch(hendelse)
logger.info("Hendelse med id ${hendelse.id} ble slettet i DB og utgått varsel ble fjernet for person i OpenSearch siden personen ikke hadde andre hendelser.")
return
}
if (resultatAvGetEldsteUtgattVarselHendelse is IngenHendelseForPersonException) {
// All good - det var ingen flere hendelser for personen etter at vi slettet den som kom inn som argument
slettUgattVarselForBrukerIOpenSearch(hendelse)
logger.info("Hendelse med id ${hendelse.id} og kategori ${Kategori.UTGATT_VARSEL} ble slettet i DB og utgått varsel ble fjernet for person i OpenSearch siden personen ikke hadde andre hendelser.")
return
}

if (resultatAvGetEldsteHendelse is Hendelse) {
oppdaterUgattVarselForBrukerIOpenSearch(resultatAvGetEldsteHendelse)
if (resultatAvGetEldsteUtgattVarselHendelse is Hendelse) {
oppdaterUtgattVarselForBrukerIOpenSearch(resultatAvGetEldsteUtgattVarselHendelse)

logger.info("Hendelse med id ${hendelse.id} ble slettet i DB og OpenSearch ble oppdatert med ny eldste utgåtte varsel for person, med id ${resultatAvGetEldsteHendelse.id}")
logger.info("Hendelse med id ${hendelse.id} og kategori ${Kategori.UTGATT_VARSEL} ble slettet i DB og OpenSearch ble oppdatert med ny eldste utgåtte varsel for person, med id ${resultatAvGetEldsteUtgattVarselHendelse.id}")
}
}
Kategori.UDELT_SAMTALEREFERAT -> {
logger.info("Hendelse med id ${hendelse.id} og kategori ${hendelse.kategori} ble slettet i DB.")
}
}
}

private fun oppdaterUgattVarselForBrukerIOpenSearch(hendelse: Hendelse) {
// 2024-11-29, Sondre
// Egentlig unødvendig if-sjekk så lenge kun Team DAB er på med "utgåtte varsel"
// Men har den med likevel for å tydeliggjøre at det er "utgått varsel"-feltet i OpenSearch
// som oppdateres her. Vi må huske å oppdatere håndtering etterhvert som denne tjenesten
// blir mer generalisert/får flere produsenter
if (Kategori.UTGATT_VARSEL == hendelse.kategori) {
// TODO: 2024-11-29, Sondre - Her konverterer vi bare ukritisk til Fnr, selv om NorskIdent også kan være f.eks. D-nummer
val aktorId = pdlIdentRepository.hentAktorIdForAktivBruker(Fnr.of(hendelse.personIdent.get()))
opensearchIndexerV2.oppdaterUtgattVarsel(hendelse, aktorId)
}
private fun oppdaterUtgattVarselForBrukerIOpenSearch(hendelse: Hendelse) {
// TODO: 2024-11-29, Sondre - Her konverterer vi bare ukritisk til Fnr, selv om NorskIdent også kan være f.eks. D-nummer
val aktorId = pdlIdentRepository.hentAktorIdForAktivBruker(Fnr.of(hendelse.personIdent.get()))
opensearchIndexerV2.oppdaterUtgattVarsel(hendelse, aktorId)
}

private fun slettUgattVarselForBrukerIOpenSearch(hendelse: Hendelse) {
// 2024-11-29, Sondre
// Egentlig unødvendig if-sjekk så lenge kun Team DAB er på med "utgåtte varsel"
// Men har den med likevel for å tydeliggjøre at det er "utgått varsel"-feltet i OpenSearch
// som oppdateres her. Vi må huske å oppdatere håndtering etterhvert som denne tjenesten
// blir mer generalisert/får flere produsenter
if (Kategori.UTGATT_VARSEL == hendelse.kategori) {
// TODO: 2024-11-29, Sondre - Her konverterer vi bare ukritisk til Fnr, selv om NorskIdent også kan være f.eks. D-nummer
val aktorId = pdlIdentRepository.hentAktorIdForAktivBruker(Fnr.of(hendelse.personIdent.get()))
opensearchIndexerV2.slettUtgattVarsel(aktorId)
}
// TODO: 2024-11-29, Sondre - Her konverterer vi bare ukritisk til Fnr, selv om NorskIdent også kan være f.eks. D-nummer
val aktorId = pdlIdentRepository.hentAktorIdForAktivBruker(Fnr.of(hendelse.personIdent.get()))
opensearchIndexerV2.slettUtgattVarsel(aktorId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import no.nav.pto.veilarbportefolje.hendelsesfilter.Hendelse;
import no.nav.pto.veilarbportefolje.hendelsesfilter.HendelseRepository;
import no.nav.pto.veilarbportefolje.hendelsesfilter.IngenHendelseForPersonException;
import no.nav.pto.veilarbportefolje.hendelsesfilter.Kategori;
import no.nav.pto.veilarbportefolje.kodeverk.KodeverkService;
import no.nav.pto.veilarbportefolje.opensearch.domene.Endring;
import no.nav.pto.veilarbportefolje.opensearch.domene.OppfolgingsBruker;
Expand Down Expand Up @@ -249,7 +250,7 @@ public void flettInnSiste14aVedtak(List<OppfolgingsBruker> brukere) {
public void flettInnEldsteUtgattVarsel(List<OppfolgingsBruker> brukere) {
brukere.forEach(bruker -> {
try {
Hendelse eldsteHendelsePaPerson = hendelseRepository.getEldste(NorskIdent.of(bruker.getFnr()));
Hendelse eldsteHendelsePaPerson = hendelseRepository.getEldste(NorskIdent.of(bruker.getFnr()), Kategori.UTGATT_VARSEL);
bruker.setUtgatt_varsel(eldsteHendelsePaPerson.getHendelse());
} catch (IngenHendelseForPersonException ex) {
log.info("Fant ingen hendelse/utgått varsel for person, så ingen data å flette inn.");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE INDEX IDX_FILTERHENDELSER_HENDELSE_KATEGORI on FILTERHENDELSER (kategori);
Loading

0 comments on commit f88b307

Please sign in to comment.