Skip to content

Commit

Permalink
De fleste OppgaveApi-kall ferdig portet. Grønne tester
Browse files Browse the repository at this point in the history
  • Loading branch information
boerta committed Oct 6, 2023
1 parent 07e62f9 commit cf275a2
Show file tree
Hide file tree
Showing 25 changed files with 738 additions and 243 deletions.
18 changes: 14 additions & 4 deletions src/main/kotlin/no/nav/k9/los/KoinProfiles.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import no.nav.k9.los.integrasjon.sakogbehandling.SakOgBehandlingProducer
import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.OmrådeSetup
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.klagetillos.K9KlageTilLosAdapterTjeneste
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering.ReservasjonOversetter
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerInterfaceKludge
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerKlient
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakBerikerKlientLocal
Expand Down Expand Up @@ -278,7 +279,18 @@ fun common(app: Application, config: Configuration) = module {
pepClient = get(),
azureGraphService = get(),
statistikkRepository = get(),
omsorgspengerService = get()
omsorgspengerService = get(),
reservasjonOversetter = get()
)
}

single {
ReservasjonOversetter(
transactionalManager = get(),
oppgaveV3Repository = get(),
oppgavetypeRepository = get(),
saksbehandlerRepository = get(),
reservasjonV3Tjeneste = get(),
)
}

