Skip to content

Commit

Permalink
Nytt endepunkt for å hente aktive varsler
Browse files Browse the repository at this point in the history
  • Loading branch information
Amirhlotfi committed Nov 22, 2024
1 parent 92fec65 commit a193641
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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)

Expand Down
78 changes: 0 additions & 78 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/alleVarsler.kt

This file was deleted.

39 changes: 39 additions & 0 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/Varsel.kt
Original file line number Diff line number Diff line change
@@ -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<String>,
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,
)
}
}
}
23 changes: 23 additions & 0 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/aktiveVarsler.kt
Original file line number Diff line number Diff line change
@@ -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<Varsel>, val oppgaver: List<Varsel>) {
companion object {
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AktiveVarslerV2 {
val beskjeder = mutableListOf<Varsel>()
val oppgaver = mutableListOf<Varsel>()

varsler.map {
if (it.type == VarselType.oppgave) {
oppgaver.add(Varsel.fromVarsel(it))
} else {
beskjeder.add(Varsel.fromVarsel(it))
}
}
return AktiveVarslerV2(beskjeder = beskjeder, oppgaver = oppgaver)
}
}
}
40 changes: 40 additions & 0 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/alleVarsler.kt
Original file line number Diff line number Diff line change
@@ -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<Varsel>,
) {
companion object {
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AlleVarsler {
val aktivBeskjeder = mutableListOf<Varsel>()
val aktivOppgaver = mutableListOf<Varsel>()
val inaktivtVarseler = mutableListOf<Varsel>()
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
)
}
}
}
8 changes: 8 additions & 0 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/varselRoutes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down

0 comments on commit a193641

Please sign in to comment.