diff --git a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/periodehistorikk/HistorikkinnslagDto.kt b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/periodehistorikk/HistorikkinnslagDto.kt index d1c94d022..f9f6f2a9d 100644 --- a/spesialist-modell/src/main/kotlin/no/nav/helse/modell/periodehistorikk/HistorikkinnslagDto.kt +++ b/spesialist-modell/src/main/kotlin/no/nav/helse/modell/periodehistorikk/HistorikkinnslagDto.kt @@ -14,6 +14,8 @@ sealed interface HistorikkinnslagDto { val saksbehandler: SaksbehandlerDto? val tidspunkt: LocalDateTime + fun toJson(): String = "{}" + companion object { fun lagtPåVentInnslag( notat: NotatDto?, @@ -52,7 +54,7 @@ data class LagtPåVent( val årsak: List, val frist: LocalDate, ) : HistorikkinnslagDto { - fun toJson(): String = + override fun toJson(): String = mapOf( "årsaker" to årsak.map { it }, "frist" to frist, diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/db/OppgaveRepository.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/db/OppgaveRepository.kt index e1ad12114..041e3e73f 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/db/OppgaveRepository.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/db/OppgaveRepository.kt @@ -9,6 +9,8 @@ interface OppgaveRepository { fun finnUtbetalingId(oppgaveId: Long): UUID? + fun finnGenerasjonId(oppgaveId: Long): UUID + fun finnOppgave(id: Long): OppgaveFraDatabase? fun finnOppgaveId(fødselsnummer: String): Long? diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/db/PeriodehistorikkDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/db/PeriodehistorikkDao.kt index 4354b042f..d83221ea0 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/db/PeriodehistorikkDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/db/PeriodehistorikkDao.kt @@ -1,9 +1,9 @@ package no.nav.helse.db import kotliquery.sessionOf +import no.nav.helse.mediator.oppgave.OppgaveDao import no.nav.helse.modell.periodehistorikk.FjernetFraPåVent import no.nav.helse.modell.periodehistorikk.HistorikkinnslagDto -import no.nav.helse.modell.periodehistorikk.Innslagstype import no.nav.helse.modell.periodehistorikk.LagtPåVent import no.nav.helse.spesialist.api.graphql.schema.NotatType import no.nav.helse.spesialist.api.notat.NotatApiDao @@ -15,20 +15,15 @@ class PeriodehistorikkDao( private val dataSource: DataSource, ) : PeriodehistorikkRepository { private val notatDao: NotatApiDao = NotatApiDao(dataSource) + private val oppgaveDao = OppgaveDao(dataSource) override fun lagre( historikkinnslag: HistorikkinnslagDto, oppgaveId: Long, ) { + val generasjonId = oppgaveDao.finnGenerasjonId(oppgaveId) when (historikkinnslag) { - is FjernetFraPåVent -> - lagre( - historikkType = historikkinnslag.type.tilPeriodehistorikkType(), - saksbehandlerOid = historikkinnslag.saksbehandler.oid, - oppgaveId = oppgaveId, - notatId = null, - ) - + is FjernetFraPåVent -> lagre(historikkinnslag, generasjonId, null) is LagtPåVent -> { val notatId = historikkinnslag.notat?.let { notat -> @@ -40,17 +35,21 @@ class PeriodehistorikkDao( type = NotatType.PaaVent, )?.toInt() } - lagre( - historikkType = historikkinnslag.type.tilPeriodehistorikkType(), - saksbehandlerOid = historikkinnslag.saksbehandler.oid, - oppgaveId = oppgaveId, - notatId = notatId, - json = historikkinnslag.toJson(), - ) + lagre(historikkinnslag, generasjonId, notatId) } } } + private fun lagre( + historikkinnslag: HistorikkinnslagDto, + generasjonId: UUID, + notatId: Int?, + ) { + sessionOf(dataSource).use { session -> + TransactionalPeriodehistorikkDao(session).lagre(historikkinnslag, generasjonId, notatId) + } + } + override fun lagre( historikkType: PeriodehistorikkType, saksbehandlerOid: UUID?, @@ -95,10 +94,4 @@ class PeriodehistorikkDao( ) } } - - private fun Innslagstype.tilPeriodehistorikkType() = - when (this) { - Innslagstype.LAGT_PA_VENT -> PeriodehistorikkType.LEGG_PA_VENT - Innslagstype.FJERNET_FRA_PA_VENT -> PeriodehistorikkType.FJERN_FRA_PA_VENT - } } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalOppgaveDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalOppgaveDao.kt index 5b206241d..22b0b2932 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalOppgaveDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalOppgaveDao.kt @@ -25,6 +25,21 @@ class TransactionalOppgaveDao(private val session: Session) : OppgaveRepository ) } + override fun finnGenerasjonId(oppgaveId: Long): UUID { + @Language("PostgreSQL") + val statement = + """ + SELECT generasjon_ref FROM oppgave WHERE id = :oppgaveId; + """.trimIndent() + return requireNotNull( + session.run( + queryOf(statement, mapOf("oppgaveId" to oppgaveId)).map { + it.uuid("generasjon_ref") + }.asSingle, + ), + ) + } + override fun finnOppgaveIdUansettStatus(fødselsnummer: String): Long { @Language("PostgreSQL") val statement = diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalPeriodehistorikkDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalPeriodehistorikkDao.kt index c287b8a71..310aaae07 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalPeriodehistorikkDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/db/TransactionalPeriodehistorikkDao.kt @@ -3,6 +3,7 @@ package no.nav.helse.db import kotliquery.Session import kotliquery.queryOf import no.nav.helse.modell.periodehistorikk.HistorikkinnslagDto +import no.nav.helse.modell.periodehistorikk.Innslagstype import no.nav.helse.spesialist.api.periodehistorikk.PeriodehistorikkType import org.intellij.lang.annotations.Language import java.util.UUID @@ -15,6 +16,36 @@ class TransactionalPeriodehistorikkDao(private val session: Session) : Periodehi throw UnsupportedOperationException() } + internal fun lagre( + historikkinnslag: HistorikkinnslagDto, + generasjonId: UUID, + notatId: Int?, + ) { + @Language("PostgreSQL") + val statement = """ + INSERT INTO periodehistorikk (type, saksbehandler_oid, generasjon_id, utbetaling_id, notat_id, json) + VALUES (:type, :saksbehandler_oid, :generasjon_id, null, :notat_id, :json::json) + """ + session.run( + queryOf( + statement, + mapOf( + "type" to historikkinnslag.type.toDb(), + "saksbehandler_oid" to historikkinnslag.saksbehandler?.oid, + "generasjon_id" to generasjonId, + "notat_id" to notatId, + "json" to historikkinnslag.toJson(), + ), + ).asUpdate, + ) + } + + private fun Innslagstype.toDb() = + when (this) { + Innslagstype.LAGT_PA_VENT -> "LEGG_PA_VENT" + Innslagstype.FJERNET_FRA_PA_VENT -> "FJERN_FRA_PA_VENT" // TODO: Mangler å migrere typen i databasen + } + override fun lagre( historikkType: PeriodehistorikkType, saksbehandlerOid: UUID?, diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/oppgave/OppgaveDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/oppgave/OppgaveDao.kt index 09bbd4761..897cc82db 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/oppgave/OppgaveDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/oppgave/OppgaveDao.kt @@ -82,6 +82,12 @@ class OppgaveDao(private val dataSource: DataSource) : HelseDao(dataSource), Opp TransactionalOppgaveDao(session).finnUtbetalingId(oppgaveId) } + override fun finnGenerasjonId(oppgaveId: Long): UUID { + return sessionOf(dataSource).use { session -> + TransactionalOppgaveDao(session).finnGenerasjonId(oppgaveId) + } + } + override fun finnSpleisBehandlingId(oppgaveId: Long) = sessionOf(dataSource).use { session -> TransactionalOppgaveDao(session).finnSpleisBehandlingId(oppgaveId) diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/db/OppgaveDaoTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/db/OppgaveDaoTest.kt index 6798c9904..d668109bb 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/db/OppgaveDaoTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/db/OppgaveDaoTest.kt @@ -25,6 +25,7 @@ import no.nav.helse.spesialist.api.person.Adressebeskyttelse import no.nav.helse.spesialist.test.lagAktørId import no.nav.helse.spesialist.test.lagFødselsnummer import no.nav.helse.spesialist.test.lagOrganisasjonsnummer +import org.junit.jupiter.api.Assertions.assertDoesNotThrow import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertNull @@ -90,6 +91,17 @@ class OppgaveDaoTest : DatabaseIntegrationTest() { assertEquals(spleisBehandlingId, oppgaveDao.finnSpleisBehandlingId(oppgaveId)) } + @Test + fun `finn generasjonId`() { + opprettPerson() + opprettArbeidsgiver() + opprettVedtaksperiode() + opprettOppgave(contextId = CONTEXT_ID) + assertDoesNotThrow { + oppgaveDao.finnGenerasjonId(oppgaveId) + } + } + @Test fun `skal ikke lagre ny oppgave dersom det allerede er en eksisterende oppgave på samme person med gitt status`() { opprettPerson() diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/db/PeriodehistorikkDaoTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/db/PeriodehistorikkDaoTest.kt index be6e9e57a..cc0129420 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/db/PeriodehistorikkDaoTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/db/PeriodehistorikkDaoTest.kt @@ -1,6 +1,8 @@ package no.nav.helse.db import DatabaseIntegrationTest +import no.nav.helse.modell.periodehistorikk.HistorikkinnslagDto +import no.nav.helse.modell.saksbehandler.SaksbehandlerDto import no.nav.helse.spesialist.api.periodehistorikk.PeriodehistorikkType import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test @@ -15,11 +17,10 @@ class PeriodehistorikkDaoTest : DatabaseIntegrationTest() { opprettVedtaksperiode() opprettOppgave() - periodehistorikkDao.lagre( - PeriodehistorikkType.TOTRINNSVURDERING_TIL_GODKJENNING, - SAKSBEHANDLER_OID, - oppgaveId - ) + val saksbehandler = SaksbehandlerDto(SAKSBEHANDLER_EPOST, SAKSBEHANDLER_OID, SAKSBEHANDLER_NAVN, SAKSBEHANDLER_IDENT) + val historikkinnslag = HistorikkinnslagDto.fjernetFraPåVentInnslag(saksbehandler) + + periodehistorikkDao.lagre(historikkinnslag, oppgaveId) val result = periodehistorikkApiDao.finn(UTBETALING_ID) assertEquals(1, result.size) @@ -42,4 +43,4 @@ class PeriodehistorikkDaoTest : DatabaseIntegrationTest() { assertEquals(1, result.size) } -} \ No newline at end of file +} diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/oppgave/OppgavehenterTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/oppgave/OppgavehenterTest.kt index d62ff2820..449c51003 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/oppgave/OppgavehenterTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/oppgave/OppgavehenterTest.kt @@ -115,6 +115,8 @@ class OppgavehenterTest { override fun finnUtbetalingId(oppgaveId: Long): UUID = throw UnsupportedOperationException() + override fun finnGenerasjonId(oppgaveId: Long): UUID = throw UnsupportedOperationException() + override fun oppgaveDataForAutomatisering(oppgaveId: Long): OppgaveDataForAutomatisering = throw UnsupportedOperationException() override fun finnHendelseId(id: Long): UUID = UUID.randomUUID()