Skip to content

Commit

Permalink
Hente inntekt basert på via http APIet som en erstatning til grpc.
Browse files Browse the repository at this point in the history
  • Loading branch information
geiralund committed Oct 19, 2023
1 parent da5e8a6 commit 0ba5d9c
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@ private val LOGGER = KotlinLogging.logger {}

class BehandlingsInntektsGetter(
private val inntektskomponentClient: InntektskomponentClient,
private val inntektStore: InntektStore
) {
private val inntektStore: InntektStore,
) : InntektStore by inntektStore {
suspend fun getKlassifisertInntekt(inntektparametre: Inntektparametre, callId: String? = null): Inntekt {
return klassifiserOgMapInntekt(getSpesifisertInntekt(inntektparametre, callId))
}

suspend fun getSpesifisertInntekt(inntektparametre: Inntektparametre, callId: String? = null): SpesifisertInntekt {
return mapToSpesifisertInntekt(
getBehandlingsInntekt(inntektparametre, callId),
inntektparametre.opptjeningsperiode.sisteAvsluttendeKalenderMåned
inntektparametre.opptjeningsperiode.sisteAvsluttendeKalenderMåned,
)
}

internal suspend fun getBehandlingsInntekt(
inntektparametre: Inntektparametre,
callId: String? = null
callId: String? = null,
): StoredInntekt {
return isInntektStored(inntektparametre)?.let {
LOGGER.info { "Henter stored inntekt: ${inntektparametre.toDebugString()}" }
Expand All @@ -42,19 +42,19 @@ class BehandlingsInntektsGetter(

private suspend fun fetchAndStoreInntekt(
inntektparametre: Inntektparametre,
callId: String? = null
callId: String? = null,
): StoredInntekt {
val inntektkomponentRequest = InntektkomponentRequest(
aktørId = inntektparametre.aktørId,
fødselsnummer = inntektparametre.fødselsnummer,
månedFom = inntektparametre.opptjeningsperiode.førsteMåned,
månedTom = inntektparametre.opptjeningsperiode.sisteAvsluttendeKalenderMåned
månedTom = inntektparametre.opptjeningsperiode.sisteAvsluttendeKalenderMåned,
)
return inntektStore.storeInntekt(
StoreInntektCommand(
inntektparametre = inntektparametre,
inntekt = inntektskomponentClient.getInntekt(inntektkomponentRequest, callId = callId)
)
inntekt = inntektskomponentClient.getInntekt(inntektkomponentRequest, callId = callId),
),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ fun klassifiserOgMapInntekt(spesifisertInntekt: SpesifisertInntekt): Inntekt {
inntektsId = spesifisertInntekt.inntektId.id,
inntektsListe = klassifisertInntektMåneder,
manueltRedigert = spesifisertInntekt.manueltRedigert,
sisteAvsluttendeKalenderMåned = spesifisertInntekt.sisteAvsluttendeKalenderMåned
sisteAvsluttendeKalenderMåned = spesifisertInntekt.sisteAvsluttendeKalenderMåned,
)
}

Expand All @@ -33,7 +33,7 @@ private fun mapTilKlassifisertInntektMåneder(klassifisertePosteringer: List<Kla
private fun mapTilKlassifisertInntektMåned(
årmåned: YearMonth,
klassifisertePosteringer: List<KlassifisertPostering>,
avvikMåneder: Map<YearMonth, List<Avvik>>
avvikMåneder: Map<YearMonth, List<Avvik>>,
) = KlassifisertInntektMåned(
årMåned = årmåned,
harAvvik = avvikMåneder.containsKey(årmåned),
Expand All @@ -42,7 +42,7 @@ private fun mapTilKlassifisertInntektMåned(
.map { (klasse, klassifisertePosteringerForKlasse) ->
KlassifisertInntekt(
beløp = klassifisertePosteringerForKlasse.fold(BigDecimal.ZERO) { sum, postering -> sum + postering.postering.beløp },
inntektKlasse = klasse
inntektKlasse = klasse,
)
}
},
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@ package no.nav.dagpenger.inntekt.v1

import io.ktor.http.HttpStatusCode
import io.ktor.server.application.call
import io.ktor.server.plugins.MissingRequestParameterException
import io.ktor.server.plugins.callid.callId
import io.ktor.server.request.receive
import io.ktor.server.response.respond
import io.ktor.server.routing.Route
import io.ktor.server.routing.get
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.withContext
import no.nav.dagpenger.inntekt.BehandlingsInntektsGetter
import no.nav.dagpenger.inntekt.db.InntektId
import no.nav.dagpenger.inntekt.db.Inntektparametre
import no.nav.dagpenger.inntekt.db.RegelKontekst
import no.nav.dagpenger.inntekt.klassifiserer.klassifiserOgMapInntekt
import no.nav.dagpenger.inntekt.oppslag.PersonOppslag
import java.time.LocalDate

Expand Down Expand Up @@ -57,6 +61,13 @@ fun Route.inntekt(behandlingsInntektsGetter: BehandlingsInntektsGetter, personOp
call.respond(HttpStatusCode.OK, klassifisertInntekt)
}
}
get("{inntektId}") {
withContext(IO) {
val inntektId = call.parameters["inntektId"]?.let { InntektId(it) } ?: throw MissingRequestParameterException("inntektId")
val inntekt = klassifiserOgMapInntekt(behandlingsInntektsGetter.getSpesifisertInntekt(inntektId = inntektId))
call.respond(HttpStatusCode.OK, inntekt)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,17 @@ internal class InntektRouteSpec {
}
}

@Test
fun `Hente klassifisert inntekt basert på inntekt ID`() = testApp {
handleAuthenticatedAzureAdRequest(HttpMethod.Get, "/v2/inntekt/klassifisert/${inntektId.id}") {
}.apply {
assertEquals(HttpStatusCode.OK, response.status())
}
handleAuthenticatedAzureAdRequest(HttpMethod.Get, "/v2/inntekt/klassifisert/1234") {
}.apply {
assertEquals(HttpStatusCode.BadRequest, response.status())
}
}
private fun testApp(callback: TestApplicationEngine.() -> Unit) {
withTestApplication(
mockInntektApi(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import io.ktor.server.testing.TestApplicationCall
import io.ktor.server.testing.TestApplicationEngine
import io.ktor.server.testing.TestApplicationRequest
import io.ktor.server.testing.handleRequest
import io.ktor.server.testing.withTestApplication
import io.mockk.mockk
import io.prometheus.client.CollectorRegistry
import no.nav.dagpenger.inntekt.AuthApiKeyVerifier
Expand Down Expand Up @@ -74,11 +73,6 @@ internal object TestApplication {
}
}

internal fun <R> withMockAuthServerAndTestApplication(
moduleFunction: Application.() -> Unit,
test: TestApplicationEngine.() -> R,
): R = withTestApplication(moduleFunction, test)

internal fun TestApplicationEngine.handleAuthenticatedAzureAdRequest(
method: HttpMethod,
uri: String,
Expand Down

0 comments on commit 0ba5d9c

Please sign in to comment.