diff --git a/spesialist-api/src/main/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDao.kt b/spesialist-api/src/main/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDao.kt index 47f64ec45..4725aee53 100644 --- a/spesialist-api/src/main/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDao.kt +++ b/spesialist-api/src/main/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDao.kt @@ -1,55 +1,64 @@ package no.nav.helse.spesialist.api.abonnement -import kotliquery.sessionOf -import no.nav.helse.HelseDao +import no.nav.helse.HelseDao.Companion.asSQL +import no.nav.helse.db.MedDataSource +import no.nav.helse.db.QueryRunner import java.util.UUID import javax.sql.DataSource -class AbonnementDao(private val dataSource: DataSource) : HelseDao(dataSource) { +class AbonnementDao(dataSource: DataSource) : QueryRunner by MedDataSource(dataSource) { fun opprettAbonnement( saksbehandlerId: UUID, aktørId: Long, - ) = sessionOf(dataSource).use { session -> - session.transaction { transactionalSession -> - val abonnementQuery = - asSQL( - """ - delete from abonnement_for_opptegnelse where saksbehandler_id = :saksbehandlerId; - insert into abonnement_for_opptegnelse - select :saksbehandlerId, p.id - from person p - where p.aktor_id = :aktorId - """.trimIndent(), - "saksbehandlerId" to saksbehandlerId, - "aktorId" to aktørId, - ) - transactionalSession.run(abonnementQuery.asUpdate) - - val sekvensnummerQuery = - asSQL( - """ - insert into saksbehandler_opptegnelse_sekvensnummer - values (:saksbehandlerId, coalesce((select max(sekvensnummer) from opptegnelse), 0)) - on conflict (saksbehandler_id) do update - set siste_sekvensnummer = (coalesce((select max(sekvensnummer) from opptegnelse), 0)) - """.trimIndent(), - "saksbehandlerId" to saksbehandlerId, - "aktorId" to aktørId, - ) - transactionalSession.run(sekvensnummerQuery.asUpdate) - } + ) { + lagre(saksbehandlerId, aktørId) + upsertSekvensnummer(saksbehandlerId, aktørId) } fun registrerSistekvensnummer( saksbehandlerIdent: UUID, sisteSekvensId: Int, - ) = asSQL( - """ - update saksbehandler_opptegnelse_sekvensnummer - set siste_sekvensnummer = :sisteSekvensId - where saksbehandler_id = :saksbehandlerId; - """.trimIndent(), - "sisteSekvensId" to sisteSekvensId, - "saksbehandlerId" to saksbehandlerIdent, - ).update() + ): Int = + asSQL( + """ + update saksbehandler_opptegnelse_sekvensnummer + set siste_sekvensnummer = :sisteSekvensId + where saksbehandler_id = :saksbehandlerId; + """.trimIndent(), + "sisteSekvensId" to sisteSekvensId, + "saksbehandlerId" to saksbehandlerIdent, + ).update() + + private fun upsertSekvensnummer( + saksbehandlerId: UUID, + aktørId: Long, + ) { + asSQL( + """ + insert into saksbehandler_opptegnelse_sekvensnummer + values (:saksbehandlerId, coalesce((select max(sekvensnummer) from opptegnelse), 0)) + on conflict (saksbehandler_id) do update + set siste_sekvensnummer = (coalesce((select max(sekvensnummer) from opptegnelse), 0)) + """.trimIndent(), + "saksbehandlerId" to saksbehandlerId, + "aktorId" to aktørId, + ).update() + } + + private fun lagre( + saksbehandlerId: UUID, + aktørId: Long, + ) { + asSQL( + """ + delete from abonnement_for_opptegnelse where saksbehandler_id = :saksbehandlerId; + insert into abonnement_for_opptegnelse + select :saksbehandlerId, p.id + from person p + where p.aktor_id = :aktorId + """.trimIndent(), + "saksbehandlerId" to saksbehandlerId, + "aktorId" to aktørId, + ).update() + } } diff --git a/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/DatabaseIntegrationTest.kt b/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/DatabaseIntegrationTest.kt index 53ee1210c..c5e0863e2 100644 --- a/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/DatabaseIntegrationTest.kt +++ b/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/DatabaseIntegrationTest.kt @@ -991,11 +991,6 @@ internal abstract class DatabaseIntegrationTest : AbstractDatabaseTest() { val epost: String, ) - protected fun query( - @Language("postgresql") query: String, - vararg params: Pair, - ) = queryOf(query, params.toMap()) - protected fun Query.update() = asUpdate.runInSession() protected fun Query.single(mapper: (Row) -> T?) = map(mapper).asSingle.runInSession() diff --git a/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDaoTest.kt b/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDaoTest.kt index c502ed9a2..5f63d8dee 100644 --- a/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDaoTest.kt +++ b/spesialist-api/src/test/kotlin/no/nav/helse/spesialist/api/abonnement/AbonnementDaoTest.kt @@ -1,5 +1,6 @@ package no.nav.helse.spesialist.api.abonnement +import no.nav.helse.HelseDao.Companion.asSQL import no.nav.helse.spesialist.api.DatabaseIntegrationTest import no.nav.helse.spesialist.test.lagAktørId import no.nav.helse.spesialist.test.lagFødselsnummer @@ -70,21 +71,21 @@ internal class AbonnementDaoTest : DatabaseIntegrationTest() { } } - private fun settSekvensnummer(saksbehandlerId: UUID, sekvensnummer: Int) = query( + private fun settSekvensnummer(saksbehandlerId: UUID, sekvensnummer: Int) = asSQL( """ insert into saksbehandler_opptegnelse_sekvensnummer values ('$saksbehandlerId', $sekvensnummer) """.trimIndent() ).update() - private fun lagOpptegnelse(personRef: Long, eksisterendeSekvensnummer: Int) = query( + private fun lagOpptegnelse(personRef: Long, eksisterendeSekvensnummer: Int) = asSQL( """ insert into opptegnelse values (:person_id, :sekvensnummer, '{"innhold": "noe oppdateringsrelatert"}', 'en eller annen opptegnelsestype') """.trimIndent(), "person_id" to personRef, "sekvensnummer" to eksisterendeSekvensnummer ).update() - private fun finnSekvensnummer(saksbehandlerId: UUID) = query( + private fun finnSekvensnummer(saksbehandlerId: UUID) = asSQL( """ select siste_sekvensnummer from saksbehandler_opptegnelse_sekvensnummer @@ -92,7 +93,7 @@ internal class AbonnementDaoTest : DatabaseIntegrationTest() { """.trimIndent(), "saksbehandlerId" to saksbehandlerId ).single { it.intOrNull("siste_sekvensnummer") } - private fun finnPersonerSaksbehandlerAbonnererPå(saksbehandlerId: UUID) = query( + private fun finnPersonerSaksbehandlerAbonnererPå(saksbehandlerId: UUID) = asSQL( """ select aktor_id from abonnement_for_opptegnelse