Skip to content

Commit dbc729c

Browse files
IS-2060: Refactor select mote queries to repository class (#490)
* IS-2060: Refactor select mote queries to repository class * IS-2060: Add tests when ids not exists
1 parent 182986a commit dbc729c

File tree

5 files changed

+144
-20
lines changed

5 files changed

+144
-20
lines changed

src/main/kotlin/no/nav/syfo/application/api/ApiModule.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package no.nav.syfo.application.api
22

3-
import io.ktor.server.application.Application
4-
import io.ktor.server.auth.authenticate
5-
import io.ktor.server.routing.routing
3+
import io.ktor.server.application.*
4+
import io.ktor.server.auth.*
5+
import io.ktor.server.routing.*
66
import no.altinn.services.serviceengine.correspondence._2009._10.ICorrespondenceAgencyExternalBasic
77
import no.nav.syfo.application.ApplicationState
88
import no.nav.syfo.application.Environment
@@ -30,6 +30,7 @@ import no.nav.syfo.dialogmote.*
3030
import no.nav.syfo.dialogmote.api.v2.registerDialogmoteActionsApiV2
3131
import no.nav.syfo.dialogmote.api.v2.registerDialogmoteApiV2
3232
import no.nav.syfo.dialogmote.api.v2.registerDialogmoteEnhetApiV2
33+
import no.nav.syfo.dialogmote.database.MoteRepository
3334
import no.nav.syfo.dialogmote.tilgang.DialogmoteTilgangService
3435

3536
fun Application.apiModule(
@@ -160,6 +161,7 @@ fun Application.apiModule(
160161

161162
val dialogmoteService = DialogmoteService(
162163
database = database,
164+
moteRepository = MoteRepository(database),
163165
dialogmotedeltakerService = dialogmotedeltakerService,
164166
dialogmotestatusService = dialogmotestatusService,
165167
dialogmoterelasjonService = dialogmoterelasjonService,

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

+7-4
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,18 @@ import no.nav.syfo.client.pdl.PdlClient
1111
import no.nav.syfo.client.person.kontaktinfo.KontaktinformasjonClient
1212
import no.nav.syfo.dialogmote.api.domain.*
1313
import no.nav.syfo.dialogmote.database.*
14-
import no.nav.syfo.dialogmote.database.domain.*
14+
import no.nav.syfo.dialogmote.database.domain.toReferat
1515
import no.nav.syfo.dialogmote.domain.*
16-
import no.nav.syfo.domain.*
16+
import no.nav.syfo.domain.EnhetNr
17+
import no.nav.syfo.domain.PersonIdent
18+
import no.nav.syfo.domain.Virksomhetsnummer
1719
import java.sql.Connection
1820
import java.time.LocalDateTime
1921
import java.util.*
2022

2123
class DialogmoteService(
2224
private val database: DatabaseInterface,
25+
private val moteRepository: MoteRepository,
2326
private val dialogmotedeltakerService: DialogmotedeltakerService,
2427
private val dialogmotestatusService: DialogmotestatusService,
2528
private val dialogmoterelasjonService: DialogmoterelasjonService,
@@ -33,15 +36,15 @@ class DialogmoteService(
3336
fun getDialogmote(
3437
moteUUID: UUID
3538
): Dialogmote {
36-
return database.getDialogmote(moteUUID).first().let { pDialogmote ->
39+
return moteRepository.getMote(moteUUID).first().let { pDialogmote ->
3740
dialogmoterelasjonService.extendDialogmoteRelations(pDialogmote)
3841
}
3942
}
4043

4144
fun getDialogmoteList(
4245
personIdent: PersonIdent,
4346
): List<Dialogmote> {
44-
return database.getDialogmoteList(personIdent).map { pDialogmote ->
47+
return moteRepository.getMoterFor(personIdent).map { pDialogmote ->
4548
dialogmoterelasjonService.extendDialogmoteRelations(pDialogmote)
4649
}
4750
}

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

-13
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import no.nav.syfo.dialogmote.domain.TidStedDTO
1111
import no.nav.syfo.domain.EnhetNr
1212
import no.nav.syfo.domain.PersonIdent
1313
import java.sql.Connection
14-
import java.sql.ResultSet
1514
import java.sql.SQLException
1615
import java.sql.Timestamp
1716
import java.time.Instant
@@ -314,15 +313,3 @@ fun Connection.updateMoteTidSted(
314313
this.commit()
315314
}
316315
}
317-
318-
fun ResultSet.toPDialogmote(): PDialogmote =
319-
PDialogmote(
320-
id = getInt("id"),
321-
uuid = UUID.fromString(getString("uuid")),
322-
createdAt = getTimestamp("created_at").toLocalDateTime(),
323-
updatedAt = getTimestamp("updated_at").toLocalDateTime(),
324-
status = getString("status"),
325-
opprettetAv = getString("opprettet_av"),
326-
tildeltVeilederIdent = getString("tildelt_veileder_ident"),
327-
tildeltEnhet = getString("tildelt_enhet")
328-
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package no.nav.syfo.dialogmote.database
2+
3+
import no.nav.syfo.application.database.DatabaseInterface
4+
import no.nav.syfo.application.database.toList
5+
import no.nav.syfo.dialogmote.database.domain.PDialogmote
6+
import no.nav.syfo.domain.PersonIdent
7+
import java.sql.ResultSet
8+
import java.util.*
9+
10+
class MoteRepository(private val database: DatabaseInterface) {
11+
12+
fun getMote(moteUUID: UUID): List<PDialogmote> =
13+
database.connection.use { connection ->
14+
connection.prepareStatement(GET_DIALOGMOTE_FOR_UUID_QUERY).use {
15+
it.setString(1, moteUUID.toString())
16+
it.executeQuery().toList { toPDialogmote() }
17+
}
18+
}
19+
20+
fun getMoterFor(personIdent: PersonIdent): List<PDialogmote> =
21+
database.connection.use { connection ->
22+
connection.prepareStatement(GET_DIALOGMOTER_FOR_PERSONIDENT_QUERY).use {
23+
it.setString(1, personIdent.value)
24+
it.executeQuery().toList { toPDialogmote() }
25+
}
26+
}
27+
28+
companion object {
29+
private const val GET_DIALOGMOTE_FOR_UUID_QUERY =
30+
"""
31+
SELECT *
32+
FROM MOTE
33+
WHERE uuid = ?
34+
"""
35+
36+
private const val GET_DIALOGMOTER_FOR_PERSONIDENT_QUERY =
37+
"""
38+
SELECT *
39+
FROM MOTE
40+
INNER JOIN MOTEDELTAKER_ARBEIDSTAKER on MOTEDELTAKER_ARBEIDSTAKER.mote_id = MOTE.id
41+
WHERE personident = ?
42+
ORDER BY MOTE.created_at DESC
43+
"""
44+
}
45+
}
46+
47+
fun ResultSet.toPDialogmote(): PDialogmote =
48+
PDialogmote(
49+
id = getInt("id"),
50+
uuid = UUID.fromString(getString("uuid")),
51+
createdAt = getTimestamp("created_at").toLocalDateTime(),
52+
updatedAt = getTimestamp("updated_at").toLocalDateTime(),
53+
status = getString("status"),
54+
opprettetAv = getString("opprettet_av"),
55+
tildeltVeilederIdent = getString("tildelt_veileder_ident"),
56+
tildeltEnhet = getString("tildelt_enhet")
57+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package no.nav.syfo.dialogmote.database
2+
3+
import io.ktor.server.testing.*
4+
import no.nav.syfo.testhelper.ExternalMockEnvironment
5+
import no.nav.syfo.testhelper.UserConstants
6+
import no.nav.syfo.testhelper.dropData
7+
import no.nav.syfo.testhelper.generator.generateNewDialogmote
8+
import org.amshove.kluent.shouldBe
9+
import org.amshove.kluent.shouldBeEqualTo
10+
import org.spekframework.spek2.Spek
11+
import org.spekframework.spek2.style.specification.describe
12+
import java.util.*
13+
14+
class MoteRepositorySpek : Spek({
15+
16+
describe(MoteRepositorySpek::class.java.simpleName) {
17+
with(TestApplicationEngine()) {
18+
start()
19+
val externalMockEnvironment = ExternalMockEnvironment.getInstance()
20+
val database = externalMockEnvironment.database
21+
val moteRepository = MoteRepository(database = database)
22+
val newDialogmote = generateNewDialogmote(UserConstants.ARBEIDSTAKER_FNR)
23+
val newDialogmoteNotBelongingToArbeidstaker = generateNewDialogmote(UserConstants.ARBEIDSTAKER_ANNEN_FNR)
24+
val moteTilhorendeArbeidstaker = newDialogmote.arbeidstaker.personIdent
25+
val otherArbeidstakerNoMoter = UserConstants.ARBEIDSTAKER_ANNEN_FNR
26+
27+
afterEachTest {
28+
database.dropData()
29+
}
30+
31+
describe("Get dialogmote with UUID") {
32+
33+
it("Successfully get mote with uuid") {
34+
val createdDialogmote = database.connection.use { connection ->
35+
connection.createNewDialogmoteWithReferences(newDialogmote = newDialogmote)
36+
connection.createNewDialogmoteWithReferences(newDialogmoteNotBelongingToArbeidstaker)
37+
}
38+
39+
val retrievedMote = moteRepository.getMote(createdDialogmote.dialogmoteIdPair.second)
40+
41+
retrievedMote.size shouldBe 1
42+
retrievedMote.first().opprettetAv shouldBeEqualTo newDialogmote.opprettetAv
43+
retrievedMote.first().status shouldBeEqualTo newDialogmote.status.name
44+
retrievedMote.first().tildeltEnhet shouldBeEqualTo newDialogmote.tildeltEnhet
45+
retrievedMote.first().tildeltVeilederIdent shouldBeEqualTo newDialogmote.tildeltVeilederIdent
46+
}
47+
48+
it("Successfully get moter belonging to person with person ident") {
49+
database.connection.use { connection ->
50+
connection.createNewDialogmoteWithReferences(newDialogmote = newDialogmote)
51+
connection.createNewDialogmoteWithReferences(newDialogmoteNotBelongingToArbeidstaker)
52+
}
53+
54+
val retrievedMoter = moteRepository.getMoterFor(moteTilhorendeArbeidstaker)
55+
56+
retrievedMoter.size shouldBe 1
57+
retrievedMoter.first().opprettetAv shouldBeEqualTo newDialogmote.opprettetAv
58+
retrievedMoter.first().status shouldBeEqualTo newDialogmote.status.name
59+
retrievedMoter.first().tildeltEnhet shouldBeEqualTo newDialogmote.tildeltEnhet
60+
retrievedMoter.first().tildeltVeilederIdent shouldBeEqualTo newDialogmote.tildeltVeilederIdent
61+
}
62+
63+
it("Returns empty list when no uuid exists") {
64+
val retrievedMote = moteRepository.getMote(UUID.randomUUID())
65+
retrievedMote shouldBeEqualTo emptyList()
66+
}
67+
68+
it("Returns empty list when person ident does not exist") {
69+
val retrievedMote = moteRepository.getMoterFor(otherArbeidstakerNoMoter)
70+
retrievedMote shouldBeEqualTo emptyList()
71+
}
72+
}
73+
}
74+
}
75+
})

0 commit comments

Comments
 (0)