diff --git a/src/main/kotlin/no/nav/tms/varsel/api/varsel/VarselConsumer.kt b/src/main/kotlin/no/nav/tms/varsel/api/varsel/VarselConsumer.kt index 75a918a..a27a662 100644 --- a/src/main/kotlin/no/nav/tms/varsel/api/varsel/VarselConsumer.kt +++ b/src/main/kotlin/no/nav/tms/varsel/api/varsel/VarselConsumer.kt @@ -5,6 +5,8 @@ import io.ktor.client.call.* import io.ktor.client.request.* import io.ktor.http.* import no.nav.tms.token.support.tokendings.exchange.TokendingsService +import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2 +import no.nav.tms.varsel.api.varsel.v2.AlleVarsler import java.time.ZonedDateTime class VarselConsumer( @@ -32,6 +34,12 @@ class VarselConsumer( return getVarsler(userToken, "/varsel/sammendrag/alle", preferertSpraak = preferertSpraak) .let(AlleVarsler::fromVarsler) } + + suspend fun getAktiveVarslerV2(userToken: String, preferertSpraak: String?): AktiveVarslerV2 { + return getVarsler(userToken, "/varsel/sammendrag/aktive", preferertSpraak = preferertSpraak) + .let (AktiveVarslerV2::fromVarsler) + } + suspend fun postInaktiver(userToken: String, varselId: String) { val authorityToken = tokendingsService.exchangeToken(userToken, varselAuthorityClientId) diff --git a/src/main/kotlin/no/nav/tms/varsel/api/varsel/alleVarsler.kt b/src/main/kotlin/no/nav/tms/varsel/api/varsel/alleVarsler.kt deleted file mode 100644 index 73b5a50..0000000 --- a/src/main/kotlin/no/nav/tms/varsel/api/varsel/alleVarsler.kt +++ /dev/null @@ -1,78 +0,0 @@ -package no.nav.tms.varsel.api.varsel - -import java.time.ZonedDateTime - -data class Varsel( - @Deprecated("Use varselId") val eventId: String, - @Deprecated("Use tidspunkt") val forstBehandlet: ZonedDateTime, - val isMasked: Boolean, - val spraakkode: String?, - val tekst: String?, - val link: String?, - val eksternVarslingSendt: Boolean, - val eksternVarslingKanaler: List, - val type: VarselType, - val isInaktiverbar: Boolean, - - ) { - companion object { - fun fromVarsel(varsel: VarselAuthority.Varsel): Varsel { - val isMasked = varsel.innhold == null - val isInaktivertOppgave = varsel.type == VarselType.oppgave && !varsel.aktiv - - return Varsel( - eventId = varsel.varselId, - forstBehandlet = varsel.opprettet, - isMasked = isMasked, - spraakkode = varsel.innhold?.spraakkode, - tekst = varsel.innhold?.tekst, - link = if(isInaktivertOppgave) null else varsel.innhold?.link, - eksternVarslingSendt = varsel.eksternVarslingSendt, - eksternVarslingKanaler = varsel.eksternVarslingKanaler, - type = if (varsel.type == VarselType.oppgave) VarselType.oppgave else VarselType.beskjed, - isInaktiverbar = varsel.type == VarselType.beskjed && varsel.aktiv && !isMasked, - ) - } - } -} - -data class AlleVarsler( - val hasMaskedVarsel: Boolean, - val aktive: AktivtVarselV2, - val inaktive: List, -) { - companion object { - fun fromVarsler(varsler: List): AlleVarsler { - val aktivBeskjeder = mutableListOf() - val aktivOppgaver = mutableListOf() - val inaktivtVarseler = mutableListOf() - var hasMaskedVarsel = false - - varsler.map { - if(it.innhold == null) { - hasMaskedVarsel = true - } - - if (it.aktiv) { - if (it.type == VarselType.oppgave) { - aktivOppgaver.add(Varsel.fromVarsel(it)) - } else { - aktivBeskjeder.add(Varsel.fromVarsel(it)) - } - } else { - inaktivtVarseler.add(Varsel.fromVarsel(it)) - } - } - return AlleVarsler( - hasMaskedVarsel = hasMaskedVarsel, - aktive = AktivtVarselV2(aktivBeskjeder, aktivOppgaver), - inaktive = inaktivtVarseler - ) - } - } -} - -data class AktivtVarselV2( - val beskjeder: List, - val oppgaver: List, -) \ No newline at end of file diff --git a/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/Varsel.kt b/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/Varsel.kt new file mode 100644 index 0000000..990aca2 --- /dev/null +++ b/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/Varsel.kt @@ -0,0 +1,39 @@ +package no.nav.tms.varsel.api.varsel.v2 + +import no.nav.tms.varsel.api.varsel.VarselAuthority +import no.nav.tms.varsel.api.varsel.VarselType +import java.time.ZonedDateTime + +data class Varsel( + @Deprecated("Use varselId") val eventId: String, + @Deprecated("Use tidspunkt") val forstBehandlet: ZonedDateTime, + val isMasked: Boolean, + val spraakkode: String?, + val tekst: String?, + val link: String?, + val eksternVarslingSendt: Boolean, + val eksternVarslingKanaler: List, + val type: VarselType, + val isInaktiverbar: Boolean, + + ) { + companion object { + fun fromVarsel(varsel: VarselAuthority.Varsel): Varsel { + val isMasked = varsel.innhold == null + val isInaktivertOppgave = varsel.type == VarselType.oppgave && !varsel.aktiv + + return Varsel( + eventId = varsel.varselId, + forstBehandlet = varsel.opprettet, + isMasked = isMasked, + spraakkode = varsel.innhold?.spraakkode, + tekst = varsel.innhold?.tekst, + link = if (isInaktivertOppgave) null else varsel.innhold?.link, + eksternVarslingSendt = varsel.eksternVarslingSendt, + eksternVarslingKanaler = varsel.eksternVarslingKanaler, + type = if (varsel.type == VarselType.oppgave) VarselType.oppgave else VarselType.beskjed, + isInaktiverbar = varsel.type == VarselType.beskjed && varsel.aktiv && !isMasked, + ) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/aktiveVarsler.kt b/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/aktiveVarsler.kt new file mode 100644 index 0000000..38432ae --- /dev/null +++ b/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/aktiveVarsler.kt @@ -0,0 +1,23 @@ +package no.nav.tms.varsel.api.varsel.v2 + +import no.nav.tms.varsel.api.varsel.VarselAuthority +import no.nav.tms.varsel.api.varsel.VarselType + + +data class AktiveVarslerV2(val beskjeder: List, val oppgaver: List) { + companion object { + fun fromVarsler(varsler: List): AktiveVarslerV2 { + val beskjeder = mutableListOf() + val oppgaver = mutableListOf() + + varsler.map { + if (it.type == VarselType.oppgave) { + oppgaver.add(Varsel.fromVarsel(it)) + } else { + beskjeder.add(Varsel.fromVarsel(it)) + } + } + return AktiveVarslerV2(beskjeder = beskjeder, oppgaver = oppgaver) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/alleVarsler.kt b/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/alleVarsler.kt new file mode 100644 index 0000000..66300d1 --- /dev/null +++ b/src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/alleVarsler.kt @@ -0,0 +1,40 @@ +package no.nav.tms.varsel.api.varsel.v2 + +import no.nav.tms.varsel.api.varsel.VarselAuthority +import no.nav.tms.varsel.api.varsel.VarselType + +data class AlleVarsler( + val hasMaskedVarsel: Boolean, + val aktive: AktiveVarslerV2, + val inaktive: List, +) { + companion object { + fun fromVarsler(varsler: List): AlleVarsler { + val aktivBeskjeder = mutableListOf() + val aktivOppgaver = mutableListOf() + val inaktivtVarseler = mutableListOf() + var hasMaskedVarsel = false + + varsler.map { + if(it.innhold == null) { + hasMaskedVarsel = true + } + + if (it.aktiv) { + if (it.type == VarselType.oppgave) { + aktivOppgaver.add(Varsel.fromVarsel(it)) + } else { + aktivBeskjeder.add(Varsel.fromVarsel(it)) + } + } else { + inaktivtVarseler.add(Varsel.fromVarsel(it)) + } + } + return AlleVarsler( + hasMaskedVarsel = hasMaskedVarsel, + aktive = AktiveVarslerV2(aktivBeskjeder, aktivOppgaver), + inaktive = inaktivtVarseler + ) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/tms/varsel/api/varsel/varselRoutes.kt b/src/main/kotlin/no/nav/tms/varsel/api/varsel/varselRoutes.kt index fd62b79..af0edac 100644 --- a/src/main/kotlin/no/nav/tms/varsel/api/varsel/varselRoutes.kt +++ b/src/main/kotlin/no/nav/tms/varsel/api/varsel/varselRoutes.kt @@ -48,6 +48,14 @@ fun Route.varsel( } } + get("v2/aktive"){ + varselConsumer.getAktiveVarslerV2( + userToken = call.userToken, + preferertSpraak = call.request.preferertSpraak + ).let { aktiveVarsler -> + call.respond(HttpStatusCode.OK, aktiveVarsler) + } + } post("beskjed/inaktiver") { varselConsumer.postInaktiver(varselId = call.varselId(), userToken = call.userToken) diff --git a/src/test/kotlin/no/nav/tms/varsel/api/`VarselAuthority.Varsel`RoutesTest.kt b/src/test/kotlin/no/nav/tms/varsel/api/`VarselAuthority.Varsel`RoutesTest.kt index da00a4f..2103d3a 100644 --- a/src/test/kotlin/no/nav/tms/varsel/api/`VarselAuthority.Varsel`RoutesTest.kt +++ b/src/test/kotlin/no/nav/tms/varsel/api/`VarselAuthority.Varsel`RoutesTest.kt @@ -29,8 +29,10 @@ import org.junit.jupiter.api.Test import java.time.ZonedDateTime import com.fasterxml.jackson.module.kotlin.readValue import no.nav.tms.varsel.api.varsel.* +import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2 +import no.nav.tms.varsel.api.varsel.v2.AlleVarsler -class VarselRoutesTest { +class VarselRoutesTest{ private val objectMapper = jacksonObjectMapper().jsonConfig() @@ -69,6 +71,31 @@ class VarselRoutesTest { } + @Test + fun `Hent aktive varsler V2`() = varselRoutesTest{ client -> + val aktiveVarsler = listOf( + VarselTestData.varsel(type = VarselType.beskjed), + VarselTestData.varsel(type = VarselType.oppgave), + VarselTestData.varsel(type = VarselType.oppgave), + VarselTestData.varsel(type = VarselType.innboks), + VarselTestData.varsel(type = VarselType.innboks), + VarselTestData.varsel(type = VarselType.innboks), + ) + setupVarselAuthority(aktiveVarslerFromEventHandler = aktiveVarsler) + + mockVarselApi( + varselConsumer = setupVarselConsumer(), + authMockInstaller = installAuthenticatedMock(LevelOfAssurance.LEVEL_4) + ) + + val response = client.get("/v2/aktive") + response.status shouldBe HttpStatusCode.OK + + val varsler: AktiveVarslerV2 = response.bodyFromJson() + varsler.beskjeder.size shouldBe 4 + varsler.oppgaver.size shouldBe 2 + } + @Test fun `Henter inaktiverte varsler`() = varselRoutesTest { client -> val varsler = listOf( diff --git a/src/test/kotlin/no/nav/tms/varsel/api/varsel/AlleVarslerTest.kt b/src/test/kotlin/no/nav/tms/varsel/api/varsel/AlleVarslerTest.kt index bf2635f..d888995 100644 --- a/src/test/kotlin/no/nav/tms/varsel/api/varsel/AlleVarslerTest.kt +++ b/src/test/kotlin/no/nav/tms/varsel/api/varsel/AlleVarslerTest.kt @@ -1,6 +1,7 @@ package no.nav.tms.varsel.api.varsel import io.kotest.matchers.shouldBe +import no.nav.tms.varsel.api.varsel.v2.AlleVarsler import org.junit.jupiter.api.Test class AlleVarslerTest {