Expand Down Expand Up @@ -482,12 +494,10 @@ fun common(app: Application, config: Configuration) = module {
ReservasjonV3Tjeneste(
transactionalManager = get(),
reservasjonV3Repository = get(),
oppgaveKoRepository = get(),
oppgaveQueryService = get(),
oppgaveRepository = get(),
pepClient = get(),
saksbehandlerRepository = get(),
auditlogger = get()
auditlogger = Auditlogger(config)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,7 @@ class ReservasjonKonverteringJobb(
private val config: Configuration,
private val reservasjonRepository: ReservasjonRepository,
private val oppgaveRepository: OppgaveRepository,
private val reservasjonV3Repository: ReservasjonV3Repository,
private val reservasjonV3Tjeneste: ReservasjonV3Tjeneste,
private val oppgaveV3Repository: OppgaveV3Repository,
private val oppgavetypeRepository: OppgavetypeRepository,
private val saksbehandlerRepository: SaksbehandlerRepository,
private val transactionalManager: TransactionalManager,
private val reservasjonOversetter: ReservasjonOversetter,
) {

private val log: Logger = LoggerFactory.getLogger(ReservasjonKonverteringJobb::class.java)
Expand All @@ -49,7 +44,7 @@ class ReservasjonKonverteringJobb(
private fun spillAvReservasjoner() {

log.info("Stareter avspilling av reservasjoner")
val tidKjøringStartet = System.currentTimeMillis()
val tidKjøringStartet = System.currentTimeMillis() //TODO: Telleverk og logge fremdrift

val reservasjonIder = reservasjonRepository.hentAlleReservasjonUUID()
log.info("Fant ${reservasjonIder.size} behandlinger")
Expand All @@ -61,105 +56,12 @@ class ReservasjonKonverteringJobb(
return //Logisk slettet reservasjon. Migreres ikke
}
val oppgaveV1 = oppgaveRepository.hent(reservasjonV1.oppgave)
transactionalManager.transaction { tx ->
val gammelReservasjon = reservasjonRepository.hentSisteReservasjonMedLås(gammelReservasjonUuid, tx)
when (oppgaveV1.system) {
"K9SAK" -> {
val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave(
oppgaveV1.eksternId.toString(),
oppgavetypeRepository.hentOppgavetype("K9", "k9sak"),
tx
)
?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.")

reserverOppgavetypeSomErStøttetIV3(
oppgaveV3,
gammelReservasjon
)
}

"K9KLAGE" -> {
val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave(
oppgaveV1.eksternId.toString(),
oppgavetypeRepository.hentOppgavetype("K9", "k9sak"),
tx
)
?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.")

reserverOppgavetypeSomErStøttetIV3(
oppgaveV3,
gammelReservasjon
)
}

else -> {
reserverOppgavetypeSomIkkeErStøttetIV3(oppgaveV1.eksternId.toString(), gammelReservasjon)
}
}
}
}
}

private fun reserverOppgavetypeSomIkkeErStøttetIV3(
oppgaveEksternId: String,
gammelReservasjon: Reservasjon
) {
val gyldigFra = if (gammelReservasjon.reservertTil!!.isAfter(LocalDateTime.now())) {
LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover()
} else {
gammelReservasjon.reservertTil!!.minusHours(24).forskyvReservasjonsDatoBakover()
}

val reservertAv = runBlocking {
saksbehandlerRepository.finnSaksbehandlerMedIdent(
gammelReservasjon.reservertAv
)!!
}

val flyttetAv = runBlocking {
gammelReservasjon.flyttetAv?.let {flyttetAv ->
saksbehandlerRepository.finnSaksbehandlerMedIdent(flyttetAv)!!
}
}

reservasjonV3Tjeneste.taReservasjon(
reservasjonsnøkkel = "legacy_$oppgaveEksternId",
reserverForId = reservertAv.id!!,
gyldigFra = gyldigFra,
gyldigTil = gammelReservasjon.reservertTil!!,
utføresAvId = flyttetAv?.let { it.id!! } ?: reservertAv.id!!,
)
}

private fun reserverOppgavetypeSomErStøttetIV3(
oppgave: OppgaveV3,
gammelReservasjon: Reservasjon
) {
val reservertAv = runBlocking {
saksbehandlerRepository.finnSaksbehandlerMedEpost(
gammelReservasjon.flyttetAv ?: gammelReservasjon.reservertAv
)
}!!

val gyldigFra = if (gammelReservasjon.reservertTil!!.isAfter(LocalDateTime.now())) {
LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover()
} else {
gammelReservasjon.reservertTil!!.minusHours(24).forskyvReservasjonsDatoBakover()
}

val flyttetAv = runBlocking {
gammelReservasjon.flyttetAv?.let {flyttetAv ->
saksbehandlerRepository.finnSaksbehandlerMedIdent(flyttetAv)!!
}
}

runBlocking {
reservasjonV3Tjeneste.taReservasjon(
reservasjonsnøkkel = oppgave.reservasjonsnøkkel,
reserverForId = reservertAv.id!!,
gyldigFra = gyldigFra,
gyldigTil = gammelReservasjon.reservertTil!!,
utføresAvId = flyttetAv?.let { it.id!! } ?: reservertAv.id!!,
reservasjonOversetter.taNyReservasjonFraGammelKontekst(
oppgaveV1 = oppgaveV1,
reservertAvEpost = reservasjonV1.reservertAv,
reservertTil = reservasjonV1.reservertTil!!,
utførtAvIdent = reservasjonV1.flyttetAv,
kommentar = reservasjonV1.begrunnelse,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.reservasjonkonvertering

import kotlinx.coroutines.runBlocking
import no.nav.k9.los.domene.lager.oppgave.Oppgave
import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager
import no.nav.k9.los.domene.repository.SaksbehandlerRepository
import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3
import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Repository
import no.nav.k9.los.nyoppgavestyring.mottak.oppgavetype.OppgavetypeRepository
import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3
import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Tjeneste
import no.nav.k9.los.tjenester.saksbehandler.oppgave.forskyvReservasjonsDatoBakover
import java.time.LocalDateTime

class ReservasjonOversetter(
private val transactionalManager: TransactionalManager,
private val oppgaveV3Repository: OppgaveV3Repository,
private val oppgavetypeRepository: OppgavetypeRepository,
private val saksbehandlerRepository: SaksbehandlerRepository,
private val reservasjonV3Tjeneste: ReservasjonV3Tjeneste
) {

fun taNyReservasjonFraGammelKontekst(
oppgaveV1: Oppgave,
reservertAvEpost: String,
reservertTil: LocalDateTime,
utførtAvIdent: String?,
kommentar: String?
)
: ReservasjonV3 {
return transactionalManager.transaction { tx ->
when (oppgaveV1.system) {
"K9SAK" -> {
val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave(
oppgaveV1.eksternId.toString(),
oppgavetypeRepository.hentOppgavetype("K9", "k9sak"),
tx
)
?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.")

reserverOppgavetypeSomErStøttetIV3(
oppgaveV3,
reservertAvEpost = reservertAvEpost,
reservertTil = reservertTil,
utførtAvIdent = utførtAvIdent,
kommentar = kommentar,
)
}

"K9KLAGE" -> {
val oppgaveV3 = oppgaveV3Repository.hentAktivOppgave(
oppgaveV1.eksternId.toString(),
oppgavetypeRepository.hentOppgavetype("K9", "k9sak"),
tx
)
?: throw IllegalStateException("ReservasjonV1 for kjent oppgavetype SKAL ha oppgave i OppgaveV3.")

reserverOppgavetypeSomErStøttetIV3(
oppgaveV3,
reservertAvEpost = reservertAvEpost,
reservertTil = reservertTil,
utførtAvIdent = utførtAvIdent,
kommentar = kommentar,
)
}

else -> {
reserverOppgavetypeSomIkkeErStøttetIV3(
oppgaveV1.eksternId.toString(),
reservertAvEpost = reservertAvEpost,
reservertTil = reservertTil,
utførtAvIdent = utførtAvIdent,
kommentar = kommentar,
)
}
}
}
}

private fun reserverOppgavetypeSomIkkeErStøttetIV3(
oppgaveEksternId: String,
reservertAvEpost: String,
reservertTil: LocalDateTime,
utførtAvIdent: String?,
kommentar: String?
) : ReservasjonV3 {
val gyldigFra = if (reservertTil.isAfter(LocalDateTime.now())) {
LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover()
} else {
reservertTil!!.minusHours(24).forskyvReservasjonsDatoBakover()
}

val reservertAv = runBlocking {
saksbehandlerRepository.finnSaksbehandlerMedIdent(reservertAvEpost)!!
}

val utførtAv = runBlocking {
utførtAvIdent?.let { utførtAvIdent ->
saksbehandlerRepository.finnSaksbehandlerMedIdent(utførtAvIdent)!!
}
}

return reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv(
reservasjonsnøkkel = "legacy_$oppgaveEksternId",
reserverForId = reservertAv.id!!,
gyldigFra = gyldigFra,
gyldigTil = reservertTil,
utføresAvId = utførtAv?.let { it.id!! } ?: reservertAv.id!!,
kommentar = kommentar ?: ""
)
}

private fun reserverOppgavetypeSomErStøttetIV3(
oppgave: OppgaveV3,
reservertAvEpost: String,
reservertTil: LocalDateTime,
utførtAvIdent: String?,
kommentar: String?
) : ReservasjonV3 {
val reservertAv = runBlocking {
saksbehandlerRepository.finnSaksbehandlerMedEpost(
reservertAvEpost
)
}!!

val gyldigFra = if (reservertTil.isAfter(LocalDateTime.now())) {
LocalDateTime.now().minusHours(24).forskyvReservasjonsDatoBakover()
} else {
reservertTil.minusHours(24).forskyvReservasjonsDatoBakover()
}

val flyttetAv = runBlocking {
utførtAvIdent?.let { flyttetAv ->
saksbehandlerRepository.finnSaksbehandlerMedIdent(flyttetAv)!!
}
}

return runBlocking {
reservasjonV3Tjeneste.forsøkReservasjonOgReturnerAktiv(
reservasjonsnøkkel = oppgave.reservasjonsnøkkel,
reserverForId = reservertAv.id!!,
gyldigFra = gyldigFra,
gyldigTil = reservertTil,
utføresAvId = flyttetAv?.let { it.id!! } ?: reservertAv.id!!,
kommentar = kommentar ?: ""
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package no.nav.k9.los.nyoppgavestyring.feilhandtering

class FinnerIkkeDataException(message: String, cause: Throwable? = null): IllegalArgumentException(message, cause)
13 changes: 13 additions & 0 deletions src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository
import no.nav.k9.los.nyoppgavestyring.ko.dto.KopierOppgaveKoDto
import no.nav.k9.los.nyoppgavestyring.ko.dto.OppgaveKo
import no.nav.k9.los.nyoppgavestyring.ko.dto.OpprettOppgaveKoDto
import no.nav.k9.los.nyoppgavestyring.query.db.OppgaveQueryRepository
import org.koin.java.KoinJavaComponent
import org.koin.ktor.ext.inject
import java.util.*

fun Route.OppgaveKoApis() {
val requestContextService by inject<RequestContextService>()
val oppgaveKoRepository by inject<OppgaveKoRepository>()
val oppgaveKoTjeneste by inject<OppgaveKoTjeneste>()
val pepClient by KoinJavaComponent.inject<IPepClient>(IPepClient::class.java)

@Location("/")
Expand Down Expand Up @@ -88,6 +90,17 @@ fun Route.OppgaveKoApis() {
}
}

@Location("/{id}/oppgaver")
data class OppgaveKoId(val id: String)

get { oppgaveKoId: OppgaveKoId ->
requestContextService.withRequestContext(call) {
if (pepClient.harTilgangTilReservingAvOppgaver()) { //TODO: Hvilke felter vil vi eksponere her?
oppgaveKoTjeneste.hentOppgaverFraKø(oppgaveKoId.id.toLong())
}
}
}

@Location("")
class endreOppgaveKo

Expand Down
Loading

0 comments on commit cf275a2

Please sign in to comment.