Skip to content

Commit

Permalink
Setter skjerming ved lagring av oppgavekøer (#2263)
Browse files Browse the repository at this point in the history
* Setter skjerming ved lagring av oppgavekøer for å redusere risiko ved fremtidig utrulling av funksjonalitet

* Migreringskollisjon

* Default not null

* Migreringskollisjon
  • Loading branch information
baskevold authored Aug 1, 2024
1 parent 680dcf8 commit 0b66d24
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ fun Route.OppgaveKoApis() {
if (!pepClient.erOppgaveStyrer()) {
call.respond(HttpStatusCode.Forbidden)
}
call.respond(oppgaveKoRepository.leggTil(opprettOppgaveKoDto.tittel))
val harSkjermetTilgang = pepClient.harTilgangTilKode6()
call.respond(oppgaveKoRepository.leggTil(opprettOppgaveKoDto.tittel, skjermet = harSkjermetTilgang))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ class OppgaveKoTjeneste(
) {
private val log = LoggerFactory.getLogger(OppgaveKoTjeneste::class.java)

fun hentOppgavekøer(): List<OppgaveKo> {
return oppgaveKoRepository.hentListe()
fun hentOppgavekøer(skjermet: Boolean = false): List<OppgaveKo> {
return oppgaveKoRepository.hentListe(skjermet)
}

suspend fun hentOppgaverFraKø(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package no.nav.k9.los.nyoppgavestyring.ko.db

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import kotliquery.*
import no.nav.k9.los.nyoppgavestyring.ko.dto.OppgaveKo
import no.nav.k9.los.nyoppgavestyring.query.dto.query.*
Expand All @@ -24,35 +23,40 @@ class OppgaveKoRepository(val datasource: DataSource) {
objectMapper.writeValueAsString(standardOppgaveQuery)
}

fun hentListe(): List<OppgaveKo> {
fun hentListe(medSkjermet: Boolean = false): List<OppgaveKo> {
return using(sessionOf(datasource)) {
it.transaction { tx -> hentListe(tx) }
it.transaction { tx -> hentListe(tx, medSkjermet) }
}
}

fun hentListe(tx: TransactionalSession): List<OppgaveKo> {
fun hentListe(tx: TransactionalSession, skjermet: Boolean = false): List<OppgaveKo> {
return tx.run(
queryOf(
"SELECT id, versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt FROM OPPGAVEKO_V3"
"""SELECT id, versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt, skjermet
FROM OPPGAVEKO_V3 WHERE skjermet = :medSkjermet""",
mapOf("medSkjermet" to skjermet)
).map { row -> row.tilOppgaveKo(objectMapper, tx) }.asList
)

}

fun hent(oppgaveKoId: Long): OppgaveKo {
return using(sessionOf(datasource)) {
it.transaction { tx -> hent(tx, oppgaveKoId) }
it.transaction { tx -> hent(tx, oppgaveKoId).first }
}
}

fun hent(tx: TransactionalSession, oppgaveKoId: Long): OppgaveKo {
fun hent(tx: TransactionalSession, oppgaveKoId: Long, skjermet: Boolean = false): Pair<OppgaveKo, Boolean> {
return tx.run(
queryOf(
"SELECT id, versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt FROM OPPGAVEKO_V3 WHERE id = :id",
"""SELECT id, versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt, skjermet
FROM OPPGAVEKO_V3
WHERE id = :id AND skjermet = :skjermet""",
mapOf(
"id" to oppgaveKoId
"id" to oppgaveKoId,
"skjermet" to skjermet
)
).map { it.tilOppgaveKo(objectMapper, tx) }.asSingle
).map { it.tilOppgaveKo(objectMapper, tx) to it.boolean("skjermet")}.asSingle
) ?: throw IllegalStateException("Feil ved henting av oppgavekø: $oppgaveKoId")
}

Expand All @@ -69,26 +73,27 @@ class OppgaveKoRepository(val datasource: DataSource) {
)
}

fun leggTil(tittel: String): OppgaveKo {
fun leggTil(tittel: String, skjermet: Boolean): OppgaveKo {
return using(sessionOf(datasource)) { it ->
it.transaction { tx -> leggTil(tx, tittel) }
it.transaction { tx -> leggTil(tx, tittel, skjermet) }
}
}

fun leggTil(tx: TransactionalSession, tittel: String): OppgaveKo {
fun leggTil(tx: TransactionalSession, tittel: String, skjermet: Boolean): OppgaveKo {
val oppgaveKoId = tx.run(
queryOf(
"""
INSERT INTO OPPGAVEKO_V3 (versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt)
VALUES (0, :tittel, '', :query, false, :endret_tidspunkt) RETURNING ID""",
INSERT INTO OPPGAVEKO_V3 (versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt, skjermet)
VALUES (0, :tittel, '', :query, false, :endret_tidspunkt, :skjermet) RETURNING ID""",
mapOf(
"tittel" to tittel,
"query" to standardOppgaveString,
"endret_tidspunkt" to LocalDateTime.now()
"endret_tidspunkt" to LocalDateTime.now(),
"skjermet" to skjermet
)
).map { row -> row.long(1) }.asSingle
) ?: throw IllegalStateException("Feil ved opprettelse av ny oppgavekø.")
return hent(tx, oppgaveKoId);
return hent(tx, oppgaveKoId).first
}

fun endre(oppgaveKo: OppgaveKo): OppgaveKo {
Expand Down Expand Up @@ -133,26 +138,29 @@ class OppgaveKoRepository(val datasource: DataSource) {

lagreKoSaksbehandlere(tx, oppgaveKo)

return hent(tx, oppgaveKo.id)
return hent(tx, oppgaveKo.id).first
}

fun hentKoerMedOppgittSaksbehandler(
tx: TransactionalSession,
saksbehandler_epost: String
saksbehandler_epost: String,
skjermet: Boolean = false
): List<OppgaveKo> {
return tx.run(
queryOf(
"""
select id, versjon, tittel, beskrivelse, query, fritt_valg_av_oppgave, endret_tidspunkt
from OPPGAVEKO_V3 ko
where exists (
where skjermet = :skjermet AND
exists (
select *
from oppgaveko_saksbehandler s
where s.oppgaveko_v3_id = ko.id
and s.saksbehandler_epost = lower(:saksbehandler_epost)
)""",
mapOf(
"saksbehandler_epost" to saksbehandler_epost
"saksbehandler_epost" to saksbehandler_epost,
"skjermet" to skjermet
)
).map { row ->
OppgaveKo(
Expand Down Expand Up @@ -237,8 +245,8 @@ class OppgaveKoRepository(val datasource: DataSource) {
taMedQuery: Boolean,
taMedSaksbehandlere: Boolean
): OppgaveKo {
val gammelOppgaveKo = hent(tx, kopierFraOppgaveId)
val nyOppgaveKo = leggTil(tx, tittel)
val (gammelOppgaveKo, skjermet) = hent(tx, kopierFraOppgaveId)
val nyOppgaveKo = leggTil(tx, tittel, skjermet)

val oppdatertNyOppgaveko = nyOppgaveKo.copy(
oppgaveQuery = if (taMedQuery) gammelOppgaveKo.oppgaveQuery else nyOppgaveKo.oppgaveQuery,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE OPPGAVEKO_V3 ADD COLUMN skjermet BOOLEAN not null default false
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ class K9SakTilLosIT : AbstractK9LosIntegrationTest() {

private fun opprettKøFor(saksbehandler: Saksbehandler, oppgaveQuery: OppgaveQuery): OppgaveKo {
val oppgaveKoRepository = get<OppgaveKoRepository>()
val nyKø = oppgaveKoRepository.leggTil("Test").copy(
val nyKø = oppgaveKoRepository.leggTil("Test", skjermet = false).copy(
saksbehandlere = listOf(saksbehandler.epost),
oppgaveQuery = oppgaveQuery
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ class K9TilbakeTilLosIT : AbstractK9LosIntegrationTest() {

private fun opprettKøFor(saksbehandler: Saksbehandler, oppgaveQuery: OppgaveQuery): OppgaveKo {
val oppgaveKoRepository = get<OppgaveKoRepository>()
val nyKø = oppgaveKoRepository.leggTil("Test").copy(
val nyKø = oppgaveKoRepository.leggTil("Test", skjermet = false).copy(
saksbehandlere = listOf(saksbehandler.epost),
oppgaveQuery = oppgaveQuery
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class OppgaveKoTest : AbstractK9LosIntegrationTest() {
fun `sjekker at oppgavekø kan opprettes og slettes`() {
val oppgaveKoRepository = OppgaveKoRepository(dataSource)

val oppgaveKo = oppgaveKoRepository.leggTil("Testkø")
val oppgaveKo = oppgaveKoRepository.leggTil("Testkø", skjermet = false)
assertThat(oppgaveKo.tittel).isEqualTo("Testkø")

val oppgaveKoFraDb = oppgaveKoRepository.hent(oppgaveKo.id)
Expand All @@ -39,7 +39,7 @@ class OppgaveKoTest : AbstractK9LosIntegrationTest() {
val oppgaveKoRepository = OppgaveKoRepository(dataSource)

val tittel = "Testkø"
val oppgaveKo = oppgaveKoRepository.leggTil(tittel)
val oppgaveKo = oppgaveKoRepository.leggTil(tittel, skjermet = false)
assertThat(oppgaveKo.tittel).isEqualTo(tittel)

val beskrivelse = "En god beskrivelse"
Expand All @@ -54,7 +54,7 @@ class OppgaveKoTest : AbstractK9LosIntegrationTest() {
val oppgaveKoRepository = OppgaveKoRepository(dataSource)

val tittel = "Testkø"
val oppgaveKo = oppgaveKoRepository.leggTil(tittel)
val oppgaveKo = oppgaveKoRepository.leggTil(tittel, skjermet = false)
assertThat(oppgaveKo.tittel).isEqualTo(tittel)

val saksbehandlerepost = "a@b"
Expand All @@ -79,7 +79,7 @@ class OppgaveKoTest : AbstractK9LosIntegrationTest() {

val tittel = "Testkø"
val saksbehandlerepost = "a@b"
val oppgaveKo = oppgaveKoRepository.leggTil(tittel)
val oppgaveKo = oppgaveKoRepository.leggTil(tittel, skjermet = false)
mockLeggTilSaksbehandler(saksbehandlerepost)
val gammelOppgaveko = oppgaveKoRepository.endre(oppgaveKo.copy(saksbehandlere = listOf(saksbehandlerepost)))

Expand Down

0 comments on commit 0b66d24

Please sign in to comment.