Skip to content

Commit a193641

Browse files
committed
Nytt endepunkt for å hente aktive varsler
1 parent 92fec65 commit a193641

File tree

8 files changed

+147
-79
lines changed

8 files changed

+147
-79
lines changed

src/main/kotlin/no/nav/tms/varsel/api/varsel/VarselConsumer.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import io.ktor.client.call.*
55
import io.ktor.client.request.*
66
import io.ktor.http.*
77
import no.nav.tms.token.support.tokendings.exchange.TokendingsService
8+
import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2
9+
import no.nav.tms.varsel.api.varsel.v2.AlleVarsler
810
import java.time.ZonedDateTime
911

1012
class VarselConsumer(
@@ -32,6 +34,12 @@ class VarselConsumer(
3234
return getVarsler(userToken, "/varsel/sammendrag/alle", preferertSpraak = preferertSpraak)
3335
.let(AlleVarsler::fromVarsler)
3436
}
37+
38+
suspend fun getAktiveVarslerV2(userToken: String, preferertSpraak: String?): AktiveVarslerV2 {
39+
return getVarsler(userToken, "/varsel/sammendrag/aktive", preferertSpraak = preferertSpraak)
40+
.let (AktiveVarslerV2::fromVarsler)
41+
}
42+
3543
suspend fun postInaktiver(userToken: String, varselId: String) {
3644
val authorityToken = tokendingsService.exchangeToken(userToken, varselAuthorityClientId)
3745

src/main/kotlin/no/nav/tms/varsel/api/varsel/alleVarsler.kt

Lines changed: 0 additions & 78 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package no.nav.tms.varsel.api.varsel.v2
2+
3+
import no.nav.tms.varsel.api.varsel.VarselAuthority
4+
import no.nav.tms.varsel.api.varsel.VarselType
5+
import java.time.ZonedDateTime
6+
7+
data class Varsel(
8+
@Deprecated("Use varselId") val eventId: String,
9+
@Deprecated("Use tidspunkt") val forstBehandlet: ZonedDateTime,
10+
val isMasked: Boolean,
11+
val spraakkode: String?,
12+
val tekst: String?,
13+
val link: String?,
14+
val eksternVarslingSendt: Boolean,
15+
val eksternVarslingKanaler: List<String>,
16+
val type: VarselType,
17+
val isInaktiverbar: Boolean,
18+
19+
) {
20+
companion object {
21+
fun fromVarsel(varsel: VarselAuthority.Varsel): Varsel {
22+
val isMasked = varsel.innhold == null
23+
val isInaktivertOppgave = varsel.type == VarselType.oppgave && !varsel.aktiv
24+
25+
return Varsel(
26+
eventId = varsel.varselId,
27+
forstBehandlet = varsel.opprettet,
28+
isMasked = isMasked,
29+
spraakkode = varsel.innhold?.spraakkode,
30+
tekst = varsel.innhold?.tekst,
31+
link = if (isInaktivertOppgave) null else varsel.innhold?.link,
32+
eksternVarslingSendt = varsel.eksternVarslingSendt,
33+
eksternVarslingKanaler = varsel.eksternVarslingKanaler,
34+
type = if (varsel.type == VarselType.oppgave) VarselType.oppgave else VarselType.beskjed,
35+
isInaktiverbar = varsel.type == VarselType.beskjed && varsel.aktiv && !isMasked,
36+
)
37+
}
38+
}
39+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package no.nav.tms.varsel.api.varsel.v2
2+
3+
import no.nav.tms.varsel.api.varsel.VarselAuthority
4+
import no.nav.tms.varsel.api.varsel.VarselType
5+
6+
7+
data class AktiveVarslerV2(val beskjeder: List<Varsel>, val oppgaver: List<Varsel>) {
8+
companion object {
9+
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AktiveVarslerV2 {
10+
val beskjeder = mutableListOf<Varsel>()
11+
val oppgaver = mutableListOf<Varsel>()
12+
13+
varsler.map {
14+
if (it.type == VarselType.oppgave) {
15+
oppgaver.add(Varsel.fromVarsel(it))
16+
} else {
17+
beskjeder.add(Varsel.fromVarsel(it))
18+
}
19+
}
20+
return AktiveVarslerV2(beskjeder = beskjeder, oppgaver = oppgaver)
21+
}
22+
}
23+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package no.nav.tms.varsel.api.varsel.v2
2+
3+
import no.nav.tms.varsel.api.varsel.VarselAuthority
4+
import no.nav.tms.varsel.api.varsel.VarselType
5+
6+
data class AlleVarsler(
7+
val hasMaskedVarsel: Boolean,
8+
val aktive: AktiveVarslerV2,
9+
val inaktive: List<Varsel>,
10+
) {
11+
companion object {
12+
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AlleVarsler {
13+
val aktivBeskjeder = mutableListOf<Varsel>()
14+
val aktivOppgaver = mutableListOf<Varsel>()
15+
val inaktivtVarseler = mutableListOf<Varsel>()
16+
var hasMaskedVarsel = false
17+
18+
varsler.map {
19+
if(it.innhold == null) {
20+
hasMaskedVarsel = true
21+
}
22+
23+
if (it.aktiv) {
24+
if (it.type == VarselType.oppgave) {
25+
aktivOppgaver.add(Varsel.fromVarsel(it))
26+
} else {
27+
aktivBeskjeder.add(Varsel.fromVarsel(it))
28+
}
29+
} else {
30+
inaktivtVarseler.add(Varsel.fromVarsel(it))
31+
}
32+
}
33+
return AlleVarsler(
34+
hasMaskedVarsel = hasMaskedVarsel,
35+
aktive = AktiveVarslerV2(aktivBeskjeder, aktivOppgaver),
36+
inaktive = inaktivtVarseler
37+
)
38+
}
39+
}
40+
}

src/main/kotlin/no/nav/tms/varsel/api/varsel/varselRoutes.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ fun Route.varsel(
4848
}
4949
}
5050

51+
get("v2/aktive"){
52+
varselConsumer.getAktiveVarslerV2(
53+
userToken = call.userToken,
54+
preferertSpraak = call.request.preferertSpraak
55+
).let { aktiveVarsler ->
56+
call.respond(HttpStatusCode.OK, aktiveVarsler)
57+
}
58+
}
5159

5260
post("beskjed/inaktiver") {
5361
varselConsumer.postInaktiver(varselId = call.varselId(), userToken = call.userToken)

src/test/kotlin/no/nav/tms/varsel/api/`VarselAuthority.Varsel`RoutesTest.kt

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ import org.junit.jupiter.api.Test
2929
import java.time.ZonedDateTime
3030
import com.fasterxml.jackson.module.kotlin.readValue
3131
import no.nav.tms.varsel.api.varsel.*
32+
import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2
33+
import no.nav.tms.varsel.api.varsel.v2.AlleVarsler
3234

33-
class VarselRoutesTest {
35+
class VarselRoutesTest{
3436

3537
private val objectMapper = jacksonObjectMapper().jsonConfig()
3638

@@ -69,6 +71,31 @@ class VarselRoutesTest {
6971

7072
}
7173

74+
@Test
75+
fun `Hent aktive varsler V2`() = varselRoutesTest{ client ->
76+
val aktiveVarsler = listOf(
77+
VarselTestData.varsel(type = VarselType.beskjed),
78+
VarselTestData.varsel(type = VarselType.oppgave),
79+
VarselTestData.varsel(type = VarselType.oppgave),
80+
VarselTestData.varsel(type = VarselType.innboks),
81+
VarselTestData.varsel(type = VarselType.innboks),
82+
VarselTestData.varsel(type = VarselType.innboks),
83+
)
84+
setupVarselAuthority(aktiveVarslerFromEventHandler = aktiveVarsler)
85+
86+
mockVarselApi(
87+
varselConsumer = setupVarselConsumer(),
88+
authMockInstaller = installAuthenticatedMock(LevelOfAssurance.LEVEL_4)
89+
)
90+
91+
val response = client.get("/v2/aktive")
92+
response.status shouldBe HttpStatusCode.OK
93+
94+
val varsler: AktiveVarslerV2 = response.bodyFromJson()
95+
varsler.beskjeder.size shouldBe 4
96+
varsler.oppgaver.size shouldBe 2
97+
}
98+
7299
@Test
73100
fun `Henter inaktiverte varsler`() = varselRoutesTest { client ->
74101
val varsler = listOf(

src/test/kotlin/no/nav/tms/varsel/api/varsel/AlleVarslerTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package no.nav.tms.varsel.api.varsel
22

33
import io.kotest.matchers.shouldBe
4+
import no.nav.tms.varsel.api.varsel.v2.AlleVarsler
45
import org.junit.jupiter.api.Test
56

67
class AlleVarslerTest {

0 commit comments

Comments
 (0)