Skip to content

Commit 89523a7

Browse files
committed
IS-3142: Add consumer for updating oppfolgingsenhet changes
1 parent 51ada41 commit 89523a7

File tree

9 files changed

+165
-22
lines changed

9 files changed

+165
-22
lines changed

src/main/kotlin/no/nav/syfo/personstatus/infrastructure/kafka/KafkaModule.kt

+7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import no.nav.syfo.pdlpersonhendelse.kafka.launchKafkaTaskPersonhendelse
1414
import no.nav.syfo.personoppgavehendelse.kafka.launchKafkaTaskPersonoppgavehendelse
1515
import no.nav.syfo.personstatus.application.PersonoversiktStatusService
1616
import no.nav.syfo.personstatus.application.OppfolgingstilfelleService
17+
import no.nav.syfo.personstatus.infrastructure.kafka.behandlendeenhet.BehandlendeEnhetConsumer
1718
import no.nav.syfo.personstatus.infrastructure.kafka.manglendemedvirkning.ManglendeMedvirkningVurderingConsumer
1819
import no.nav.syfo.personstatus.infrastructure.kafka.meroppfolging.SenOppfolgingKandidatStatusConsumer
1920
import no.nav.syfo.personstatus.infrastructure.kafka.oppfolgingsoppgave.launchOppfolgingsoppgaveConsumer
@@ -85,4 +86,10 @@ fun launchKafkaModule(
8586
applicationState = applicationState,
8687
kafkaEnvironment = environment.kafka,
8788
)
89+
90+
BehandlendeEnhetConsumer(personBehandlendeEnhetService = personBehandlendeEnhetService)
91+
.start(
92+
applicationState = applicationState,
93+
kafkaEnvironment = environment.kafka,
94+
)
8895
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package no.nav.syfo.personstatus.infrastructure.kafka.behandlendeenhet
2+
3+
import no.nav.syfo.ApplicationState
4+
import no.nav.syfo.personstatus.application.PersonBehandlendeEnhetService
5+
import no.nav.syfo.personstatus.domain.PersonIdent
6+
import no.nav.syfo.personstatus.infrastructure.kafka.KafkaConsumerService
7+
import no.nav.syfo.personstatus.infrastructure.kafka.KafkaEnvironment
8+
import no.nav.syfo.personstatus.infrastructure.kafka.kafkaAivenConsumerConfig
9+
import no.nav.syfo.personstatus.infrastructure.kafka.launchKafkaTask
10+
import no.nav.syfo.util.configuredJacksonMapper
11+
import org.apache.kafka.clients.consumer.ConsumerConfig
12+
import org.apache.kafka.clients.consumer.ConsumerRecords
13+
import org.apache.kafka.clients.consumer.KafkaConsumer
14+
import org.apache.kafka.common.serialization.Deserializer
15+
import org.slf4j.LoggerFactory
16+
import java.time.Duration
17+
import java.time.OffsetDateTime
18+
import java.util.Properties
19+
20+
class BehandlendeEnhetConsumer(
21+
private val personBehandlendeEnhetService: PersonBehandlendeEnhetService,
22+
) : KafkaConsumerService<BehandlendeEnhetUpdateRecord> {
23+
24+
override val pollDurationInMillis: Long = 1000
25+
26+
override suspend fun pollAndProcessRecords(consumer: KafkaConsumer<String, BehandlendeEnhetUpdateRecord>) {
27+
val records = consumer.poll(Duration.ofMillis(pollDurationInMillis))
28+
if (records.count() > 0) {
29+
log.info("BehandlendeEnhetConsumer trace: Received ${records.count()} records")
30+
processRecords(records = records)
31+
consumer.commitSync()
32+
}
33+
}
34+
35+
private suspend fun processRecords(records: ConsumerRecords<String, BehandlendeEnhetUpdateRecord>) =
36+
records.requireNoNulls().map { record ->
37+
personBehandlendeEnhetService.updateBehandlendeEnhet(
38+
PersonIdent(record.value().personident)
39+
)
40+
}
41+
42+
fun start(applicationState: ApplicationState, kafkaEnvironment: KafkaEnvironment) {
43+
val consumerProperties = Properties().apply {
44+
putAll(kafkaAivenConsumerConfig(kafkaEnvironment = kafkaEnvironment))
45+
this[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = BehandlendeEnhetUpdateRecordDeserializer::class.java.canonicalName
46+
}
47+
launchKafkaTask(
48+
applicationState = applicationState,
49+
kafkaConsumerService = this,
50+
consumerProperties = consumerProperties,
51+
topic = TOPIC,
52+
)
53+
}
54+
55+
companion object {
56+
private val log = LoggerFactory.getLogger(this::class.java)
57+
private const val TOPIC = "teamsykefravr.behandlendeenhet"
58+
}
59+
}
60+
61+
data class BehandlendeEnhetUpdateRecord(
62+
val personident: String,
63+
val updatedAt: OffsetDateTime,
64+
)
65+
66+
class BehandlendeEnhetUpdateRecordDeserializer : Deserializer<BehandlendeEnhetUpdateRecord> {
67+
private val mapper = configuredJacksonMapper()
68+
override fun deserialize(topic: String, data: ByteArray): BehandlendeEnhetUpdateRecord =
69+
mapper.readValue(data, BehandlendeEnhetUpdateRecord::class.java)
70+
}

src/test/kotlin/no/nav/syfo/cronjob/behandlendeenhet/PersonBehandlendeEnhetCronjobSpek.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ object PersonBehandlendeEnhetCronjobSpek : Spek({
9393
val pPersonOversiktStatus = pPersonOversiktStatusList.first()
9494

9595
pPersonOversiktStatus.enhet shouldNotBeEqualTo firstEnhet
96-
pPersonOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
96+
pPersonOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
9797
pPersonOversiktStatus.tildeltEnhetUpdatedAt.shouldNotBeNull()
9898
pPersonOversiktStatus.tildeltEnhetUpdatedAt!!.toInstant()
9999
.toEpochMilli() shouldBeGreaterThan tildeltEnhetUpdatedAtBeforeUpdate.toInstant()
@@ -171,7 +171,7 @@ object PersonBehandlendeEnhetCronjobSpek : Spek({
171171

172172
val pPersonOversiktStatus = pPersonOversiktStatusList.first()
173173

174-
pPersonOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
174+
pPersonOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
175175
pPersonOversiktStatus.tildeltEnhetUpdatedAt.shouldNotBeNull()
176176
pPersonOversiktStatus.tildeltEnhetUpdatedAt shouldNotBeEqualTo tildeltEnhetUpdatedAtBeforeUpdate
177177
pPersonOversiktStatus.veilederIdent.shouldBeNull()

src/test/kotlin/no/nav/syfo/personstatus/api/v2/BehandlerdialogPersonoversiktStatusApiV2Spek.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ object BehandlerdialogPersonoversiktStatusApiV2Spek : Spek({
5858
response.status shouldBeEqualTo HttpStatusCode.OK
5959
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
6060
personOversiktStatus.fnr shouldBeEqualTo oversikthendelseBehandlerdialogSvarMottatt.personident
61-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
61+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
6262
personOversiktStatus.behandlerdialogUbehandlet shouldBeEqualTo true
6363
}
6464
}
@@ -87,7 +87,7 @@ object BehandlerdialogPersonoversiktStatusApiV2Spek : Spek({
8787

8888
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
8989
personOversiktStatus.fnr shouldBeEqualTo oversikthendelseBehandlerdialogUbesvartMottatt.personident
90-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
90+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
9191
personOversiktStatus.behandlerdialogUbehandlet shouldBeEqualTo true
9292
}
9393
}
@@ -122,7 +122,7 @@ object BehandlerdialogPersonoversiktStatusApiV2Spek : Spek({
122122

123123
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
124124
personOversiktStatus.fnr shouldBeEqualTo oversikthendelseBehandlerdialogSvarMottatt.personident
125-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
125+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
126126
personOversiktStatus.behandlerdialogUbehandlet shouldBeEqualTo true
127127
}
128128
}
@@ -151,7 +151,7 @@ object BehandlerdialogPersonoversiktStatusApiV2Spek : Spek({
151151

152152
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
153153
personOversiktStatus.fnr shouldBeEqualTo oversikthendelseBehandlerdialogAvvistMottatt.personident
154-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
154+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
155155
personOversiktStatus.behandlerdialogUbehandlet shouldBeEqualTo true
156156
}
157157
}

src/test/kotlin/no/nav/syfo/personstatus/api/v2/DialogmotekandidatPersonoversiktStatusApiV2Spek.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ object DialogmotekandidatPersonoversiktStatusApiV2Spek : Spek({
8888
personOversiktStatus.shouldNotBeNull()
8989
personOversiktStatus.veilederIdent shouldBeEqualTo null
9090
personOversiktStatus.fnr shouldBeEqualTo ARBEIDSTAKER_FNR
91-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
91+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
9292
personOversiktStatus.motebehovUbehandlet.shouldBeNull()
9393
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet.shouldBeNull()
9494
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false
@@ -112,7 +112,7 @@ object DialogmotekandidatPersonoversiktStatusApiV2Spek : Spek({
112112
personOversiktStatus.shouldNotBeNull()
113113
personOversiktStatus.veilederIdent shouldBeEqualTo null
114114
personOversiktStatus.fnr shouldBeEqualTo ARBEIDSTAKER_FNR
115-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
115+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
116116
personOversiktStatus.motebehovUbehandlet.shouldBeNull()
117117
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet.shouldBeNull()
118118
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false

src/test/kotlin/no/nav/syfo/personstatus/api/v2/PersonoversiktStatusApiV2Spek.kt

+12-12
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
280280
}
281281
personOversiktStatus.veilederIdent shouldBeEqualTo null
282282
personOversiktStatus.fnr shouldBeEqualTo ARBEIDSTAKER_FNR
283-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
283+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
284284
personOversiktStatus.motebehovUbehandlet shouldBeEqualTo true
285285
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet shouldBeEqualTo true
286286
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo true
@@ -325,7 +325,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
325325
personOversiktStatus.veilederIdent shouldBeEqualTo null
326326
personOversiktStatus.fnr shouldBeEqualTo oversiktHendelse.personident
327327
personOversiktStatus.navn shouldBeEqualTo getIdentName()
328-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
328+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
329329
personOversiktStatus.motebehovUbehandlet shouldBeEqualTo true
330330
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet shouldBeEqualTo null
331331
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false
@@ -374,7 +374,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
374374
personOversiktStatus.veilederIdent shouldBeEqualTo tilknytning.veilederIdent
375375
personOversiktStatus.fnr shouldBeEqualTo oversiktHendelse.personident
376376
personOversiktStatus.navn shouldBeEqualTo getIdentName()
377-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
377+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
378378
personOversiktStatus.motebehovUbehandlet shouldBeEqualTo true
379379
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet shouldBeEqualTo true
380380
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false
@@ -427,7 +427,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
427427
personOversiktStatus.veilederIdent shouldBeEqualTo tilknytning.veilederIdent
428428
personOversiktStatus.fnr shouldBeEqualTo oversiktHendelse.personident
429429
personOversiktStatus.navn shouldBeEqualTo getIdentName()
430-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
430+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
431431
personOversiktStatus.motebehovUbehandlet shouldBeEqualTo true
432432
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet shouldBeEqualTo true
433433
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false
@@ -465,7 +465,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
465465
personOversiktStatus.veilederIdent shouldBeEqualTo null
466466
personOversiktStatus.fnr shouldBeEqualTo oversiktHendelseOPLPSBistandMottatt.personident
467467
personOversiktStatus.navn shouldBeEqualTo getIdentName()
468-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
468+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
469469
personOversiktStatus.motebehovUbehandlet shouldBeEqualTo null
470470
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet shouldBeEqualTo true
471471
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false
@@ -499,7 +499,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
499499
personOversiktStatus.veilederIdent shouldBeEqualTo null
500500
personOversiktStatus.fnr shouldBeEqualTo oversiktHendelseOPLPSBistandMottatt.personident
501501
personOversiktStatus.navn shouldBeEqualTo ""
502-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
502+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
503503
personOversiktStatus.motebehovUbehandlet shouldBeEqualTo null
504504
personOversiktStatus.oppfolgingsplanLPSBistandUbehandlet shouldBeEqualTo true
505505
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo false
@@ -558,7 +558,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
558558
response.status shouldBeEqualTo HttpStatusCode.OK
559559
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
560560
personOversiktStatus.fnr shouldBeEqualTo oversikthendelseDialogmotesvarMottatt.personident
561-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
561+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
562562
personOversiktStatus.dialogmotesvarUbehandlet shouldBeEqualTo true
563563
}
564564
}
@@ -578,7 +578,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
578578
response.status shouldBeEqualTo HttpStatusCode.OK
579579
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
580580
personOversiktStatus.fnr shouldBeEqualTo personident.value
581-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
581+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
582582
personOversiktStatus.friskmeldingTilArbeidsformidlingFom!! shouldBeEqualTo tomorrow
583583
}
584584
}
@@ -598,7 +598,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
598598
response.status shouldBeEqualTo HttpStatusCode.OK
599599
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
600600
personOversiktStatus.fnr shouldBeEqualTo personident.value
601-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
601+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
602602
personOversiktStatus.friskmeldingTilArbeidsformidlingFom!! shouldBeEqualTo today
603603
}
604604
}
@@ -618,7 +618,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
618618
response.status shouldBeEqualTo HttpStatusCode.OK
619619
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
620620
personOversiktStatus.fnr shouldBeEqualTo personident.value
621-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
621+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
622622
personOversiktStatus.friskmeldingTilArbeidsformidlingFom!! shouldBeEqualTo yesterday
623623
}
624624
}
@@ -643,7 +643,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
643643
response.status shouldBeEqualTo HttpStatusCode.OK
644644
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
645645
personOversiktStatus.fnr shouldBeEqualTo personident
646-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
646+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
647647
personOversiktStatus.oppfolgingsoppgave shouldNotBe null
648648
personOversiktStatus.oppfolgingsoppgave?.oppfolgingsgrunn shouldBeEqualTo "FOLG_OPP_ETTER_NESTE_SYKMELDING"
649649
personOversiktStatus.oppfolgingsoppgave?.tekst shouldBeEqualTo "En tekst"
@@ -691,7 +691,7 @@ object PersonoversiktStatusApiV2Spek : Spek({
691691
response.status shouldBeEqualTo HttpStatusCode.OK
692692
val personOversiktStatus = response.body<List<PersonOversiktStatusDTO>>().first()
693693
personOversiktStatus.fnr shouldBeEqualTo ARBEIDSTAKER_FNR
694-
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO().enhetId
694+
personOversiktStatus.enhet shouldBeEqualTo behandlendeEnhetDTO.enhetId
695695
personOversiktStatus.behandlerBerOmBistandUbehandlet shouldBeEqualTo true
696696
}
697697
}

0 commit comments

Comments
 (0)