From f22b8bace6074120f824f1e7feeaa615995e79ff Mon Sep 17 00:00:00 2001 From: Alexander Hoem Rosbach Date: Wed, 11 Sep 2024 13:23:44 +0200 Subject: [PATCH 1/4] Bytt til q2 azuread for lokal skribenten --- docker-compose.yml | 4 ++-- pensjon-brevbaker/.nais/dev.yaml | 3 --- skribenten-backend/fetch-secrets.sh | 3 ++- tjenestebuss-integrasjon/.nais/azure-ad-app-lokal.yml | 2 +- tjenestebuss-integrasjon/.nais/dev-q2.yaml | 3 --- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 91a3399b7..ec8ba96ef 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,7 @@ services: - AZURE_OPENID_CONFIG_JWKS_URI=https://login.microsoftonline.com/966ac572-f5b7-4bbe-aa88-c76419c0f851/discovery/v2.0/keys - AZURE_OPENID_CONFIG_ISSUER=https://login.microsoftonline.com/966ac572-f5b7-4bbe-aa88-c76419c0f851/v2.0 - AZURE_APP_CLIENT_ID=66a118a6-95db-4a64-be81-3af02048a46e - - AZURE_APP_PRE_AUTHORIZED_APPS=[{"name":"skribenten-backend-lokal","clientId":"d8057f3d-871b-4ea9-973e-f5facdc04590"}] + - AZURE_APP_PRE_AUTHORIZED_APPS=[{"name":"skribenten-backend","clientId":"adce3431-deeb-422f-959c-298b644b7611"}] # Allows requests without auth-header #opens up debug port - JAVA_TOOL_OPTIONS=-Dio.ktor.development=true -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 build: ./pensjon-brevbaker @@ -133,7 +133,7 @@ services: EXPRESS_PORT: "8084" EXPRESS_HOST: "::" SKRIBENTEN_API_URL: "http://skribenten-backend:8080" - SKRIBENTEN_API_SCOPE: "api://dev-gcp.pensjonsbrev.skribenten-backend-lokal/.default" + SKRIBENTEN_API_SCOPE: "api://dev-gcp.pensjonsbrev.skribenten-backend/.default" brevoppskrift: profiles: diff --git a/pensjon-brevbaker/.nais/dev.yaml b/pensjon-brevbaker/.nais/dev.yaml index 9c651ee90..e8bec0eae 100644 --- a/pensjon-brevbaker/.nais/dev.yaml +++ b/pensjon-brevbaker/.nais/dev.yaml @@ -25,9 +25,6 @@ preAuthorized: - name: locust namespace: pensjonsbrev cluster: dev-gcp - - name: skribenten-backend-lokal - namespace: pensjonsbrev - cluster: dev-gcp - name: skribenten-backend namespace: pensjonsbrev cluster: dev-gcp diff --git a/skribenten-backend/fetch-secrets.sh b/skribenten-backend/fetch-secrets.sh index c8cbb0999..b8d6f5425 100755 --- a/skribenten-backend/fetch-secrets.sh +++ b/skribenten-backend/fetch-secrets.sh @@ -46,7 +46,8 @@ which base64 || ( ) || exit 1 mkdir -p secrets -kubectl --context $KUBE_CLUSTER -n pensjonsbrev get secret azure-skribenten-backend-lokal -o json | jq '.data | map_values(@base64d)' > secrets/azuread.json +secret_name="$(kubectl --context $KUBE_CLUSTER -n pensjonsbrev get azureapp skribenten-backend -o=jsonpath='{.spec.secretName}')" +kubectl --context $KUBE_CLUSTER -n pensjonsbrev get secret "${secret_name}" -o json | jq '.data | map_values(@base64d)' > secrets/azuread.json echo "Creating azuread.env file from azuread.json..." jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' secrets/azuread.json > secrets/azuread.env echo "azuread.env file created in the \"secrets\" folder." diff --git a/tjenestebuss-integrasjon/.nais/azure-ad-app-lokal.yml b/tjenestebuss-integrasjon/.nais/azure-ad-app-lokal.yml index 6d59a297f..f98ccfc1c 100644 --- a/tjenestebuss-integrasjon/.nais/azure-ad-app-lokal.yml +++ b/tjenestebuss-integrasjon/.nais/azure-ad-app-lokal.yml @@ -27,6 +27,6 @@ spec: - application: azure-token-generator cluster: dev-gcp namespace: aura - - application: skribenten-backend-lokal + - application: skribenten-backend cluster: dev-gcp namespace: pensjonsbrev diff --git a/tjenestebuss-integrasjon/.nais/dev-q2.yaml b/tjenestebuss-integrasjon/.nais/dev-q2.yaml index 20a2e6a67..71b923f1c 100644 --- a/tjenestebuss-integrasjon/.nais/dev-q2.yaml +++ b/tjenestebuss-integrasjon/.nais/dev-q2.yaml @@ -20,9 +20,6 @@ inboundRules: - application: skribenten-backend namespace: pensjonsbrev cluster: dev-gcp - - application: skribenten-backend-lokal - namespace: pensjonsbrev - cluster: dev-gcp externalHosts: - login.microsoftonline.com From 025f61d04588ab7ee82f6b09b61627a475bc7ba4 Mon Sep 17 00:00:00 2001 From: Alexander Hoem Rosbach Date: Wed, 11 Sep 2024 14:48:02 +0200 Subject: [PATCH 2/4] =?UTF-8?q?Legg=20til=20navn=20p=C3=A5=20overstyrt=20m?= =?UTF-8?q?ottaker=20samhandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../no/nav/pensjon/brev/skribenten/Routing.kt | 25 ++- .../pensjon/brev/skribenten/db/Mottaker.kt | 2 +- .../nav/pensjon/brev/skribenten/model/Api.kt | 2 +- .../TjenestebussIntegrasjon.kt | 7 +- .../services/BrevredigeringService.kt | 25 +-- .../skribenten/services/SamhandlerService.kt | 165 ++++++++++++++++++ .../TjenestebussIntegrasjonService.kt | 135 +------------- .../services/BrevredigeringServiceTest.kt | 24 ++- 8 files changed, 220 insertions(+), 165 deletions(-) create mode 100644 skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/Routing.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/Routing.kt index 34232d87a..239be1f9f 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/Routing.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/Routing.kt @@ -22,23 +22,30 @@ fun Application.configureRouting(authConfig: JwtConfig, skribentenConfig: Config val krrService = KrrService(servicesConfig.getConfig("krr"), authService) val brevbakerService = BrevbakerService(servicesConfig.getConfig("brevbaker"), authService) val brevmetadataService = BrevmetadataService(servicesConfig.getConfig("brevmetadata")) - val tjenestebussIntegrasjonService = - TjenestebussIntegrasjonService( - servicesConfig.getConfig("tjenestebussintegrasjon"), - servicesConfig.getConfig("samhandlerProxy"), - authService - ) + val samhandlerService = SamhandlerService(servicesConfig.getConfig("samhandlerProxy"), authService) + val tjenestebussIntegrasjonService = TjenestebussIntegrasjonService(servicesConfig.getConfig("tjenestebussintegrasjon"), authService) val navansattService = NavansattService(servicesConfig.getConfig("navansatt"), authService) val legacyBrevService = LegacyBrevService(brevmetadataService, safService, penService, navansattService) val brevmalService = BrevmalService(penService, brevmetadataService, brevbakerService) - val brevredigeringService = BrevredigeringService(brevbakerService, penService, navansattService) + val brevredigeringService = BrevredigeringService(brevbakerService, penService, navansattService, samhandlerService) routing { healthRoute() authenticate(authConfig.name) { - setupServiceStatus(safService, penService, pensjonPersonDataService, pdlService, krrService, brevbakerService, brevmetadataService, tjenestebussIntegrasjonService, navansattService) + setupServiceStatus( + safService, + penService, + pensjonPersonDataService, + pdlService, + krrService, + brevbakerService, + brevmetadataService, + samhandlerService, + tjenestebussIntegrasjonService, + navansattService + ) landRoute() brevmal(brevbakerService) @@ -54,7 +61,7 @@ fun Application.configureRouting(authConfig: JwtConfig, skribentenConfig: Config safService, ) brev(brevredigeringService) - tjenestebussIntegrasjonRoute(tjenestebussIntegrasjonService) + tjenestebussIntegrasjonRoute(samhandlerService, tjenestebussIntegrasjonService) meRoute(navansattService) } } diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/db/Mottaker.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/db/Mottaker.kt index 57f47cfb7..8c254883b 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/db/Mottaker.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/db/Mottaker.kt @@ -4,7 +4,7 @@ import no.nav.pensjon.brev.skribenten.model.Api import no.nav.pensjon.brev.skribenten.model.Pen fun Mottaker.toApi(): Api.OverstyrtMottaker = when (type) { - MottakerType.SAMHANDLER -> Api.OverstyrtMottaker.Samhandler(tssId!!) + MottakerType.SAMHANDLER -> Api.OverstyrtMottaker.Samhandler(tssId!!, null) MottakerType.NORSK_ADRESSE -> Api.OverstyrtMottaker.NorskAdresse(navn!!, postnummer!!, poststed!!, adresselinje1, adresselinje2, adresselinje3) MottakerType.UTENLANDSK_ADRESSE -> Api.OverstyrtMottaker.UtenlandskAdresse( navn!!, diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/model/Api.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/model/Api.kt index 35841d21f..963fad143 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/model/Api.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/model/Api.kt @@ -68,7 +68,7 @@ object Api { JsonSubTypes.Type(OverstyrtMottaker.UtenlandskAdresse::class, name = "UtenlandskAdresse"), ) sealed class OverstyrtMottaker { - data class Samhandler(val tssId: String) : OverstyrtMottaker() + data class Samhandler(val tssId: String, val navn: String?) : OverstyrtMottaker() data class NorskAdresse( val navn: String, val postnummer: String, diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/routes/tjenestebussintegrasjon/TjenestebussIntegrasjon.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/routes/tjenestebussintegrasjon/TjenestebussIntegrasjon.kt index 566217aae..a29b66224 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/routes/tjenestebussintegrasjon/TjenestebussIntegrasjon.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/routes/tjenestebussintegrasjon/TjenestebussIntegrasjon.kt @@ -7,17 +7,18 @@ import io.ktor.server.routing.* import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.FinnSamhandlerRequestDto import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.HentSamhandlerAdresseRequestDto import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.HentSamhandlerRequestDto +import no.nav.pensjon.brev.skribenten.services.SamhandlerService import no.nav.pensjon.brev.skribenten.services.TjenestebussIntegrasjonService -fun Route.tjenestebussIntegrasjonRoute(tjenestebussIntegrasjonService: TjenestebussIntegrasjonService) { +fun Route.tjenestebussIntegrasjonRoute(samhandlerService: SamhandlerService, tjenestebussIntegrasjonService: TjenestebussIntegrasjonService) { post("/finnSamhandler") { val requestDto = call.receive() - call.respond(tjenestebussIntegrasjonService.finnSamhandler(call, requestDto)) + call.respond(samhandlerService.finnSamhandler(call, requestDto)) } post("/hentSamhandler") { val requestDto = call.receive() - call.respond(tjenestebussIntegrasjonService.hentSamhandler(call, requestDto.idTSSEkstern)) + call.respond(samhandlerService.hentSamhandler(call, requestDto.idTSSEkstern)) } post("/hentSamhandlerAdresse") { val requestDto = call.receive() diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringService.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringService.kt index e05a6cc50..91767d0e9 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringService.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringService.kt @@ -44,6 +44,7 @@ class BrevredigeringService( private val brevbakerService: BrevbakerService, private val penService: PenService, private val navansattService: NavansattService, + private val samhandlerService: SamhandlerService, ) { companion object { val RESERVASJON_TIMEOUT = 10.minutes.toJavaDuration() @@ -94,7 +95,7 @@ class BrevredigeringService( Mottaker.new(it.id.value) { oppdater(mottaker) } } }.mapBrev(template) - }.oppdaterMedAnsattNavn(call) + }.oppdaterMedEksternData(call) } } @@ -125,7 +126,7 @@ class BrevredigeringService( saksbehandlerValg = nyeSaksbehandlerValg ?: brev.saksbehandlerValg sistRedigertAvNavIdent = call.principal().navIdent() }.mapBrev(template) - }.oppdaterMedAnsattNavn(call) + }.oppdaterMedEksternData(call) } } @@ -138,7 +139,7 @@ class BrevredigeringService( mottaker?.oppdater(patch.mottaker) ?: Mottaker.new(brevId) { oppdater(patch.mottaker) } } }?.also { Brevredigering.reload(it, true) }?.let { - it.mapBrev(brevbakerService.getRedigerbarTemplate(call, it.brevkode)).oppdaterMedAnsattNavn(call) + it.mapBrev(brevbakerService.getRedigerbarTemplate(call, it.brevkode)).oppdaterMedEksternData(call) } } @@ -161,7 +162,7 @@ class BrevredigeringService( redigertBrev = it this.signaturSignerende = signaturSignerende }.mapBrev(template) - }.oppdaterMedAnsattNavn(call) + }.oppdaterMedEksternData(call) } } @@ -195,19 +196,19 @@ class BrevredigeringService( ).map { brev.redigertBrev.updateEditedLetter(it) } .map { val template = brevbakerService.getRedigerbarTemplate(call, brev.brevkode) - transaction { brev.apply { redigertBrev = it }.mapBrev(template) }.oppdaterMedAnsattNavn(call) + transaction { brev.apply { redigertBrev = it }.mapBrev(template) }.oppdaterMedEksternData(call) } } } else { val template = transaction { Brevredigering.findByIdAndSaksId(brevId, saksId)?.brevkode }?.let { brevbakerService.getRedigerbarTemplate(call, it) } - transaction { Brevredigering.findByIdAndSaksId(brevId, saksId)?.mapBrev(template) }?.let { Ok(it.oppdaterMedAnsattNavn(call)) } + transaction { Brevredigering.findByIdAndSaksId(brevId, saksId)?.mapBrev(template) }?.let { Ok(it.oppdaterMedEksternData(call)) } } suspend fun hentBrevForSak(call: ApplicationCall, saksId: Long): List = newSuspendedTransaction { Brevredigering.find { BrevredigeringTable.saksId eq saksId }.map { mapBrevInfo(it, brevbakerService.getRedigerbarTemplate(call, it.brevkode)) - .oppdaterMedAnsattNavn(call ) + .oppdaterMedEksternData(call ) } } @@ -420,17 +421,19 @@ class BrevredigeringService( ) } - private suspend fun Api.BrevResponse.oppdaterMedAnsattNavn(call: ApplicationCall): Api.BrevResponse = - copy(info = info.oppdaterMedAnsattNavn(call)) + private suspend fun Api.BrevResponse.oppdaterMedEksternData(call: ApplicationCall): Api.BrevResponse = + copy(info = info.oppdaterMedEksternData(call)) - private suspend fun Api.BrevInfo.oppdaterMedAnsattNavn(call: ApplicationCall): Api.BrevInfo = + private suspend fun Api.BrevInfo.oppdaterMedEksternData(call: ApplicationCall): Api.BrevInfo = copy( opprettetAv = opprettetAv.oppdaterMedNavn(call), sistredigertAv = sistredigertAv.oppdaterMedNavn(call), status = if (status is Api.BrevStatus.UnderRedigering) { Api.BrevStatus.UnderRedigering(status.redigeresAv.oppdaterMedNavn(call)) - } else status + } else status, + mottaker = if (mottaker is Samhandler) mottaker.copy(navn = samhandlerService.hentSamhandlerNavn(call, mottaker.tssId)) else mottaker, ) + private suspend fun Api.NavAnsatt.oppdaterMedNavn(call: ApplicationCall): Api.NavAnsatt = Api.NavAnsatt(id, navansattService.hentNavansatt(call, id.id)?.navn) diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt new file mode 100644 index 000000000..a5a35309c --- /dev/null +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt @@ -0,0 +1,165 @@ +package no.nav.pensjon.brev.skribenten.services + +import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES +import com.typesafe.config.Config +import io.ktor.client.plugins.* +import io.ktor.client.plugins.contentnegotiation.* +import io.ktor.client.request.* +import io.ktor.http.* +import io.ktor.http.ContentType.Application.Json +import io.ktor.serialization.jackson.* +import io.ktor.server.application.* +import no.nav.pensjon.brev.skribenten.Cache +import no.nav.pensjon.brev.skribenten.auth.AzureADOnBehalfOfAuthorizedHttpClient +import no.nav.pensjon.brev.skribenten.auth.AzureADService +import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.FinnSamhandlerRequestDto +import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.FinnSamhandlerResponseDto +import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.HentSamhandlerResponseDto +import org.slf4j.LoggerFactory + +class SamhandlerService(configSamhandlerProxy: Config, authService: AzureADService): ServiceStatus { + private val samhandlerProxyUrl = configSamhandlerProxy.getString("url") + private val samhandlerProxyScope = configSamhandlerProxy.getString("scope") + + private val samhandlerProxyClient = + AzureADOnBehalfOfAuthorizedHttpClient(samhandlerProxyScope, authService) { + defaultRequest { + url(samhandlerProxyUrl) + } + install(ContentNegotiation) { + jackson { + disable(FAIL_ON_UNKNOWN_PROPERTIES) + } + } + } + + private val logger = LoggerFactory.getLogger(SamhandlerService::class.java) + + suspend fun finnSamhandler( + call: ApplicationCall, + requestDto: FinnSamhandlerRequestDto, + ): FinnSamhandlerResponseDto = + samhandlerProxyClient.post(call, "/api/samhandler/finnSamhandler") { + contentType(Json) + accept(Json) + setBody(lagRequest(requestDto)) + }.toServiceResult() + .map { it.toFinnSamhandlerResponseDto() } + .catch { message, status -> + logger.error("Feil ved samhandler søk. Status: $status Melding: $message") + FinnSamhandlerResponseDto("Feil ved henting av samhandler") + } + + suspend fun hentSamhandler( + call: ApplicationCall, + idTSSEkstern: String, + ): HentSamhandlerResponseDto = + samhandlerProxyClient.get(call, "/api/samhandler/hentSamhandlerEnkel/") { + url { + appendPathSegments(idTSSEkstern) + } + contentType(Json) + accept(Json) + }.toServiceResult() + .map { it.toHentSamhandlerResponseDto() } + .catch { message, status -> + logger.error("Feil ved henting av samhandler fra tjenestebuss-integrasjon. Status: $status Melding: $message") + HentSamhandlerResponseDto(null, HentSamhandlerResponseDto.FailureType.GENERISK) + } + + private val samhandlerNavnCache = Cache() + suspend fun hentSamhandlerNavn(call: ApplicationCall, idTSSEkstern: String): String? = samhandlerNavnCache.cached(idTSSEkstern) { + hentSamhandler(call, idTSSEkstern).success?.navn + } + + override val name = "Tjenestebuss-integrasjon" + override suspend fun ping(call: ApplicationCall): ServiceResult = + samhandlerProxyClient.get(call, "/api/samhandler/ping").toServiceResult().map { true } + + private fun lagRequest(requestDto: FinnSamhandlerRequestDto) = + when (requestDto) { + is FinnSamhandlerRequestDto.DirekteOppslag -> { + Soek( + navn = null, + idType = requestDto.identtype, + offentligId = requestDto.id, + samhandlerType = requestDto.samhandlerType.name, + ) + } + is FinnSamhandlerRequestDto.Organisasjonsnavn -> { + Soek( + navn = requestDto.navn, + idType = null, + offentligId = null, + samhandlerType = requestDto.samhandlerType.name, + ) + } + is FinnSamhandlerRequestDto.Personnavn -> { + Soek( + "${requestDto.etternavn} ${requestDto.fornavn}", + null, + null, + requestDto.samhandlerType.name, + ) + } + } + + data class Soek( + val navn: String?, + val idType: String?, + val offentligId: String?, + val samhandlerType: String?, + ) + + data class FinnSamhandlerResponse( + val samhandlerList: List, + ) + + private fun FinnSamhandlerResponse.toFinnSamhandlerResponseDto() = + FinnSamhandlerResponseDto( + samhandlere = samhandlerList.flatMap { samhandler -> + samhandler.avdelinger.map { avdeling -> + FinnSamhandlerResponseDto.Samhandler( + navn = avdeling.avdelingNavn.takeIf { !it.isNullOrBlank() } ?: samhandler.navn, + samhandlerType = samhandler.samhandlerType, + offentligId = samhandler.offentligId, + idType = samhandler.idType, + idTSSEkstern = avdeling.idTSSEkstern + ) + } + } + ) + + data class SamhandlerEnkel( + val navn: String, + val samhandlerType: String, + val offentligId: String, + val idType: String, + ) + + data class Samhandler( + val navn: String, + val samhandlerType: String, + val offentligId: String, + val idType: String, + val avdelinger: List, + ) + + data class Avdeling( + val idTSSEkstern: String, + val avdelingNavn: String?, + val avdelingType: String?, + val avdelingsnr: String? + ) + + private fun SamhandlerEnkel.toHentSamhandlerResponseDto() = + HentSamhandlerResponseDto( + success = HentSamhandlerResponseDto.Success( + navn = navn, + samhandlerType = samhandlerType, + offentligId = offentligId, + idType = idType, + ), + failure = null + ) +} \ No newline at end of file diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/TjenestebussIntegrasjonService.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/TjenestebussIntegrasjonService.kt index 575113809..0657bcc9e 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/TjenestebussIntegrasjonService.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/TjenestebussIntegrasjonService.kt @@ -1,6 +1,5 @@ package no.nav.pensjon.brev.skribenten.services -import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES import com.typesafe.config.Config import io.ktor.client.plugins.* import io.ktor.client.plugins.contentnegotiation.* @@ -15,12 +14,10 @@ import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.* import no.nav.pensjon.brev.skribenten.routes.tjenestebussintegrasjon.dto.HentSamhandlerAdresseResponseDto.FailureType.GENERISK import org.slf4j.LoggerFactory -class TjenestebussIntegrasjonService(config: Config, configSamhandlerProxy: Config, authService: AzureADService) : ServiceStatus { +class TjenestebussIntegrasjonService(config: Config, authService: AzureADService) : ServiceStatus { private val tjenestebussIntegrasjonUrl = config.getString("url") private val tjenestebussIntegrasjonScope = config.getString("scope") - private val samhandlerProxyUrl = configSamhandlerProxy.getString("url") - private val samhandlerProxyScope = configSamhandlerProxy.getString("scope") private val logger = LoggerFactory.getLogger(TjenestebussIntegrasjonService::class.java) private val tjenestebussIntegrasjonClient = @@ -33,50 +30,6 @@ class TjenestebussIntegrasjonService(config: Config, configSamhandlerProxy: Conf } } - private val samhandlerProxyClient = - AzureADOnBehalfOfAuthorizedHttpClient(samhandlerProxyScope, authService) { - defaultRequest { - url(samhandlerProxyUrl) - } - install(ContentNegotiation) { - jackson { - disable(FAIL_ON_UNKNOWN_PROPERTIES) - } - } - } - - suspend fun finnSamhandler( - call: ApplicationCall, - requestDto: FinnSamhandlerRequestDto, - ): FinnSamhandlerResponseDto = - samhandlerProxyClient.post(call, "/api/samhandler/finnSamhandler") { - contentType(Json) - accept(Json) - setBody(lagRequest(requestDto)) - }.toServiceResult() - .map { it.toFinnSamhandlerResponseDto() } - .catch { message, status -> - logger.error("Feil ved samhandler søk. Status: $status Melding: $message") - FinnSamhandlerResponseDto("Feil ved henting av samhandler") - } - - suspend fun hentSamhandler( - call: ApplicationCall, - idTSSEkstern: String, - ): HentSamhandlerResponseDto = - samhandlerProxyClient.get(call, "/api/samhandler/hentSamhandlerEnkel/") { - url { - appendPathSegments(idTSSEkstern) - } - contentType(Json) - accept(Json) - }.toServiceResult() - .map { it.toHentSamhandlerResponseDto() } - .catch { message, status -> - logger.error("Feil ved henting av samhandler fra tjenestebuss-integrasjon. Status: $status Melding: $message") - HentSamhandlerResponseDto(null, HentSamhandlerResponseDto.FailureType.GENERISK) - } - suspend fun hentSamhandlerAdresse( call: ApplicationCall, idTSSEkstern: String, @@ -98,90 +51,4 @@ class TjenestebussIntegrasjonService(config: Config, configSamhandlerProxy: Conf suspend fun status(call: ApplicationCall): ServiceResult = tjenestebussIntegrasjonClient.get(call, "/status").toServiceResult() - private fun lagRequest(requestDto: FinnSamhandlerRequestDto) = - when (requestDto) { - is FinnSamhandlerRequestDto.DirekteOppslag -> { - Soek( - navn = null, - idType = requestDto.identtype, - offentligId = requestDto.id, - samhandlerType = requestDto.samhandlerType.name, - ) - } - is FinnSamhandlerRequestDto.Organisasjonsnavn -> { - Soek( - navn = requestDto.navn, - idType = null, - offentligId = null, - samhandlerType = requestDto.samhandlerType.name, - ) - } - is FinnSamhandlerRequestDto.Personnavn -> { - Soek( - "${requestDto.etternavn} ${requestDto.fornavn}", - null, - null, - requestDto.samhandlerType.name, - ) - } - } - - data class Soek( - val navn: String?, - val idType: String?, - val offentligId: String?, - val samhandlerType: String?, - ) - - data class FinnSamhandlerResponse( - val samhandlerList: List, - ) - - private fun FinnSamhandlerResponse.toFinnSamhandlerResponseDto() = - FinnSamhandlerResponseDto( - samhandlere = samhandlerList.flatMap { samhandler -> - samhandler.avdelinger.map { avdeling -> - FinnSamhandlerResponseDto.Samhandler( - navn = avdeling.avdelingNavn.takeIf { !it.isNullOrBlank() } ?: samhandler.navn, - samhandlerType = samhandler.samhandlerType, - offentligId = samhandler.offentligId, - idType = samhandler.idType, - idTSSEkstern = avdeling.idTSSEkstern - ) - } - } - ) - - data class SamhandlerEnkel( - val navn: String, - val samhandlerType: String, - val offentligId: String, - val idType: String, - ) - - data class Samhandler( - val navn: String, - val samhandlerType: String, - val offentligId: String, - val idType: String, - val avdelinger: List, - ) - - data class Avdeling( - val idTSSEkstern: String, - val avdelingNavn: String?, - val avdelingType: String?, - val avdelingsnr: String? - ) - - private fun SamhandlerEnkel.toHentSamhandlerResponseDto() = - HentSamhandlerResponseDto( - success = HentSamhandlerResponseDto.Success( - navn = navn, - samhandlerType = samhandlerType, - offentligId = offentligId, - idType = idType, - ), - failure = null - ) } diff --git a/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt b/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt index e0c1ea2c3..5e0cc983e 100644 --- a/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt +++ b/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt @@ -156,20 +156,25 @@ class BrevredigeringServiceTest { "Fishburne" ) } + private val samhandlerService = mockk() + private val brevredigeringService: BrevredigeringService = BrevredigeringService( brevbakerService = brevbakerMock, penService = penService, navansattService = navAnsattService, + samhandlerService = samhandlerService, ) private fun brevredigeringService( brevbakerMock: BrevbakerService = this.brevbakerMock, penService: PenService = this.penService, - navansattService: NavansattService = this.navAnsattService + navansattService: NavansattService = this.navAnsattService, + samhandlerService: SamhandlerService = this.samhandlerService, ): BrevredigeringService = BrevredigeringService( brevbakerService = brevbakerMock, penService = penService, navansattService = navansattService, + samhandlerService = mockk(), ) @BeforeEach @@ -897,16 +902,19 @@ class BrevredigeringServiceTest { @Test fun `kan overstyre mottaker av brev`(): Unit = runBlocking { - val mottaker = Api.OverstyrtMottaker.Samhandler("samhandlerId") + coEvery { samhandlerService.hentSamhandlerNavn(any(), eq("samhandlerId")) } returns "hei" + + val mottaker = Api.OverstyrtMottaker.Samhandler("samhandlerId", null) val brev = opprettBrev(mottaker = mottaker) - assertEquals(mottaker, brev.resultOrNull()?.info?.mottaker) + assertEquals(mottaker.copy(navn = "hei"), brev.resultOrNull()?.info?.mottaker) assertEquals(mottaker.tssId, transaction { Mottaker[brev.resultOrNull()!!.info.id].tssId }) } @Test fun `kan fjerne overstyrt mottaker av brev`(): Unit = runBlocking { - val mottaker = Api.OverstyrtMottaker.Samhandler("samhandlerId") + coEvery { samhandlerService.hentSamhandlerNavn(any(), eq("samhandlerId")) } returns "hei" + val mottaker = Api.OverstyrtMottaker.Samhandler("samhandlerId", null) val brev = opprettBrev(mottaker = mottaker).resultOrNull()!! assertTrue(brevredigeringService.fjernOverstyrtMottaker(brev.info.id, sak.saksId)) @@ -917,7 +925,9 @@ class BrevredigeringServiceTest { @Test fun `kan oppdatere mottaker av brev`(): Unit = runBlocking { - val brev = opprettBrev(mottaker = Api.OverstyrtMottaker.Samhandler("1")).resultOrNull()!! + coEvery { samhandlerService.hentSamhandlerNavn(any(), eq("1")) } returns "Samhandler En" + + val brev = opprettBrev(mottaker = Api.OverstyrtMottaker.Samhandler("1", null)).resultOrNull()!! val nyMottaker = Api.OverstyrtMottaker.NorskAdresse("a", "b", "c", "d", "e", "f") val oppdatert = brevredigeringService.delvisOppdaterBrev(callMock(), sak.saksId, brev.info.id, Api.DelvisOppdaterBrevRequest(mottaker = nyMottaker)) @@ -937,7 +947,9 @@ class BrevredigeringServiceTest { @Test fun `brev distribueres til annen mottaker`(): Unit = runBlocking { - val mottaker = Api.OverstyrtMottaker.Samhandler("987") + coEvery { samhandlerService.hentSamhandlerNavn(any(), eq("987")) } returns "Ni Åtte Syv" + + val mottaker = Api.OverstyrtMottaker.Samhandler("987", null) val brev = opprettBrev(mottaker = mottaker).resultOrNull()!! brevredigeringService.hentEllerOpprettPdf(callMock(), sak.saksId, brev.info.id) From f5ae4abeb85bf591c23ac3d819362c2b10bbbc33 Mon Sep 17 00:00:00 2001 From: Alexander Hoem Rosbach Date: Wed, 11 Sep 2024 14:52:08 +0200 Subject: [PATCH 3/4] liten fiks --- .../brev/skribenten/services/BrevredigeringServiceTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt b/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt index 5e0cc983e..76ed2e7e9 100644 --- a/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt +++ b/skribenten-backend/src/test/kotlin/no/nav/pensjon/brev/skribenten/services/BrevredigeringServiceTest.kt @@ -174,7 +174,7 @@ class BrevredigeringServiceTest { brevbakerService = brevbakerMock, penService = penService, navansattService = navansattService, - samhandlerService = mockk(), + samhandlerService = samhandlerService, ) @BeforeEach From 19a9b8b45596b4869859bf408f4434d8f774b2be Mon Sep 17 00:00:00 2001 From: Alexander Hoem Rosbach Date: Fri, 13 Sep 2024 12:01:40 +0200 Subject: [PATCH 4/4] =?UTF-8?q?Fiks=20navn=20p=C3=A5=20SamhandlerService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nav/pensjon/brev/skribenten/services/SamhandlerService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt index a5a35309c..d305ba5d8 100644 --- a/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt +++ b/skribenten-backend/src/main/kotlin/no/nav/pensjon/brev/skribenten/services/SamhandlerService.kt @@ -72,7 +72,7 @@ class SamhandlerService(configSamhandlerProxy: Config, authService: AzureADServi hentSamhandler(call, idTSSEkstern).success?.navn } - override val name = "Tjenestebuss-integrasjon" + override val name = "SamhandlerService" override suspend fun ping(call: ApplicationCall): ServiceResult = samhandlerProxyClient.get(call, "/api/samhandler/ping").toServiceResult().map { true }