Skip to content

Commit

Permalink
propagerer callId til spleis-api
Browse files Browse the repository at this point in the history
  • Loading branch information
davidsteinsland committed Jan 27, 2024
1 parent f5a278e commit 91eb5ab
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 15 deletions.
24 changes: 22 additions & 2 deletions foredler/src/main/kotlin/no/nav/helse/spekemat/foredler/Api.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package no.nav.helse.spekemat.foredler

import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.plugins.*
import io.ktor.server.plugins.callid.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
Expand All @@ -27,7 +29,15 @@ fun Route.api(pølsetjeneste: Pølsetjeneste) {
status = Pølsestatus.ÅPEN,
kilde = request.pølse.kilde
)
pølsetjeneste.nyPølse(request.fnr, request.yrkesaktivitetidentifikator, pølse, request.meldingsreferanseId, request.hendelsedata)
val callId = call.callId ?: throw BadRequestException("Mangler callId-header")
pølsetjeneste.nyPølse(
request.fnr,
request.yrkesaktivitetidentifikator,
pølse,
request.meldingsreferanseId,
request.hendelsedata,
callId
)
call.respondText(ContentType.Application.Json, HttpStatusCode.OK) { """{ "melding": "takk for ditt bidrag" }""" }
}

Expand All @@ -40,7 +50,17 @@ fun Route.api(pølsetjeneste: Pølsetjeneste) {
PølsestatusDto.LUKKET -> Pølsestatus.LUKKET
PølsestatusDto.FORKASTET -> Pølsestatus.FORKASTET
}
pølsetjeneste.oppdaterPølse(request.fnr, request.yrkesaktivitetidentifikator, request.vedtaksperiodeId, request.generasjonId, status, request.meldingsreferanseId, request.hendelsedata)
val callId = call.callId ?: throw BadRequestException("Mangler callId-header")
pølsetjeneste.oppdaterPølse(
request.fnr,
request.yrkesaktivitetidentifikator,
request.vedtaksperiodeId,
request.generasjonId,
status,
request.meldingsreferanseId,
request.hendelsedata,
callId
)
call.respondText(ContentType.Application.Json, HttpStatusCode.OK) { """{ "melding": "takk for ditt bidrag" }""" }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import io.ktor.server.auth.*
import io.ktor.server.cio.*
import io.ktor.server.engine.*
import io.ktor.server.metrics.micrometer.*
import io.ktor.server.plugins.*
import io.ktor.server.plugins.callid.*
import io.ktor.server.plugins.callloging.*
import io.ktor.server.plugins.contentnegotiation.*
Expand Down Expand Up @@ -119,6 +120,11 @@ fun Application.lagApplikasjonsmodul(migrationConfig: HikariConfig, objectMapper
filter { call -> call.request.path().startsWith("/api/") }
}
install(StatusPages) {
exception<BadRequestException> { call, cause ->
call.respond(HttpStatusCode.BadRequest, FeilResponse(
feilmelding = "Ugyldig request: ${cause.message}\n${cause.stackTraceToString()}"
))
}
exception<Throwable> { call, cause ->
call.respond(HttpStatusCode.InternalServerError, FeilResponse(
feilmelding = "Tjeneren møtte på ein feilmelding: ${cause.message}\n${cause.stackTraceToString()}"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
package no.nav.helse.spekemat.foredler

import io.ktor.server.application.*
import org.slf4j.LoggerFactory
import java.util.*

interface Pølsetjeneste {
fun nyPølse(fnr: String, yrkesaktivitetidentifikator: String, pølse: PølseDto, meldingsreferanseId: UUID, hendelsedata: String)
fun oppdaterPølse(fnr: String, yrkesaktivitetidentifikator: String, vedtaksperiodeId: UUID, generasjonId: UUID, status: Pølsestatus, meldingsreferanseId: UUID, hendelsedata: String)
fun nyPølse(
fnr: String,
yrkesaktivitetidentifikator: String,
lse: PølseDto,
meldingsreferanseId: UUID,
hendelsedata: String,
callId: String
)
fun oppdaterPølse(
fnr: String,
yrkesaktivitetidentifikator: String,
vedtaksperiodeId: UUID,
generasjonId: UUID,
status: Pølsestatus,
meldingsreferanseId: UUID,
hendelsedata: String,
callId: String
)
fun hent(fnr: String): List<YrkesaktivitetDto>
fun slett(fnr: String)
}
Expand All @@ -19,8 +36,15 @@ class Pølsetjenesten(
private val sikkerlogg = LoggerFactory.getLogger("tjenestekall")
private val UKJENT_UUID = UUID.fromString("00000000-0000-0000-0000-000000000000")
}
override fun nyPølse(fnr: String, yrkesaktivitetidentifikator: String, pølse: PølseDto, meldingsreferanseId: UUID, hendelsedata: String) {
val fabrikk = hentPølsefabrikk(fnr, yrkesaktivitetidentifikator)
override fun nyPølse(
fnr: String,
yrkesaktivitetidentifikator: String,
lse: PølseDto,
meldingsreferanseId: UUID,
hendelsedata: String,
callId: String
) {
val fabrikk = hentPølsefabrikk(fnr, yrkesaktivitetidentifikator, callId)
fabrikk.nyPølse(Pølse.fraDto(pølse))

val resultat = fabrikk.pakke()
Expand All @@ -34,24 +58,25 @@ class Pølsetjenesten(
generasjonId: UUID,
status: Pølsestatus,
meldingsreferanseId: UUID,
hendelsedata: String
hendelsedata: String,
callId: String
) {
val fabrikk = hentPølsefabrikk(fnr, yrkesaktivitetidentifikator)
val fabrikk = hentPølsefabrikk(fnr, yrkesaktivitetidentifikator, callId)
val pølse = fabrikk.oppdaterPølse(vedtaksperiodeId, generasjonId, status)

val resultat = fabrikk.pakke()
dao.opprett(fnr, yrkesaktivitetidentifikator, resultat, pølse.kilde, meldingsreferanseId, hendelsedata)
}

private fun hentPølsefabrikk(fnr: String, yrkesaktivitetidentifikator: String): Pølsefabrikk {
val person = dao.hent(fnr).takeUnless(List<*>::isEmpty) ?: hentPersonFraSpleis(fnr)
private fun hentPølsefabrikk(fnr: String, yrkesaktivitetidentifikator: String, callId: String): Pølsefabrikk {
val person = dao.hent(fnr).takeUnless(List<*>::isEmpty) ?: hentPersonFraSpleis(fnr, callId)
return person.singleOrNull { it.yrkesaktivitetidentifikator == yrkesaktivitetidentifikator }?.let {
Pølsefabrikk.gjenopprett(it.rader)
} ?: Pølsefabrikk()
}

private fun hentPersonFraSpleis(fnr: String): List<YrkesaktivitetDto> {
val yrkesaktiviteter = spleisClient.hentSpeilJson(fnr)
private fun hentPersonFraSpleis(fnr: String, callId: String): List<YrkesaktivitetDto> {
val yrkesaktiviteter = spleisClient.hentSpeilJson(fnr, callId)
yrkesaktiviteter.forEach {
dao.opprett(fnr, it.yrkesaktivitetidentifikator, it.rader, UKJENT_UUID, UUID.randomUUID(), "{}")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ class SpleisClient(
private companion object {
private val logg = LoggerFactory.getLogger(this::class.java)
private val sikkerlogg = LoggerFactory.getLogger("tjenestekall")
private const val CALL_ID_HEADER = "callId"
}
fun hentSpeilJson(fnr: String): List<YrkesaktivitetDto> {
val request = lagRequest(fnr)
fun hentSpeilJson(fnr: String, callId: String = UUID.randomUUID().toString()): List<YrkesaktivitetDto> {
val request = lagRequest(fnr, callId)
val response = httpClient.send(request, BodyHandlers.ofString(StandardCharsets.UTF_8))
val responseBody = response.body()
val statusCode = response.statusCode()
Expand All @@ -39,9 +40,10 @@ class SpleisClient(
return parsePølsefabrikker(responseBody)
}

private fun lagRequest(fnr: String) = HttpRequest.newBuilder(URI("http://spleis-api/api/person-json/"))
private fun lagRequest(fnr: String, callId: String) = HttpRequest.newBuilder(URI("http://spleis-api/api/person-json/"))
.header("fnr", fnr)
.header("Accept", "application/json")
.header(CALL_ID_HEADER, callId)
.header("Authorization", "Bearer ${tokenProvider.bearerToken(scope).token}")
.GET()
.build()
Expand Down

0 comments on commit 91eb5ab

Please sign in to comment.