Skip to content

Commit

Permalink
Lagt på kall til tilgang ved reservasjon og trukket ut felles reserva…
Browse files Browse the repository at this point in the history
…sjonskode i egen service.
  • Loading branch information
frodeli committed Sep 23, 2024
1 parent 126bffa commit d961a67
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package no.nav.aap.oppgave
import no.nav.aap.oppgave.opprett.Avklaringsbehovtype
import java.util.UUID

data class OppgaveReferanseDto(
data class AvklaringsbehovReferanseDto(
val saksnummer: String? = null,
val referanse: UUID? = null,
val journalpostId: Long? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.aap.oppgave

data class FlyttOppgaveDto(
val oppgaveReferanseDto: OppgaveReferanseDto,
val avklaringsbehovReferanse: AvklaringsbehovReferanseDto,
val flyttTilIdent: String
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package no.nav.aap.oppgave.plukk

import no.nav.aap.oppgave.AvklaringsbehovReferanseDto
import no.nav.aap.oppgave.verdityper.OppgaveId
import java.util.UUID

data class NesteOppgaveDto(
val oppgaveId: OppgaveId,
val saksnummer: String?,
val behandlingRef: UUID?,
val journalpostId: Long?,
val avklaringsbehovKode: String
val avklaringsbehovReferanse: AvklaringsbehovReferanseDto,
)
36 changes: 9 additions & 27 deletions app/src/main/kotlin/no/nav/aap/oppgave/OppgaveAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import com.papsign.ktor.openapigen.route.response.respond
import com.papsign.ktor.openapigen.route.route
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import no.nav.aap.komponenter.dbconnect.transaction
import no.nav.aap.komponenter.httpklient.auth.token
import no.nav.aap.oppgave.metriker.httpCallCounter
import no.nav.aap.oppgave.plukk.ReserverOppgaveService
import no.nav.aap.oppgave.server.authenticate.ident
import no.nav.aap.oppgave.verdityper.OppgaveId
import javax.sql.DataSource
Expand All @@ -24,17 +26,11 @@ fun NormalOpenAPIRoute.mineOppgaverApi(dataSource: DataSource, prometheus: Prome

fun NormalOpenAPIRoute.avsluttOppgave(dataSource: DataSource, prometheus: PrometheusMeterRegistry) =

route("/avslutt-oppgave").post<Unit, List<OppgaveId>, OppgaveReferanseDto> { _, dto ->
route("/avslutt-oppgave").post<Unit, List<OppgaveId>, AvklaringsbehovReferanseDto> { _, dto ->
prometheus.httpCallCounter("/avslutt-oppgave").increment()
val oppgaver = dataSource.transaction { connection ->
val innloggetBrukerIdent = ident()
val oppgaverSomSkalAvsluttes = OppgaveRepository(connection).hentOppgaverForReferanse(
dto.saksnummer,
dto.referanse,
dto.journalpostId,
dto.avklaringsbehovtype,
innloggetBrukerIdent
)
val oppgaverSomSkalAvsluttes = OppgaveRepository(connection).hentOppgaver(dto)
oppgaverSomSkalAvsluttes.forEach {
OppgaveRepository(connection).avsluttOppgave(it,innloggetBrukerIdent)
}
Expand All @@ -45,16 +41,10 @@ fun NormalOpenAPIRoute.avsluttOppgave(dataSource: DataSource, prometheus: Promet

fun NormalOpenAPIRoute.avreserverOppgave(dataSource: DataSource, prometheus: PrometheusMeterRegistry) =

route("/avreserver-oppgave").post<Unit, List<OppgaveId>, OppgaveReferanseDto> { _, dto ->
route("/avreserver-oppgave").post<Unit, List<OppgaveId>, AvklaringsbehovReferanseDto> { _, dto ->
prometheus.httpCallCounter("avreserver-oppgave").increment()
val oppgaver = dataSource.transaction { connection ->
val oppgaverSomSkalAvreserveres = OppgaveRepository(connection).hentOppgaverForReferanse(
dto.saksnummer,
dto.referanse,
dto.journalpostId,
dto.avklaringsbehovtype,
ident()
)
val oppgaverSomSkalAvreserveres = OppgaveRepository(connection).hentOppgaver(dto)
oppgaverSomSkalAvreserveres.forEach {
OppgaveRepository(connection).avreserverOppgave(it, ident())
}
Expand All @@ -71,17 +61,9 @@ fun NormalOpenAPIRoute.flyttOppgave(dataSource: DataSource, prometheus: Promethe

val oppgaver = dataSource.transaction { connection ->
val innloggetBrukerIdent = ident()
val oppgaverSomSkalFlyttes = OppgaveRepository(connection).hentOppgaverForReferanse(
dto.oppgaveReferanseDto.saksnummer,
dto.oppgaveReferanseDto.referanse,
dto.oppgaveReferanseDto.journalpostId,
dto.oppgaveReferanseDto.avklaringsbehovtype,
innloggetBrukerIdent
)
oppgaverSomSkalFlyttes.forEach {
OppgaveRepository(connection).reserverOppgave(it, innloggetBrukerIdent, dto.flyttTilIdent)
}
oppgaverSomSkalFlyttes
val token = token()
val reserverOppgaveService = ReserverOppgaveService(connection)
reserverOppgaveService.reserverOppgave(dto.avklaringsbehovReferanse, innloggetBrukerIdent, token)
}
respond(oppgaver)

Expand Down
43 changes: 26 additions & 17 deletions app/src/main/kotlin/no/nav/aap/oppgave/OppgaveRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import no.nav.aap.oppgave.plukk.NesteOppgaveDto
import no.nav.aap.oppgave.verdityper.AvklaringsbehovKode
import no.nav.aap.oppgave.verdityper.OppgaveId
import no.nav.aap.oppgave.verdityper.Status
import java.util.UUID
import org.slf4j.LoggerFactory

private val log = LoggerFactory.getLogger(OppgaveRepository::class.java)

class OppgaveRepository(private val connection: DBConnection) {

Expand Down Expand Up @@ -101,10 +103,12 @@ class OppgaveRepository(private val connection: DBConnection) {
setRowMapper {
NesteOppgaveDto(
oppgaveId = OppgaveId(it.getLong("ID")),
saksnummer = it.getStringOrNull("SAKSNUMMER"),
behandlingRef = it.getUUIDOrNull("BEHANDLING_REF"),
journalpostId = it.getLongOrNull("JOURNALPOST_ID"),
avklaringsbehovKode = it.getString("AVKLARINGSBEHOV_TYPE")
AvklaringsbehovReferanseDto(
saksnummer = it.getStringOrNull("SAKSNUMMER"),
referanse = it.getUUIDOrNull("BEHANDLING_REF"),
journalpostId = it.getLongOrNull("JOURNALPOST_ID"),
avklaringsbehovtype = Avklaringsbehovtype.fraKode(it.getString("AVKLARINGSBEHOV_TYPE"))
)
)
}
}
Expand Down Expand Up @@ -179,10 +183,13 @@ class OppgaveRepository(private val connection: DBConnection) {
}
}

fun hentOppgaverForReferanse(saksnummer: String?, referanse: UUID?, journalpostId: Long?, avklaringsbehovtype: Avklaringsbehovtype, ident: String): List<OppgaveId> {
val saksnummerClause = if (saksnummer != null) "SAKSNUMMER = ?" else "SAKSNUMMER IS NULL"
val referanseClause = if (referanse != null) "BEHANDLING_REF = ?" else "BEHANDLING_REF IS NULL"
val journalpostIdClause = if (journalpostId != null) "JOURNALPOST_ID = ?" else "JOURNALPOST_ID IS NULL"
/**
* Hent oppgaver som ikke er avsluttet.
*/
fun hentOppgaver(avklaringsbehovReferanse: AvklaringsbehovReferanseDto): List<OppgaveId> {
val saksnummerClause = if (avklaringsbehovReferanse.saksnummer != null) "SAKSNUMMER = ?" else "SAKSNUMMER IS NULL"
val referanseClause = if (avklaringsbehovReferanse.referanse != null) "BEHANDLING_REF = ?" else "BEHANDLING_REF IS NULL"
val journalpostIdClause = if (avklaringsbehovReferanse.journalpostId != null) "JOURNALPOST_ID = ?" else "JOURNALPOST_ID IS NULL"
val oppgaverForReferanseQuery = """
SELECT
ID
Expand All @@ -193,23 +200,25 @@ class OppgaveRepository(private val connection: DBConnection) {
$referanseClause AND
$journalpostIdClause AND
AVKLARINGSBEHOV_TYPE = ? AND
STATUS != 'AVSLUTTET' AND
RESERVERT_AV = ?
STATUS != 'AVSLUTTET'
""".trimIndent()

return connection.queryList<OppgaveId>(oppgaverForReferanseQuery) {
val oppgaver = connection.queryList<OppgaveId>(oppgaverForReferanseQuery) {
setParams {
var index = 1
if (saksnummer != null) setString(index++, saksnummer)
if (referanse != null) setUUID(index++, referanse)
if (journalpostId != null ) setLong(index++, journalpostId)
setString(index++, avklaringsbehovtype.kode)
setString(index++, ident)
if (avklaringsbehovReferanse.saksnummer != null) setString(index++, avklaringsbehovReferanse.saksnummer)
if (avklaringsbehovReferanse.referanse != null) setUUID(index++, avklaringsbehovReferanse.referanse)
if (avklaringsbehovReferanse.journalpostId != null ) setLong(index++, avklaringsbehovReferanse.journalpostId)
setString(index++, avklaringsbehovReferanse.avklaringsbehovtype.kode)
}
setRowMapper { row ->
OppgaveId(row.getLong("ID"))
}
}
if (oppgaver.size > 1) {
log.warn("Hent oppgaver skal ikke returnere mer en 1 oppgave. Kall med $avklaringsbehovReferanse fant ${oppgaver.size} oppgaver.")
}
return oppgaver
}

private fun FilterDto.whereClause(): String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ class PlukkOppgaveService(val connection: DBConnection) {
val nesteOppgave = oppgaveRepo.finnNesteOppgave(filter)
if (nesteOppgave != null) {
val tilgangRequest = TilgangRequest(
saksnummer = nesteOppgave.saksnummer!!,
behandlingsreferanse = nesteOppgave.behandlingRef!!.toString(),
avklaringsbehovKode = nesteOppgave.avklaringsbehovKode,
saksnummer = nesteOppgave.avklaringsbehovReferanse.saksnummer!!,
behandlingsreferanse = nesteOppgave.avklaringsbehovReferanse.referanse?.toString(),
avklaringsbehovKode = nesteOppgave.avklaringsbehovReferanse.avklaringsbehovtype.kode,
operasjon = Operasjon.SAKSBEHANDLE
)
if (TilgangGateway.harTilgang(tilgangRequest, token)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package no.nav.aap.oppgave.plukk

import no.nav.aap.komponenter.dbconnect.DBConnection
import no.nav.aap.komponenter.httpklient.httpclient.tokenprovider.OidcToken
import no.nav.aap.oppgave.AvklaringsbehovReferanseDto
import no.nav.aap.oppgave.OppgaveRepository
import no.nav.aap.oppgave.verdityper.OppgaveId
import tilgang.Operasjon
import tilgang.TilgangRequest

class ReserverOppgaveService(val connection: DBConnection) {

fun reserverOppgave(avklaringsbehovReferanse: AvklaringsbehovReferanseDto, ident: String, token: OidcToken): List<OppgaveId> {
val oppgaveRepo = OppgaveRepository(connection)
val oppgaverSomSkalReserveres = oppgaveRepo.hentOppgaver(avklaringsbehovReferanse)
val tilgangRequest = TilgangRequest(
saksnummer = avklaringsbehovReferanse.saksnummer,
behandlingsreferanse = avklaringsbehovReferanse.referanse?.toString(),
avklaringsbehovKode = avklaringsbehovReferanse.avklaringsbehovtype.kode,
operasjon = Operasjon.SAKSBEHANDLE
)
if (TilgangGateway.harTilgang(tilgangRequest, token)) {
val oppgaveRepo = OppgaveRepository(connection)
oppgaverSomSkalReserveres.forEach {
oppgaveRepo.reserverOppgave(OppgaveId(it.id), ident, ident)
}
return oppgaverSomSkalReserveres
}
return listOf()
}

}
2 changes: 1 addition & 1 deletion app/src/test/kotlin/no/nav/aap/oppgave/ApiTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ class ApiTest {
private fun avsluttOppgave(saksnummer: String, referanse: UUID, avklaringsbehovtype: Avklaringsbehovtype): List<OppgaveId> {
val oppgaveIder: List<OppgaveId>? = client.post(
URI.create("http://localhost:8080/avslutt-oppgave"),
PostRequest(body = OppgaveReferanseDto(
PostRequest(body = AvklaringsbehovReferanseDto(
saksnummer = saksnummer,
referanse = referanse,
journalpostId = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.aap.oppgave
import no.nav.aap.komponenter.dbconnect.transaction
import no.nav.aap.komponenter.dbtest.InitTestDatabase
import no.nav.aap.oppgave.filter.FilterDto
import no.nav.aap.oppgave.opprett.Avklaringsbehovtype
import no.nav.aap.oppgave.verdityper.AvklaringsbehovKode
import no.nav.aap.oppgave.verdityper.OppgaveId
import no.nav.aap.oppgave.verdityper.Status
Expand Down Expand Up @@ -47,10 +48,10 @@ class OppgaveRepositoryTest {

@Test
fun `Finn neste oppgave finner en oppgave fordi en av oppgavene matcher filter`() {
opprettOppgave(avklaringsbehovKode = AvklaringsbehovKode("2000"))
opprettOppgave(avklaringsbehovKode = AvklaringsbehovKode("3000"))
opprettOppgave(avklaringsbehovKode = AvklaringsbehovKode(Avklaringsbehovtype.AVKLAR_SYKDOM.kode))
opprettOppgave(avklaringsbehovKode = AvklaringsbehovKode(Avklaringsbehovtype.AVKLAR_STUDENT.kode))
InitTestDatabase.dataSource.transaction { connection ->
val oppgaveId = OppgaveRepository(connection).finnNesteOppgave(filter("3000"))
val oppgaveId = OppgaveRepository(connection).finnNesteOppgave(filter(Avklaringsbehovtype.AVKLAR_STUDENT.kode))
assertThat(oppgaveId).isNotNull()
}
}
Expand Down

0 comments on commit d961a67

Please sign in to comment.