Skip to content

Commit b3c7148

Browse files
authored
IS: Move all queries for motestatusendringer to repository (#555)
1 parent 8931632 commit b3c7148

14 files changed

+145
-139
lines changed

src/main/kotlin/no/nav/syfo/App.kt

+1
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ fun main() {
167167
dialogmotestatusService = dialogmotestatusService,
168168
dialogmoterelasjonService = dialogmoterelasjonService,
169169
arbeidstakerVarselService = arbeidstakerVarselService,
170+
moteStatusEndretRepository = moteStatusEndretRepository,
170171
)
171172
}
172173
}

src/main/kotlin/no/nav/syfo/cronjob/CronjobModule.kt

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import no.nav.syfo.cronjob.statusendring.kafkaDialogmoteStatusEndringProducerCon
2626
import no.nav.syfo.dialogmote.*
2727
import no.nav.syfo.cronjob.dialogmotesvar.KDialogmotesvar
2828
import no.nav.syfo.dialogmote.avro.KDialogmoteStatusEndring
29+
import no.nav.syfo.dialogmote.database.repository.MoteStatusEndretRepository
2930
import org.apache.kafka.clients.producer.KafkaProducer
3031

3132
fun Application.cronjobModule(
@@ -36,6 +37,7 @@ fun Application.cronjobModule(
3637
dialogmotestatusService: DialogmotestatusService,
3738
dialogmoterelasjonService: DialogmoterelasjonService,
3839
arbeidstakerVarselService: ArbeidstakerVarselService,
40+
moteStatusEndretRepository: MoteStatusEndretRepository,
3941
) {
4042
val azureAdV2Client = AzureAdV2Client(
4143
aadAppClient = environment.aadAppClient,
@@ -96,6 +98,7 @@ fun Application.cronjobModule(
9698
val publishDialogmoteStatusEndringService = PublishDialogmoteStatusEndringService(
9799
database = database,
98100
dialogmoteStatusEndringProducer = dialogmoteStatusEndringProducer,
101+
moteStatusEndretRepository = moteStatusEndretRepository,
99102
)
100103
val publishDialogmotesvarService = PublishDialogmotesvarService(
101104
database = database,

src/main/kotlin/no/nav/syfo/cronjob/statusendring/PublishDialogmoteStatusEndringService.kt

+17-6
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,30 @@ package no.nav.syfo.cronjob.statusendring
22

33
import no.nav.syfo.application.database.DatabaseInterface
44
import no.nav.syfo.dialogmote.avro.KDialogmoteStatusEndring
5-
import no.nav.syfo.dialogmote.database.*
6-
import no.nav.syfo.dialogmote.database.domain.*
7-
import no.nav.syfo.dialogmote.domain.*
5+
import no.nav.syfo.dialogmote.database.domain.PDialogmote
6+
import no.nav.syfo.dialogmote.database.domain.toDialogmoteStatusEndret
7+
import no.nav.syfo.dialogmote.database.domain.toDialogmoteTidSted
8+
import no.nav.syfo.dialogmote.database.getDialogmote
9+
import no.nav.syfo.dialogmote.database.getMoteDeltakerArbeidsgiver
10+
import no.nav.syfo.dialogmote.database.getMoteDeltakerArbeidstaker
11+
import no.nav.syfo.dialogmote.database.getTidSted
12+
import no.nav.syfo.dialogmote.database.repository.MoteStatusEndretRepository
13+
import no.nav.syfo.dialogmote.domain.DialogmoteStatusEndret
14+
import no.nav.syfo.dialogmote.domain.DialogmoteTidSted
15+
import no.nav.syfo.dialogmote.domain.latest
816
import no.nav.syfo.domain.PersonIdent
917
import no.nav.syfo.domain.Virksomhetsnummer
10-
import java.time.*
18+
import java.time.Instant
19+
import java.time.LocalDateTime
20+
import java.time.ZoneId
1121

1222
class PublishDialogmoteStatusEndringService(
1323
private val database: DatabaseInterface,
1424
private val dialogmoteStatusEndringProducer: DialogmoteStatusEndringProducer,
25+
private val moteStatusEndretRepository: MoteStatusEndretRepository,
1526
) {
1627
fun getDialogmoteStatuEndretToPublishList(): List<DialogmoteStatusEndret> {
17-
return database.getMoteStatusEndretNotPublished().map {
28+
return moteStatusEndretRepository.getMoteStatusEndretNotPublished().map {
1829
it.toDialogmoteStatusEndret()
1930
}
2031
}
@@ -35,7 +46,7 @@ class PublishDialogmoteStatusEndringService(
3546
)
3647
dialogmoteStatusEndringProducer.sendDialogmoteStatusEndring(kDialogmoteStatusEndring)
3748

38-
database.updateMoteStatusEndretPublishedAt(
49+
moteStatusEndretRepository.updateMoteStatusEndretPublishedAt(
3950
moteStatusEndretId = dialogmoteStatusEndret.id,
4051
)
4152
}

src/main/kotlin/no/nav/syfo/dialogmote/DialogmotestatusService.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package no.nav.syfo.dialogmote
22

33
import no.nav.syfo.client.oppfolgingstilfelle.OppfolgingstilfelleClient
4-
import no.nav.syfo.dialogmote.api.domain.DialogmoteStatusEndringDTO
5-
import no.nav.syfo.dialogmote.database.createMoteStatusEndring
64
import no.nav.syfo.dialogmote.database.repository.MoteStatusEndretRepository
5+
import no.nav.syfo.dialogmote.api.domain.DialogmoteStatusEndringDTO
76
import no.nav.syfo.dialogmote.database.updateMoteStatus
87
import no.nav.syfo.dialogmote.domain.*
98
import no.nav.syfo.domain.PersonIdent
@@ -99,7 +98,8 @@ class DialogmotestatusService(
9998
)
10099
}
101100

102-
connection.createMoteStatusEndring(
101+
moteStatusEndretRepository.createMoteStatusEndring(
102+
connection = connection,
103103
commit = false,
104104
moteId = dialogmoteId,
105105
opprettetAv = opprettetAv,

src/main/kotlin/no/nav/syfo/dialogmote/database/MoteStatusEndretQuery.kt

-112
This file was deleted.

src/main/kotlin/no/nav/syfo/dialogmote/database/repository/MoteStatusEndretRepository.kt

+93
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ import no.nav.syfo.dialogmote.api.domain.DialogmoteStatusEndringDTO
66
import no.nav.syfo.dialogmote.database.domain.PMoteStatusEndret
77
import no.nav.syfo.dialogmote.domain.DialogmoteStatus
88
import no.nav.syfo.domain.PersonIdent
9+
import java.sql.Connection
910
import java.sql.ResultSet
11+
import java.sql.SQLException
12+
import java.sql.Timestamp
13+
import java.time.Instant
14+
import java.time.LocalDate
1015
import java.util.*
1116

1217
class MoteStatusEndretRepository(private val database: DatabaseInterface) {
@@ -30,6 +35,64 @@ class MoteStatusEndretRepository(private val database: DatabaseInterface) {
3035
}
3136
}
3237

38+
fun getMoteStatusEndretNotPublished(): List<PMoteStatusEndret> {
39+
return database.connection.use { connection ->
40+
connection.prepareStatement(GET_MOTE_STATUS_ENDRET_NOT_PUBLISHED).use {
41+
it.executeQuery().toList { toPMoteStatusEndret() }
42+
}
43+
}
44+
}
45+
46+
fun updateMoteStatusEndretPublishedAt(moteStatusEndretId: Int) {
47+
val now = Timestamp.from(Instant.now())
48+
database.connection.use { connection ->
49+
connection.prepareStatement(UPDATE_MOTE_STATUS_ENDRET_PUBLISHED_AT).use {
50+
it.setTimestamp(1, now)
51+
it.setTimestamp(2, now)
52+
it.setInt(3, moteStatusEndretId)
53+
it.execute()
54+
}
55+
connection.commit()
56+
}
57+
}
58+
59+
fun createMoteStatusEndring(
60+
connection: Connection,
61+
commit: Boolean = true,
62+
moteId: Int,
63+
opprettetAv: String,
64+
status: DialogmoteStatus,
65+
tilfelleStart: LocalDate?,
66+
isBehandlerMotedeltaker: Boolean,
67+
): Pair<Int, UUID> {
68+
val now = Timestamp.from(Instant.now())
69+
val startDate = tilfelleStart ?: LocalDate.EPOCH
70+
71+
val moteStatusEndringUuid = UUID.randomUUID()
72+
73+
val moteStatusEndringIdList = connection.prepareStatement(CREATE_MOTE_STATUS_ENDRING).use {
74+
it.setString(1, moteStatusEndringUuid.toString())
75+
it.setTimestamp(2, now)
76+
it.setTimestamp(3, now)
77+
it.setInt(4, moteId)
78+
it.setString(5, status.name)
79+
it.setString(6, opprettetAv)
80+
it.setTimestamp(7, Timestamp.valueOf(startDate.atStartOfDay()))
81+
it.setBoolean(8, isBehandlerMotedeltaker)
82+
it.executeQuery().toList { getInt("id") }
83+
}
84+
85+
if (moteStatusEndringIdList.size != 1) {
86+
throw SQLException("Creating MoteStatusEndring failed, no rows affected.")
87+
}
88+
89+
if (commit) {
90+
connection.commit()
91+
}
92+
93+
return Pair(moteStatusEndringIdList.first(), moteStatusEndringUuid)
94+
}
95+
3396
companion object {
3497
private const val GET_MOTE_STATUS_ENDRINGER =
3598
"""
@@ -42,6 +105,36 @@ class MoteStatusEndretRepository(private val database: DatabaseInterface) {
42105
WHERE mda.personident = ?
43106
ORDER BY mse.created_at DESC
44107
"""
108+
109+
private const val CREATE_MOTE_STATUS_ENDRING =
110+
"""
111+
INSERT INTO MOTE_STATUS_ENDRET (
112+
id,
113+
uuid,
114+
created_at,
115+
updated_at,
116+
mote_id,
117+
status,
118+
opprettet_av,
119+
tilfelle_start,
120+
motedeltaker_behandler
121+
) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id
122+
"""
123+
124+
private const val GET_MOTE_STATUS_ENDRET_NOT_PUBLISHED =
125+
"""
126+
SELECT *
127+
FROM MOTE_STATUS_ENDRET
128+
WHERE published_at IS NULL
129+
ORDER BY created_at ASC LIMIT 100
130+
"""
131+
132+
private const val UPDATE_MOTE_STATUS_ENDRET_PUBLISHED_AT =
133+
"""
134+
UPDATE MOTE_STATUS_ENDRET
135+
SET published_at = ?, updated_at = ?
136+
WHERE id = ?
137+
"""
45138
}
46139
}
47140

src/test/kotlin/no/nav/syfo/cronjob/statusendring/PublishDialogmoteStatusEndringCronjobSpek.kt

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import no.nav.syfo.brev.esyfovarsel.EsyfovarselProducer
2323
import no.nav.syfo.brev.esyfovarsel.NarmesteLederHendelse
2424
import no.nav.syfo.dialogmote.api.domain.DialogmoteDTO
2525
import no.nav.syfo.dialogmote.api.v2.*
26+
import no.nav.syfo.dialogmote.database.repository.MoteStatusEndretRepository
2627
import no.nav.syfo.dialogmote.domain.DialogmoteStatus
2728
import no.nav.syfo.testhelper.*
2829
import no.nav.syfo.testhelper.generator.*
@@ -45,6 +46,8 @@ class PublishDialogmoteStatusEndringCronjobSpek : Spek({
4546
val externalMockEnvironment = ExternalMockEnvironment.getInstance()
4647
val database = externalMockEnvironment.database
4748

49+
val moteStatusEndretRepository = MoteStatusEndretRepository(database)
50+
4851
val behandlerDialogmeldingProducer = mockk<BehandlerDialogmeldingProducer>()
4952
justRun { behandlerDialogmeldingProducer.sendDialogmelding(dialogmelding = any()) }
5053

@@ -72,6 +75,7 @@ class PublishDialogmoteStatusEndringCronjobSpek : Spek({
7275
val publishDialogmoteStatusEndringService = PublishDialogmoteStatusEndringService(
7376
database = database,
7477
dialogmoteStatusEndringProducer = dialogmoteStatusEndringProducer,
78+
moteStatusEndretRepository = moteStatusEndretRepository,
7579
)
7680

7781
val publishDialogmoteStatusEndringCronjob = PublishDialogmoteStatusEndringCronjob(

src/test/kotlin/no/nav/syfo/dialogmote/api/v2/AvlysDialogmoteApiV2Spek.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import no.nav.syfo.brev.behandler.kafka.KafkaBehandlerDialogmeldingDTO
2121
import no.nav.syfo.brev.esyfovarsel.EsyfovarselProducer
2222
import no.nav.syfo.client.oppfolgingstilfelle.toLatestOppfolgingstilfelle
2323
import no.nav.syfo.dialogmote.api.domain.DialogmoteDTO
24-
import no.nav.syfo.dialogmote.database.getMoteStatusEndretNotPublished
24+
import no.nav.syfo.dialogmote.database.repository.MoteStatusEndretRepository
2525
import no.nav.syfo.dialogmote.domain.*
2626
import no.nav.syfo.testhelper.ExternalMockEnvironment
2727
import no.nav.syfo.testhelper.UserConstants.ARBEIDSTAKER_FNR
@@ -55,6 +55,7 @@ class AvlysDialogmoteApiV2Spek : Spek({
5555
behandlerDialogmeldingProducer = behandlerDialogmeldingProducer,
5656
)
5757
val esyfovarselProducerMock = mockk<EsyfovarselProducer>(relaxed = true)
58+
val moteStatusEndretRepository = MoteStatusEndretRepository(database)
5859

5960
val altinnMock = mockk<ICorrespondenceAgencyExternalBasic>()
6061
val altinnResponse = ReceiptExternal()
@@ -180,7 +181,7 @@ class AvlysDialogmoteApiV2Spek : Spek({
180181

181182
verify(exactly = 0) { behandlerDialogmeldingProducer.sendDialogmelding(any()) }
182183

183-
val moteStatusEndretList = database.getMoteStatusEndretNotPublished()
184+
val moteStatusEndretList = moteStatusEndretRepository.getMoteStatusEndretNotPublished()
184185
moteStatusEndretList.size shouldBeEqualTo 2
185186

186187
moteStatusEndretList.forEach { moteStatusEndret ->
@@ -467,7 +468,7 @@ class AvlysDialogmoteApiV2Spek : Spek({
467468
LocalDateTime.now().isBefore(newDialogmoteDTO.tidSted.tid)
468469
isTodayBeforeDialogmotetid shouldBeEqualTo false
469470

470-
val moteStatusEndretList = database.getMoteStatusEndretNotPublished()
471+
val moteStatusEndretList = moteStatusEndretRepository.getMoteStatusEndretNotPublished()
471472
moteStatusEndretList.size shouldBeEqualTo 2
472473

473474
moteStatusEndretList.forEach { moteStatusEndret ->

0 commit comments

Comments
 (0)