From 4a977da8ac42b4df4367946b7ca803d0e5d01908 Mon Sep 17 00:00:00 2001 From: Jakob Havstein Eriksen Date: Sat, 26 Oct 2024 14:39:34 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Bytter=20til=20QueryRunner?= =?UTF-8?q?=20i=20DokumentDao=20og=20VarselDao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../no/nav/helse/bootstrap/SpesialistApp.kt | 2 +- .../no/nav/helse/mediator/MeldingMediator.kt | 2 +- .../nav/helse/modell/dokument/DokumentDao.kt | 40 +++--------- .../no/nav/helse/modell/varsel/VarselDao.kt | 63 +++++++------------ .../helse/modell/varsel/VarselRepository.kt | 2 +- .../test/kotlin/DatabaseIntegrationTest.kt | 2 +- 6 files changed, 36 insertions(+), 75 deletions(-) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/bootstrap/SpesialistApp.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/bootstrap/SpesialistApp.kt index b091028f5..3630aaacc 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/bootstrap/SpesialistApp.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/bootstrap/SpesialistApp.kt @@ -102,7 +102,7 @@ internal class SpesialistApp( private val totrinnsvurderingDao = TotrinnsvurderingDao(dataSource) private val snapshotApiDao = SnapshotApiDao(dataSource) private val apiVarselRepository = ApiVarselRepository(dataSource) - private val dokumentDao = DokumentDao.NonTransactional(dataSource) + private val dokumentDao = DokumentDao(dataSource) private val påVentApiDao = PåVentApiDao(dataSource) private val avviksvurderingDao = AvviksvurderingDao(dataSource) private val stansAutomatiskBehandlingDao = StansAutomatiskBehandlingDao(dataSource) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt index dbf4b2bf5..325299fd1 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt @@ -88,7 +88,7 @@ internal class MeldingMediator( private val meldingDao: MeldingDao = MeldingDao(dataSource), private val meldingDuplikatkontrollDao: MeldingDuplikatkontrollDao = MeldingDuplikatkontrollDao(dataSource), private val kommandofabrikk: Kommandofabrikk, - private val dokumentDao: DokumentDaoInterface = DokumentDao.NonTransactional(dataSource), + private val dokumentDao: DokumentDaoInterface = DokumentDao(dataSource), avviksvurderingDao: AvviksvurderingDao, private val varselRepository: VarselRepository = VarselRepository(dataSource), private val stansAutomatiskBehandlingMediator: StansAutomatiskBehandlingMediator, diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/dokument/DokumentDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/dokument/DokumentDao.kt index 1485b7f60..f2e14695c 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/dokument/DokumentDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/dokument/DokumentDao.kt @@ -2,10 +2,10 @@ package no.nav.helse.modell.dokument import com.fasterxml.jackson.databind.JsonNode import kotliquery.Session -import kotliquery.sessionOf import no.nav.helse.HelseDao.Companion.asSQL -import no.nav.helse.HelseDao.Companion.single -import no.nav.helse.HelseDao.Companion.update +import no.nav.helse.db.MedDataSource +import no.nav.helse.db.MedSession +import no.nav.helse.db.QueryRunner import no.nav.helse.objectMapper import java.util.UUID import javax.sql.DataSource @@ -25,29 +25,9 @@ internal interface DokumentDaoInterface { fun slettGamleDokumenter(): Int } -internal class DokumentDao(private val session: Session) : DokumentDaoInterface { - internal object NonTransactional { - operator fun invoke(dataSource: DataSource): DokumentDaoInterface { - fun inSession(block: (Session) -> T) = sessionOf(dataSource).use { block(it) } - - return object : DokumentDaoInterface { - override fun lagre( - fødselsnummer: String, - dokumentId: UUID, - dokument: JsonNode, - ) { - inSession { DokumentDao(it).lagre(fødselsnummer, dokumentId, dokument) } - } - - override fun hent( - fødselsnummer: String, - dokumentId: UUID, - ) = inSession { DokumentDao(it).hent(fødselsnummer, dokumentId) } - - override fun slettGamleDokumenter(): Int = inSession { DokumentDao(it).slettGamleDokumenter() } - } - } - } +internal class DokumentDao(queryRunner: QueryRunner) : DokumentDaoInterface, QueryRunner by queryRunner { + constructor(session: Session) : this(MedSession(session)) + constructor(dataSource: DataSource) : this(MedDataSource(dataSource)) override fun lagre( fødselsnummer: String, @@ -59,7 +39,7 @@ internal class DokumentDao(private val session: Session) : DokumentDaoInterface SELECT id FROM person WHERE fodselsnummer=:fodselsnummer """.trimIndent(), "fodselsnummer" to fødselsnummer.toLong(), - ).single(session) { it.int("id") }?.let { personId -> + ).single { it.int("id") }?.let { personId -> asSQL( """ INSERT INTO dokumenter (dokument_id, person_ref, dokument) @@ -73,7 +53,7 @@ internal class DokumentDao(private val session: Session) : DokumentDaoInterface "dokumentId" to dokumentId, "personRef" to personId, "dokument" to objectMapper.writeValueAsString(dokument), - ).update(session) + ).update() } } @@ -87,7 +67,7 @@ internal class DokumentDao(private val session: Session) : DokumentDaoInterface """.trimIndent(), "fodselsnummer" to fødselsnummer.toLong(), "dokumentId" to dokumentId, - ).single(session) { row -> + ).single { row -> row.stringOrNull("dokument")?.let { dokument -> objectMapper.readTree(dokument) } } @@ -96,5 +76,5 @@ internal class DokumentDao(private val session: Session) : DokumentDaoInterface """ delete from dokumenter where opprettet < current_date - interval '3 months'; """.trimIndent(), - ).update(session) + ).update() } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselDao.kt index f53a47575..90dfce8aa 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselDao.kt @@ -1,10 +1,11 @@ package no.nav.helse.modell.varsel import kotliquery.Session -import kotliquery.queryOf -import kotliquery.sessionOf +import no.nav.helse.HelseDao.Companion.asSQL +import no.nav.helse.db.MedDataSource +import no.nav.helse.db.MedSession +import no.nav.helse.db.QueryRunner import no.nav.helse.modell.person.vedtaksperiode.Varsel.Status -import org.intellij.lang.annotations.Language import java.time.LocalDateTime import java.util.UUID import javax.sql.DataSource @@ -16,49 +17,29 @@ internal interface VarselDaoInterface { ) } -internal class VarselDao(private val session: Session) : VarselDaoInterface { - internal object NonTransactional { - operator fun invoke(dataSource: DataSource): VarselDaoInterface { - fun inSession(block: (Session) -> Unit) = sessionOf(dataSource).use { block(it) } - - return object : VarselDaoInterface { - override fun avvikleVarsel( - varselkode: String, - definisjonId: UUID, - ) { - inSession { VarselDao(it).avvikleVarsel(varselkode, definisjonId) } - } - } - } - } +internal class VarselDao(queryRunner: QueryRunner) : VarselDaoInterface, QueryRunner by queryRunner { + constructor(session: Session) : this(MedSession(session)) + constructor(dataSource: DataSource) : this(MedDataSource(dataSource)) override fun avvikleVarsel( varselkode: String, definisjonId: UUID, ) { - @Language("PostgreSQL") - val query = + asSQL( """ - UPDATE selve_varsel - SET status = :avvikletStatus, - status_endret_tidspunkt = :endretTidspunkt, - status_endret_ident = :ident, - definisjon_ref = (SELECT id FROM api_varseldefinisjon WHERE unik_id = :definisjonId) - WHERE kode = :varselkode AND status = :aktivStatus; - """ - - session.run( - queryOf( - query, - mapOf( - "avvikletStatus" to Status.AVVIKLET.name, - "aktivStatus" to Status.AKTIV.name, - "endretTidspunkt" to LocalDateTime.now(), - "ident" to "avviklet_fra_speaker", - "definisjonId" to definisjonId, - "varselkode" to varselkode, - ), - ).asUpdate, - ) + UPDATE selve_varsel + SET status = :avvikletStatus, + status_endret_tidspunkt = :endretTidspunkt, + status_endret_ident = :ident, + definisjon_ref = (SELECT id FROM api_varseldefinisjon WHERE unik_id = :definisjonId) + WHERE kode = :varselkode AND status = :aktivStatus; + """.trimIndent(), + "avvikletStatus" to Status.AVVIKLET.name, + "aktivStatus" to Status.AKTIV.name, + "endretTidspunkt" to LocalDateTime.now(), + "ident" to "avviklet_fra_speaker", + "definisjonId" to definisjonId, + "varselkode" to varselkode, + ).update() } } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselRepository.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselRepository.kt index 03da4a77f..1e3ed59a2 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselRepository.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/varsel/VarselRepository.kt @@ -3,7 +3,7 @@ package no.nav.helse.modell.varsel import javax.sql.DataSource internal class VarselRepository(dataSource: DataSource) { - private val varselDao = VarselDao.NonTransactional(dataSource) + private val varselDao = VarselDao(dataSource) private val definisjonDao = DefinisjonDao(dataSource) internal fun lagreDefinisjon(definisjonDto: VarseldefinisjonDto) { diff --git a/spesialist-selve/src/test/kotlin/DatabaseIntegrationTest.kt b/spesialist-selve/src/test/kotlin/DatabaseIntegrationTest.kt index 7e973158a..25673e07b 100644 --- a/spesialist-selve/src/test/kotlin/DatabaseIntegrationTest.kt +++ b/spesialist-selve/src/test/kotlin/DatabaseIntegrationTest.kt @@ -163,7 +163,7 @@ abstract class DatabaseIntegrationTest : AbstractDatabaseTest() { internal val vergemålDao = VergemålDao(dataSource) internal val generasjonDao = GenerasjonDao(dataSource) internal val totrinnsvurderingDao = TotrinnsvurderingDao(session) - internal val dokumentDao = DokumentDao.NonTransactional(dataSource) + internal val dokumentDao = DokumentDao(dataSource) internal val påVentDao = PåVentDao(dataSource) internal val stansAutomatiskBehandlingDao = StansAutomatiskBehandlingDao(dataSource) internal val notatDao = NotatDao(dataSource)