Skip to content

Commit 468e107

Browse files
committed
Nytt endepunkt som retunerer alle varsler
1 parent 0d7873d commit 468e107

File tree

8 files changed

+152
-26
lines changed

8 files changed

+152
-26
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ data class AktivtVarsel(
1616
val eksternVarslingKanaler: List<String>
1717
) {
1818
companion object {
19-
fun fromVarsel(varsel: Varsel) = AktivtVarsel(
19+
fun fromVarsel(varsel: VarselAuthority.Varsel) = AktivtVarsel(
2020
eventId = varsel.varselId,
2121
varselId = varsel.varselId,
2222
forstBehandlet = varsel.opprettet,
@@ -37,7 +37,7 @@ data class AktiveVarsler(
3737
val innbokser: List<AktivtVarsel>
3838
) {
3939
companion object {
40-
fun fromVarsler(varsler: List<Varsel>) = AktiveVarsler(
40+
fun fromVarsler(varsler: List<VarselAuthority.Varsel>) = AktiveVarsler(
4141
beskjeder = varsler.filter { it.type == VarselType.beskjed }.map { AktivtVarsel.fromVarsel(it) },
4242
oppgaver = varsler.filter { it.type == VarselType.oppgave }.map { AktivtVarsel.fromVarsel(it) },
4343
innbokser = varsler.filter { it.type == VarselType.innboks }.map { AktivtVarsel.fromVarsel(it) }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ data class InaktivtVarsel(
1515
val eksternVarslingKanaler: List<String>
1616
) {
1717
companion object {
18-
fun fromVarsel(varsel: Varsel) = InaktivtVarsel(
18+
fun fromVarsel(varsel: VarselAuthority.Varsel) = InaktivtVarsel(
1919
type = varsel.type,
2020
eventId = varsel.varselId,
2121
varselId = varsel.varselId,

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

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class VarselConsumer(
2828
.let(VarselbjelleVarsler::fromVarsler)
2929
}
3030

31+
suspend fun getAlleVarsler(userToken: String, preferertSpraak: String?): AlleVarsler {
32+
return getVarsler(userToken, "/varsel/sammendrag/alle", preferertSpraak = preferertSpraak)
33+
.let(AlleVarsler::fromVarsler)
34+
}
3135
suspend fun postInaktiver(userToken: String, varselId: String) {
3236
val authorityToken = tokendingsService.exchangeToken(userToken, varselAuthorityClientId)
3337

@@ -38,7 +42,7 @@ class VarselConsumer(
3842
}
3943
}
4044

41-
private suspend fun getVarsler(userToken: String, path: String, preferertSpraak: String? = null): List<Varsel> {
45+
private suspend fun getVarsler(userToken: String, path: String, preferertSpraak: String? = null): List<VarselAuthority.Varsel> {
4246
val authorityToken = tokendingsService.exchangeToken(userToken, targetApp = varselAuthorityClientId)
4347

4448
return client.request {
@@ -51,23 +55,28 @@ class VarselConsumer(
5155
}
5256
}
5357

54-
data class Varsel(
55-
val type: VarselType,
56-
val varselId: String,
57-
val aktiv: Boolean,
58-
val innhold: VarselInnhold?,
59-
val eksternVarslingSendt: Boolean,
60-
val eksternVarslingKanaler: List<String>,
61-
val opprettet: ZonedDateTime,
62-
val aktivFremTil: ZonedDateTime?,
63-
val inaktivert: ZonedDateTime?
64-
)
58+
object VarselAuthority {
59+
data class Varsel(
60+
val type: VarselType,
61+
val varselId: String,
62+
val aktiv: Boolean,
63+
val innhold: Innhold?,
64+
val eksternVarslingSendt: Boolean,
65+
val eksternVarslingKanaler: List<String>,
66+
val opprettet: ZonedDateTime,
67+
val aktivFremTil: ZonedDateTime?,
68+
val inaktivert: ZonedDateTime?
69+
)
70+
71+
data class Innhold(
72+
val spraakkode: String,
73+
val tekst: String,
74+
val link: String?
75+
)
76+
}
77+
78+
6579

66-
data class VarselInnhold(
67-
val spraakkode: String,
68-
val tekst: String,
69-
val link: String?
70-
)
7180

7281
enum class VarselType {
7382
oppgave,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ data class VarselbjelleVarsler(
99
val oppgaver: List<VarselbjelleVarsel>,
1010
) {
1111
companion object {
12-
fun fromVarsler(varsler: List<Varsel>): VarselbjelleVarsler {
12+
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): VarselbjelleVarsler {
1313
val groupedVarsler = varsler.groupBy { it.type }.mapValues { (_, varsler) ->
1414
varsler.map(VarselbjelleVarsel::fromVarsel)
1515
}
@@ -36,7 +36,7 @@ data class VarselbjelleVarsel(
3636
val eksternVarslingKanaler: List<String>
3737
) {
3838
companion object {
39-
fun fromVarsel(varsel: Varsel) = with(varsel) {
39+
fun fromVarsel(varsel: VarselAuthority.Varsel) = with(varsel) {
4040
VarselbjelleVarsel(
4141
eventId = varselId,
4242
varselId = varselId,
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package no.nav.tms.varsel.api.varsel
2+
3+
import java.time.ZonedDateTime
4+
5+
data class Varsel(
6+
@Deprecated("Use varselId") val eventId: String,
7+
@Deprecated("Use tidspunkt") val forstBehandlet: ZonedDateTime,
8+
val isMasked: Boolean,
9+
val spraakkode: String?,
10+
val tekst: String?,
11+
val link: String?,
12+
val eksternVarslingSendt: Boolean,
13+
val eksternVarslingKanaler: List<String>,
14+
val type: VarselType,
15+
val isArkiverbar: Boolean,
16+
17+
) {
18+
companion object {
19+
fun fromVarsel(varsel: VarselAuthority.Varsel) = Varsel(
20+
eventId = varsel.varselId,
21+
forstBehandlet = varsel.opprettet,
22+
isMasked = varsel.innhold == null,
23+
spraakkode = varsel.innhold?.spraakkode,
24+
tekst = varsel.innhold?.tekst,
25+
link = varsel.innhold?.link,
26+
eksternVarslingSendt = varsel.eksternVarslingSendt,
27+
eksternVarslingKanaler = varsel.eksternVarslingKanaler,
28+
type = if (varsel.type == VarselType.oppgave) VarselType.oppgave else VarselType.beskjed,
29+
isArkiverbar = varsel.type == VarselType.beskjed && varsel.aktiv,
30+
)
31+
}
32+
}
33+
34+
data class AlleVarsler(
35+
val aktiveVarsler: AktivtVarselV2,
36+
val inaktivtVarseler: List<Varsel>,
37+
) {
38+
companion object {
39+
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AlleVarsler {
40+
val aktivBeskjeder = mutableListOf<Varsel>()
41+
val aktivOppgaver = mutableListOf<Varsel>()
42+
val inaktivtVarseler = mutableListOf<Varsel>()
43+
44+
varsler.map {
45+
if (it.aktiv) {
46+
if (it.type == VarselType.oppgave) {
47+
aktivOppgaver.add(Varsel.fromVarsel(it))
48+
} else {
49+
aktivBeskjeder.add(Varsel.fromVarsel(it))
50+
}
51+
} else {
52+
inaktivtVarseler.add(Varsel.fromVarsel(it))
53+
}
54+
}
55+
return AlleVarsler(
56+
aktiveVarsler = AktivtVarselV2(aktivBeskjeder, aktivOppgaver),
57+
inaktivtVarseler = inaktivtVarseler
58+
)
59+
}
60+
}
61+
}
62+
63+
data class AktivtVarselV2(
64+
val beskjeder: List<Varsel>,
65+
val oppgaver: List<Varsel>,
66+
)

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ fun Route.varsel(
3434
}
3535
}
3636

37+
get("alle"){
38+
varselConsumer.getAlleVarsler(
39+
userToken = call.userToken,
40+
preferertSpraak = call.request.preferertSpraak
41+
).let { alleVarsler ->
42+
call.respond(HttpStatusCode.OK, alleVarsler)
43+
}
44+
}
45+
3746
get("antall/aktive") {
3847
varselConsumer.getAktiveVarsler(
3948
userToken = call.userToken,
@@ -49,6 +58,7 @@ fun Route.varsel(
4958
}
5059
}
5160

61+
5262
post("beskjed/inaktiver") {
5363
varselConsumer.postInaktiver(varselId = call.varselId(), userToken = call.userToken)
5464
call.respond(HttpStatusCode.OK)

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

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,50 @@ import kotlinx.serialization.json.Json
2626
import kotlinx.serialization.json.jsonObject
2727
import kotlinx.serialization.json.jsonPrimitive
2828
import no.nav.tms.token.support.idporten.sidecar.mock.LevelOfAssurance
29-
import no.nav.tms.varsel.api.varsel.AktiveVarsler
30-
import no.nav.tms.varsel.api.varsel.AntallVarsler
31-
import no.nav.tms.varsel.api.varsel.InaktivtVarsel
32-
import no.nav.tms.varsel.api.varsel.VarselType
3329
import org.junit.jupiter.api.Test
3430
import java.time.ZonedDateTime
3531
import com.fasterxml.jackson.module.kotlin.readValue
32+
import no.nav.tms.varsel.api.varsel.*
3633

3734
class VarselRoutesTest {
3835

3936
private val objectMapper = jacksonObjectMapper().jsonConfig()
4037

38+
@Test
39+
fun `Henter alle varsler, inkative og aktive`() = varselRoutesTest{ client ->
40+
val aktiveVarsler = listOf(
41+
VarselTestData.varsel(type = VarselType.beskjed),
42+
VarselTestData.varsel(type = VarselType.oppgave),
43+
VarselTestData.varsel(type = VarselType.oppgave),
44+
VarselTestData.varsel(type = VarselType.innboks),
45+
VarselTestData.varsel(type = VarselType.innboks),
46+
VarselTestData.varsel(type = VarselType.innboks),
47+
)
48+
val inaktivtVarsel = listOf(
49+
VarselTestData.varsel(type = VarselType.beskjed, aktiv = false),
50+
VarselTestData.varsel(type = VarselType.beskjed, aktiv = false),
51+
VarselTestData.varsel(type = VarselType.beskjed, aktiv = false),
52+
VarselTestData.varsel(type = VarselType.oppgave, aktiv = false),
53+
VarselTestData.varsel(type = VarselType.innboks, aktiv = false),
54+
VarselTestData.varsel(type = VarselType.innboks,aktiv = false),
55+
)
56+
setupVarselAuthority(inaktiveVarslerFromEventHandler = inaktivtVarsel, aktiveVarslerFromEventHandler = aktiveVarsler)
57+
58+
mockVarselApi(
59+
varselConsumer = setupVarselConsumer(),
60+
authMockInstaller = installAuthenticatedMock(LevelOfAssurance.LEVEL_4)
61+
)
62+
63+
val response = client.get("/alle")
64+
response.status shouldBe HttpStatusCode.OK
65+
66+
val alleVarsler: AlleVarsler = response.bodyFromJson()
67+
alleVarsler.aktiveVarsler.beskjeder.size shouldBe 4
68+
alleVarsler.aktiveVarsler.oppgaver.size shouldBe 2
69+
alleVarsler.inaktivtVarseler.size shouldBe 6
70+
71+
}
72+
4173
@Test
4274
fun `Henter inaktiverte varsler`() = varselRoutesTest { client ->
4375
val varsler = listOf(

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ fun ApplicationTestBuilder.setupVarselAuthority(vararg varsler: TestVarsel) = se
100100
fun ApplicationTestBuilder.setupVarselAuthority(
101101
aktiveVarslerFromEventHandler: List<TestVarsel> = emptyList(),
102102
inaktiveVarslerFromEventHandler: List<TestVarsel> = emptyList(),
103+
alleVarslerFromEventHandler: List<TestVarsel> = aktiveVarslerFromEventHandler + inaktiveVarslerFromEventHandler,
103104
expectedSpraakkodeParam: String? = null
104105
) {
105106
externalServices {
@@ -124,6 +125,14 @@ fun ApplicationTestBuilder.setupVarselAuthority(
124125

125126
call.respond(HttpStatusCode.OK, inaktiveVarslerFromEventHandler)
126127
}
128+
129+
get("/varsel/sammendrag/alle") {
130+
call.request.headers["Authorization"] shouldBe "Bearer authorityToken"
131+
132+
call.request.preferertSpraak shouldBe expectedSpraakkodeParam
133+
134+
call.respond(HttpStatusCode.OK, alleVarslerFromEventHandler)
135+
}
127136
}
128137
}
129138
}

0 commit comments

Comments
 (0)