Skip to content

Commit

Permalink
Legg til navn på overstyrt mottaker samhandler
Browse files Browse the repository at this point in the history
  • Loading branch information
routsi committed Sep 11, 2024
1 parent f22b8ba commit 025f61d
Show file tree
Hide file tree
Showing 8 changed files with 220 additions and 165 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -54,7 +61,7 @@ fun Application.configureRouting(authConfig: JwtConfig, skribentenConfig: Config
safService,
)
brev(brevredigeringService)
tjenestebussIntegrasjonRoute(tjenestebussIntegrasjonService)
tjenestebussIntegrasjonRoute(samhandlerService, tjenestebussIntegrasjonService)
meRoute(navansattService)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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!!,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<FinnSamhandlerRequestDto>()
call.respond(tjenestebussIntegrasjonService.finnSamhandler(call, requestDto))
call.respond(samhandlerService.finnSamhandler(call, requestDto))
}
post("/hentSamhandler") {
val requestDto = call.receive<HentSamhandlerRequestDto>()
call.respond(tjenestebussIntegrasjonService.hentSamhandler(call, requestDto.idTSSEkstern))
call.respond(samhandlerService.hentSamhandler(call, requestDto.idTSSEkstern))
}
post("/hentSamhandlerAdresse") {
val requestDto = call.receive<HentSamhandlerAdresseRequestDto>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -94,7 +95,7 @@ class BrevredigeringService(
Mottaker.new(it.id.value) { oppdater(mottaker) }
}
}.mapBrev(template)
}.oppdaterMedAnsattNavn(call)
}.oppdaterMedEksternData(call)
}
}

Expand Down Expand Up @@ -125,7 +126,7 @@ class BrevredigeringService(
saksbehandlerValg = nyeSaksbehandlerValg ?: brev.saksbehandlerValg
sistRedigertAvNavIdent = call.principal().navIdent()
}.mapBrev(template)
}.oppdaterMedAnsattNavn(call)
}.oppdaterMedEksternData(call)
}
}

Expand All @@ -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)
}
}

Expand All @@ -161,7 +162,7 @@ class BrevredigeringService(
redigertBrev = it
this.signaturSignerende = signaturSignerende
}.mapBrev(template)
}.oppdaterMedAnsattNavn(call)
}.oppdaterMedEksternData(call)
}
}

Expand Down Expand Up @@ -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<Api.BrevInfo> =
newSuspendedTransaction {
Brevredigering.find { BrevredigeringTable.saksId eq saksId }.map {
mapBrevInfo(it, brevbakerService.getRedigerbarTemplate(call, it.brevkode))
.oppdaterMedAnsattNavn(call )
.oppdaterMedEksternData(call )
}
}

Expand Down Expand Up @@ -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)

Expand Down
Original file line number Diff line number Diff line change
@@ -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<FinnSamhandlerResponse>()
.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<SamhandlerEnkel>()
.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<String, String>()
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<Boolean> =
samhandlerProxyClient.get(call, "/api/samhandler/ping").toServiceResult<String>().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<Samhandler>,
)

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<Avdeling>,
)

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
)
}
Loading

0 comments on commit 025f61d

Please sign in to comment.