Skip to content

Commit

Permalink
Ny river i im-notifikasjon for å sette oppgaver til utgått (#711)
Browse files Browse the repository at this point in the history
Co-authored-by: Magnus Sælensminde <[email protected]>
Co-authored-by: Gustav Berggren <[email protected]>
  • Loading branch information
3 people authored Oct 15, 2024
1 parent 1159ff9 commit 744849a
Show file tree
Hide file tree
Showing 5 changed files with 432 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,5 @@ enum class EventName {
OPPGAVE_OPPRETTET,
OPPGAVE_LAGRET,
OPPGAVE_FERDIGSTILT,
SAK_OG_OPPGAVE_UTGAATT,
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettSakLoe
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.OpprettSelvbestemtSakRiver
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.SakFerdigLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.SlettSakLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river.UtgaattLoeser
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.service.ManuellOpprettSakService
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.service.OpprettOppgaveService
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.service.OpprettSakService
Expand Down Expand Up @@ -98,6 +99,9 @@ fun RapidsConnection.createNotifikasjonRivers(
logger.info("Starter ${OppgaveFerdigLoeser::class.simpleName}...")
OppgaveFerdigLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${UtgaattLoeser::class.simpleName}...")
UtgaattLoeser(this, arbeidsgiverNotifikasjonKlient, linkUrl)

logger.info("Starter ${SlettSakLoeser::class.simpleName}...")
SlettSakLoeser(this, arbeidsgiverNotifikasjonKlient)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ object NotifikasjonTekst {
const val OPPGAVE_TEKST = "Innsending av inntektsmelding"
const val STATUS_TEKST_UNDER_BEHANDLING = "NAV trenger inntektsmelding"
const val STATUS_TEKST_FERDIG = "Mottatt – Se kvittering eller korriger inntektsmelding"
const val STATUS_TEKST_AVBRUTT = "Avbrutt av NAV"

fun lenkeFerdigstilt(
linkUrl: String,
Expand Down Expand Up @@ -95,3 +96,27 @@ fun ArbeidsgiverNotifikasjonKlient.ferdigstillSak(
)
}
}

fun ArbeidsgiverNotifikasjonKlient.avbrytSak(
forespoerselId: UUID,
nyLenke: String,
): Result<Unit> =
Metrics.agNotifikasjonRequest.recordTime(::nyStatusSakByGrupperingsid) {
runCatching {
nyStatusSakByGrupperingsid(
grupperingsid = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP,
status = SaksStatus.FERDIG,
statusTekst = NotifikasjonTekst.STATUS_TEKST_AVBRUTT,
nyLenke = nyLenke,
)
}.recoverCatching {
nyStatusSakByGrupperingsid(
grupperingsid = forespoerselId.toString(),
merkelapp = NotifikasjonTekst.MERKELAPP_GAMMEL,
status = SaksStatus.FERDIG,
statusTekst = NotifikasjonTekst.STATUS_TEKST_AVBRUTT,
nyLenke = nyLenke,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river

import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage
import com.github.navikt.tbd_libs.rapids_and_rivers.River
import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageContext
import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.SakEllerOppgaveFinnesIkkeException
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.les
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.metrics.Metrics
import no.nav.helsearbeidsgiver.felles.rapidsrivers.demandValues
import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish
import no.nav.helsearbeidsgiver.felles.rapidsrivers.requireKeys
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst.MERKELAPP
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst.MERKELAPP_GAMMEL
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.avbrytSak
import no.nav.helsearbeidsgiver.utils.json.parseJson
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.json.toPretty
import no.nav.helsearbeidsgiver.utils.log.MdcUtils
import no.nav.helsearbeidsgiver.utils.log.logger
import no.nav.helsearbeidsgiver.utils.log.sikkerLogger
import java.util.UUID

class UtgaattLoeser(
rapid: RapidsConnection,
private val agNotifikasjonKlient: ArbeidsgiverNotifikasjonKlient,
private val linkUrl: String,
) : River.PacketListener {
private val logger = logger()
private val sikkerLogger = sikkerLogger()

init {
River(rapid)
.apply {
validate {
it.demandValues(
Key.EVENT_NAME to EventName.FORESPOERSEL_FORKASTET.name,
)
it.requireKeys(
Key.UUID,
Key.FORESPOERSEL_ID,
)
}
}.register(this)
}

override fun onPacket(
packet: JsonMessage,
context: MessageContext,
) {
if (packet[Key.FORESPOERSEL_ID.str].asText().isEmpty()) {
logger.warn("Mangler forespørselId!")
sikkerLogger.warn("Mangler forespørselId!")
}
val json = packet.toJson().parseJson()

logger.info("Mottok melding med event '${EventName.FORESPOERSEL_FORKASTET}'.")
sikkerLogger.info("Mottok melding:\n${json.toPretty()}")

MdcUtils.withLogFields(
Log.klasse(this),
Log.event(EventName.FORESPOERSEL_FORKASTET),
) {
runCatching {
haandterMelding(json.toMap(), context)
}.onFailure { e ->
"Ukjent feil.".also {
logger.error("$it Se sikker logg for mer info.")
sikkerLogger.error(it, e)
}
}
}
}

private fun haandterMelding(
melding: Map<Key, JsonElement>,
context: MessageContext,
) {
val forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, melding)
val transaksjonId = Key.UUID.les(UuidSerializer, melding)

MdcUtils.withLogFields(
Log.forespoerselId(forespoerselId),
Log.transaksjonId(transaksjonId),
) {
settUtgaatt(forespoerselId, transaksjonId, context)
}
}

private fun settUtgaatt(
forespoerselId: UUID,
transaksjonId: UUID,
context: MessageContext,
) {
Metrics.agNotifikasjonRequest.recordTime(agNotifikasjonKlient::oppgaveUtgaattByEksternId) {
runCatching {
agNotifikasjonKlient.oppgaveUtgaattByEksternId(
merkelapp = MERKELAPP,
eksternId = forespoerselId.toString(),
nyLenke = "$linkUrl/im-dialog/utgatt",
)
}.recoverCatching {
agNotifikasjonKlient.oppgaveUtgaattByEksternId(
merkelapp = MERKELAPP_GAMMEL,
eksternId = forespoerselId.toString(),
nyLenke = "$linkUrl/im-dialog/utgatt",
)
}.onFailure {
if (it is SakEllerOppgaveFinnesIkkeException) {
logger.warn(it.message)
sikkerLogger.warn(it.message)
} else {
throw it
}
}
}

agNotifikasjonKlient.avbrytSak(forespoerselId, "$linkUrl/im-dialog/utgatt").onFailure {
if (it is SakEllerOppgaveFinnesIkkeException) {
logger.warn(it.message)
sikkerLogger.warn(it.message)
} else {
throw it
}
}

context.publish(
Key.EVENT_NAME to EventName.SAK_OG_OPPGAVE_UTGAATT.toJson(),
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
Key.UUID to transaksjonId.toJson(),
)
}
}
Loading

0 comments on commit 744849a

Please sign in to comment.