Skip to content

Commit

Permalink
EY-5030: Proxy for ferdigstilling og henting av vedtaksbrev. Flytter …
Browse files Browse the repository at this point in the history
…inTransaction til route for å unngå nøsting.
  • Loading branch information
tvsignal committed Feb 20, 2025
1 parent 6139607 commit c910649
Show file tree
Hide file tree
Showing 7 changed files with 365 additions and 151 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ class BrevApiKlientObo(

override suspend fun ferdigstillVedtaksbrev(
behandlingId: UUID,
sakId: SakId,
sakId: SakId, // TODO Fjern ubrukt parameter
brukerTokenInfo: BrukerTokenInfo,
) {
post(
Expand Down
132 changes: 88 additions & 44 deletions apps/etterlatte-behandling/src/main/kotlin/brev/BrevRoute.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import io.ktor.server.routing.get
import io.ktor.server.routing.post
import io.ktor.server.routing.put
import io.ktor.server.routing.route
import kotlinx.coroutines.runBlocking
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.feilhaandtering.krevIkkeNull
import no.nav.etterlatte.libs.ktor.route.BEHANDLINGID_CALL_PARAMETER
import no.nav.etterlatte.libs.ktor.route.behandlingId
Expand All @@ -25,74 +27,116 @@ fun Route.brevRoute(service: BrevService) {
val logger = LoggerFactory.getLogger("BrevRoute")

route("api/behandling/brev/{$BEHANDLINGID_CALL_PARAMETER}/vedtak") {
post {
kunSkrivetilgang {
logger.info("Oppretter vedtaksbrev for behandling (sakId=$sakId, behandlingId=$behandlingId)")
get {
logger.info("Henter vedtaksbrev for behandling (behandlingId=$behandlingId)")

val brev =
measureTimedValue {
service.opprettVedtaksbrev(behandlingId, sakId, brukerTokenInfo)
inTransaction {
runBlocking {
service.hentVedtaksbrev(behandlingId, brukerTokenInfo)
}
}
}.let { (brev, varighet) ->
logger.info("Oppretting av brev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
call.respond(HttpStatusCode.Created, brev)
logger.info("Henting av brev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
brev
}
when (brev) {
null -> call.respond(HttpStatusCode.NoContent)
else -> call.respond(brev)
}
}

get("pdf") {
post {
kunSkrivetilgang {
val brevId =
krevIkkeNull(call.request.queryParameters["brevId"]?.toLong()) {
"Kan ikke generere PDF uten brevId"
val brev =
inTransaction {
logger.info("Oppretter vedtaksbrev for behandling (sakId=$sakId, behandlingId=$behandlingId)")

measureTimedValue {
runBlocking {
service.opprettVedtaksbrev(behandlingId, sakId, brukerTokenInfo)
}
}.let { (brev, varighet) ->
logger.info("Oppretting av brev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
brev
}
}
logger.info("Genererer PDF for vedtaksbrev (id=$brevId)")
call.respond(HttpStatusCode.Created, brev)
}
}

measureTimedValue {
service.genererPdf(brevId, behandlingId, sakId, brukerTokenInfo).bytes
}.let { (pdf, varighet) ->
logger.info("Generering av pdf tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
call.respond(pdf)
}
get("pdf") {
kunSkrivetilgang {
val pdf =
inTransaction {
val brevId =
krevIkkeNull(call.request.queryParameters["brevId"]?.toLong()) {
"Kan ikke generere PDF uten brevId"
}
logger.info("Genererer PDF for vedtaksbrev (id=$brevId)")

measureTimedValue {
runBlocking {
service.genererPdf(brevId, behandlingId, sakId, brukerTokenInfo).bytes
}
}.let { (pdf, varighet) ->
logger.info("Generering av pdf tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
pdf
}
}
call.respond(pdf)
}
}

post("ferdigstill") {
kunSkrivetilgang {
logger.info("Ferdigstiller vedtaksbrev for behandling (id=$behandlingId)")
measureTimedValue {
service.ferdigstillVedtaksbrev(behandlingId, brukerTokenInfo)
}.also { (_, varighet) ->
logger.info("Ferdigstilling av vedtaksbrev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
call.respond(HttpStatusCode.OK)
inTransaction {
logger.info("Ferdigstiller vedtaksbrev for behandling (id=$behandlingId)")
measureTimedValue {
runBlocking {
service.ferdigstillVedtaksbrev(behandlingId, brukerTokenInfo)
}
}.also { (_, varighet) ->
logger.info("Ferdigstilling av vedtaksbrev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
}
}
call.respond(HttpStatusCode.OK)
}
}

put("tilbakestill") {
kunSkrivetilgang {
val brevId =
krevIkkeNull(call.request.queryParameters["brevId"]?.toLong()) {
"Kan ikke tilbakestille PDF uten brevId"
}
val brevType =
krevIkkeNull(call.request.queryParameters["brevType"]) {
"Kan ikke tilbakestille PDF uten brevType"
}.let { Brevtype.valueOf(it) }
val brevPayload =
inTransaction {
val brevId =
krevIkkeNull(call.request.queryParameters["brevId"]?.toLong()) {
"Kan ikke tilbakestille PDF uten brevId"
}
val brevType =
krevIkkeNull(call.request.queryParameters["brevType"]) {
"Kan ikke tilbakestille PDF uten brevType"
}.let { Brevtype.valueOf(it) }

logger.info("Tilbakestiller payload for vedtaksbrev (id=$brevId)")
logger.info("Tilbakestiller payload for vedtaksbrev (id=$brevId)")

measureTimedValue {
service.tilbakestillVedtaksbrev(brevId, behandlingId, sakId, brevType, brukerTokenInfo)
}.let { (brevPayload, varighet) ->
logger.info(
"Oppretting av nytt innhold til brev (id=$brevId) tok ${
varighet.toString(
DurationUnit.SECONDS,
2,
measureTimedValue {
runBlocking {
service.tilbakestillVedtaksbrev(brevId, behandlingId, sakId, brevType, brukerTokenInfo)
}
}.let { (brevPayload, varighet) ->
logger.info(
"Oppretting av nytt innhold til brev (id=$brevId) tok ${
varighet.toString(
DurationUnit.SECONDS,
2,
)
}",
)
}",
)
call.respond(brevPayload)
}
brevPayload
}
}
call.respond(brevPayload)
}
}
}
Expand Down
67 changes: 37 additions & 30 deletions apps/etterlatte-behandling/src/main/kotlin/brev/BrevService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import no.nav.etterlatte.behandling.vedtaksbehandling.VedtaksbehandlingService
import no.nav.etterlatte.behandling.vedtaksbehandling.VedtaksbehandlingType
import no.nav.etterlatte.brev.model.Brev
import no.nav.etterlatte.brev.model.BrevID
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.feilhaandtering.UgyldigForespoerselException
import no.nav.etterlatte.libs.common.feilhaandtering.krevIkkeNull
Expand All @@ -19,8 +18,7 @@ import java.util.UUID

class BrevService(
val vedtaksbehandlingService: VedtaksbehandlingService,
val nyBrevKlient: BrevKlient,
val brevKlient: BrevApiKlient, // Gammel løsning (brev-api bygger brevdata)
val brevApiKlient: BrevApiKlient, // Gammel løsning (brev-api bygger brevdata)
val vedtakKlient: VedtakKlient,
val tilbakekrevingBrevService: TilbakekrevingBrevService,
) {
Expand All @@ -32,25 +30,19 @@ class BrevService(
bruker: BrukerTokenInfo,
): Brev {
if (bruker is Saksbehandler) {
val kanRedigeres =
inTransaction {
vedtaksbehandlingService.erBehandlingRedigerbar(behandlingId)
}
val kanRedigeres = vedtaksbehandlingService.erBehandlingRedigerbar(behandlingId)
if (!kanRedigeres) {
throw KanIkkeOppretteVedtaksbrev(behandlingId)
}
}

val vedtaksbehandlingType =
inTransaction {
vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
}
val vedtaksbehandlingType = vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
return when (vedtaksbehandlingType) {
VedtaksbehandlingType.TILBAKEKREVING ->
tilbakekrevingBrevService.opprettVedtaksbrev(behandlingId, sakId, bruker)

else -> {
println("Kaller opprettVedtaksbrev... $sakId")
brevKlient.opprettVedtaksbrev(behandlingId, sakId, bruker)
brevApiKlient.opprettVedtaksbrev(behandlingId, sakId, bruker)
}
}
}
Expand Down Expand Up @@ -80,15 +72,15 @@ class BrevService(
true
}

val vedtaksbehandlingType =
inTransaction {
vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
}
val vedtaksbehandlingType = vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
return when (vedtaksbehandlingType) {
VedtaksbehandlingType.TILBAKEKREVING ->
tilbakekrevingBrevService.genererPdf(brevID, behandlingId, sakId, bruker, skalLagrePdf)
else ->
brevKlient.genererPdf(brevID, behandlingId, bruker)

else -> {
val pdf = brevApiKlient.genererPdf(brevID, behandlingId, bruker)
pdf
}
}
}

Expand All @@ -111,7 +103,15 @@ class BrevService(
throw SaksbehandlerOgAttestantSammePerson(saksbehandlerIdent, brukerTokenInfo.ident())
}

nyBrevKlient.ferdigstillVedtaksbrev(behandlingId, brukerTokenInfo)
val vedtaksbehandlingType = vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
when (vedtaksbehandlingType) {
VedtaksbehandlingType.TILBAKEKREVING ->
tilbakekrevingBrevService.ferdigstillVedtaksbrev(behandlingId, brukerTokenInfo)

else -> {
brevApiKlient.ferdigstillVedtaksbrev(behandlingId, SakId(1), brukerTokenInfo)
}
}
}

suspend fun tilbakestillVedtaksbrev(
Expand All @@ -122,24 +122,31 @@ class BrevService(
bruker: BrukerTokenInfo,
): BrevPayload {
if (bruker is Saksbehandler) {
val kanRedigeres =
inTransaction {
vedtaksbehandlingService.erBehandlingRedigerbar(behandlingId)
}
val kanRedigeres = vedtaksbehandlingService.erBehandlingRedigerbar(behandlingId)
if (!kanRedigeres) {
throw KanIkkeOppretteVedtaksbrev(behandlingId)
}
}

val vedtaksbehandlingType =
inTransaction {
vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
}
val vedtaksbehandlingType = vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
return when (vedtaksbehandlingType) {
VedtaksbehandlingType.TILBAKEKREVING ->
tilbakekrevingBrevService.tilbakestillVedtaksbrev(brevID, behandlingId, sakId, bruker)

else ->
brevApiKlient.tilbakestillVedtaksbrev(brevID, behandlingId, sakId, brevType, bruker)
}
}

suspend fun hentVedtaksbrev(
behandlingId: UUID,
bruker: BrukerTokenInfo,
): Brev? {
val vedtaksbehandlingType = vedtaksbehandlingService.hentVedtaksbehandling(behandlingId).type
return when (vedtaksbehandlingType) {
VedtaksbehandlingType.TILBAKEKREVING ->
tilbakekrevingBrevService.hentVedtaksbrev(behandlingId, bruker)
else ->
brevKlient.tilbakestillVedtaksbrev(brevID, behandlingId, sakId, brevType, bruker)
brevApiKlient.hentVedtaksbrev(behandlingId, bruker)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.etterlatte.brev
import com.fasterxml.jackson.module.kotlin.readValue
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import no.nav.etterlatte.behandling.klienter.BrevApiKlient
import no.nav.etterlatte.behandling.klienter.VedtakKlient
import no.nav.etterlatte.brev.behandling.Soeker
import no.nav.etterlatte.brev.behandling.erOver18
Expand All @@ -18,7 +19,6 @@ import no.nav.etterlatte.brev.model.tilbakekreving.TilbakekrevingBrevInnholdData
import no.nav.etterlatte.brev.model.tilbakekreving.TilbakekrevingDataNy
import no.nav.etterlatte.brev.model.tilbakekreving.TilbakekrevingPeriodeDataNy
import no.nav.etterlatte.grunnlag.GrunnlagService
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.behandling.BrevutfallDto
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
Expand Down Expand Up @@ -49,6 +49,7 @@ import java.util.UUID
class TilbakekrevingBrevService(
val sakService: SakService,
val brevKlient: BrevKlient,
val brevApiKlient: BrevApiKlient,
val vedtakKlient: VedtakKlient,
val grunnlagService: GrunnlagService,
) {
Expand Down Expand Up @@ -103,17 +104,26 @@ class TilbakekrevingBrevService(
)
}

suspend fun ferdigstillVedtaksbrev(
behandlingId: UUID,
brukerTokenInfo: BrukerTokenInfo,
) {
brevKlient.ferdigstillVedtaksbrev(behandlingId, brukerTokenInfo)
}

suspend fun hentVedtaksbrev(
behandlingId: UUID,
bruker: BrukerTokenInfo,
): Brev? = brevApiKlient.hentVedtaksbrev(behandlingId, bruker)

private suspend fun utledBrevRequest(
bruker: BrukerTokenInfo,
behandlingId: UUID,
sakId: SakId,
skalLagres: Boolean = false,
): BrevRequest =
coroutineScope {
val sak =
inTransaction {
sakService.finnSak(sakId) ?: throw InternfeilException("Fant ikke sak med id=$sakId")
}
val sak = sakService.finnSak(sakId) ?: throw InternfeilException("Fant ikke sak med id=$sakId")

val vedtakDeferred =
async {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -598,11 +598,12 @@ internal class ApplicationContext(
TilbakekrevingBrevService(
sakService,
brevKlient,
brevApiKlient,
vedtakKlient,
grunnlagService,
)
val brevService =
BrevService(vedtaksbehandlingService, brevKlient, brevApiKlient, vedtakKlient, tilbakekrevingBrevService)
BrevService(vedtaksbehandlingService, brevApiKlient, vedtakKlient, tilbakekrevingBrevService)

val tilbakekrevingService =
TilbakekrevingService(
Expand Down
Loading

0 comments on commit c910649

Please sign in to comment.