diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostDriftRoutes.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostDriftRoutes.kt index d8b1549b3..67a9cdca3 100644 --- a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostDriftRoutes.kt +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostDriftRoutes.kt @@ -7,6 +7,7 @@ import no.nav.k9punsj.SaksbehandlerRoutes import no.nav.k9punsj.akjonspunkter.AksjonspunktService import no.nav.k9punsj.felles.IkkeStøttetJournalpost import no.nav.k9punsj.felles.IkkeTilgang +import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafDtos import no.nav.k9punsj.journalpost.dto.ResultatDto import no.nav.k9punsj.tilgangskontroll.AuthenticationHandler @@ -23,13 +24,15 @@ import org.springframework.web.reactive.function.server.bodyValueAndAwait import org.springframework.web.reactive.function.server.buildAndAwait import org.springframework.web.reactive.function.server.json import kotlin.coroutines.coroutineContext +import kotlin.math.log @Configuration internal class JournalpostDriftRoutes( private val authenticationHandler: AuthenticationHandler, private val journalpostService: JournalpostService, private val aksjonspunktService: AksjonspunktService, - private val azureGraphService: IAzureGraphService + private val dokarkivGateway: DokarkivGateway, + private val azureGraphService: IAzureGraphService, ) { private companion object { @@ -43,6 +46,7 @@ internal class JournalpostDriftRoutes( internal const val HentHvaSomHarBlittSendtInn = "/journalpost/hentForDebugg/{$JournalpostIdKey}" internal const val LukkJournalposterDebugg = "/journalpost/lukkDebugg" internal const val LukkJournalpostDebugg = "/journalpost/lukkDebugg/{$JournalpostIdKey}" + internal const val FerdigstillJournalpostForDebugg = "/journalpost/ferdigstillDebugg" } @Bean @@ -134,7 +138,7 @@ internal class JournalpostDriftRoutes( .bodyValueAndAwait( ResultatDto( "Alle er ferdig behandlet i punsj eller finnes ikke i punsj: " + - "$alleredeLukketIPunsjTekst $fantIkkeIPunsjTekst" + "$alleredeLukketIPunsjTekst $fantIkkeIPunsjTekst" ) ) } @@ -153,7 +157,7 @@ internal class JournalpostDriftRoutes( .bodyValueAndAwait( ResultatDto( "Alle er ferdig behandlet i punsj, finnes ikke i punsj eller ikke lukket i SAF. " + - "$ikkeLukketISafTekst. $fantIkkeIPunsjTekst $alleredeLukketIPunsjTekst" + "$ikkeLukketISafTekst. $fantIkkeIPunsjTekst $alleredeLukketIPunsjTekst" ) ) } @@ -171,6 +175,45 @@ internal class JournalpostDriftRoutes( } } + POST("/api${Urls.FerdigstillJournalpostForDebugg}") { request -> + RequestContext(coroutineContext, request) { + val journalpostIder = request.journalpostIder().journalpostIder.toSet() + logger.info("Forsøker å ferdigstille journalposter: {}", journalpostIder) + + val journalposterIDb = journalpostService.hentHvisJournalpostMedIder(journalpostIder.toList()) + if (journalposterIDb.isEmpty()) { + logger.info("Fant ingen journalposter i punsj med id {}", journalpostIder) + return@RequestContext ServerResponse.notFound().buildAndAwait() + } + + val (ferdigstilte, ikkeFerdigstilte) = journalposterIDb + .map { journalpostService.hentSafJournalPost(it.key.journalpostId)!! } // Hent saf journalpost + .partition { it.journalstatus == SafDtos.Journalstatus.FERDIGSTILT.name } // Del i ferdigstilte og ikke ferdigstilte + + val (medSakstilknytning, utenSakstilknytning) = ikkeFerdigstilte + .partition { it.sak?.fagsakId != null } // Del i med og uten sakstilknytning + + val ferdigstillJournalposterResponse = medSakstilknytning + .map { dokarkivGateway.ferdigstillJournalpost(it.journalpostId, "9999") } // Ferdigstill journalposter + + val (vellykkedeFerdigstillinger, feiledeFerdigstillinger) = ferdigstillJournalposterResponse + .partition { it.statusCode.is2xxSuccessful } // Del i vellykkede og feilede ferdigstillinger + + val ferdigstillJournalpostResponseDto = FerdigstillJournalpostResponseDto( + vellykketFerdigstilteJournalposter = vellykkedeFerdigstillinger.map { it.toString() }, + feiledeFerdigstillinger = feiledeFerdigstillinger.map { it.toString() }, + ikkeFerdigstiltUtenSakstilknytning = utenSakstilknytning.map { it.journalpostId }, + alleredeFerdigstilteJournalposter = ferdigstilte.map { it.journalpostId } + ) + logger.info("Response: {}", ferdigstillJournalpostResponseDto) + return@RequestContext ServerResponse + .status(HttpStatus.OK) + .bodyValueAndAwait( + ferdigstillJournalpostResponseDto + ) + } + } + GET("/api${Urls.HentHvaSomHarBlittSendtInn}") { request -> RequestContext(coroutineContext, request) { val journalpostId = request.journalpostId() @@ -208,6 +251,13 @@ internal class JournalpostDriftRoutes( } } + private data class FerdigstillJournalpostResponseDto( + val vellykketFerdigstilteJournalposter: List, + val alleredeFerdigstilteJournalposter: List, + val feiledeFerdigstillinger: List, + val ikkeFerdigstiltUtenSakstilknytning: List, + ) + private fun diffTekst(setA: Set, setB: Set, prefix: String): String { val diff = setA.minus(setB) return if (diff.isNotEmpty()) "$prefix: $diff" else "" diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostOpenApi.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostOpenApi.kt index 70808dcc9..f6d78ec5d 100644 --- a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostOpenApi.kt +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostOpenApi.kt @@ -301,4 +301,31 @@ internal class JournalpostOpenApi { @RequestBody body: IdentOgJournalpost ) { } + + @PostMapping(JournalpostDriftRoutes.Urls.FerdigstillJournalpostForDebugg, produces = ["application/json"]) + @ApiResponses( + value = [ + ApiResponse( + responseCode = "200", + description = "Hvis en eller flere journalposter har blitt ferdigstilt" + ), + ApiResponse( + responseCode = "400", + description = "Journalposter som ikke ble funnet i punsj." + ), + ApiResponse( + responseCode = "404", + description = "Ingen av journalpostene eksisterer i punsj" + ) + ] + ) + @Operation( + summary = "Ferdigstiller journalposter som ikke ferdigstilt og som har sakstilknytning", + security = [SecurityRequirement(name = "BearerAuth")], + tags = ["Drift"] + ) + fun FerdigstillJournalposterDebugg( + @RequestBody body: JournalpostRoutes.JournalpostIderRequest + ) { + } }