diff --git a/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/BehandlingsInntektsGetter.kt b/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/BehandlingsInntektsGetter.kt index 990ad1da..08edda72 100644 --- a/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/BehandlingsInntektsGetter.kt +++ b/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/BehandlingsInntektsGetter.kt @@ -16,8 +16,8 @@ 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)) } @@ -25,13 +25,13 @@ class BehandlingsInntektsGetter( 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()}" } @@ -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), + ), ) } diff --git a/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/klassifiserer/KlassifisertInntekt.kt b/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/klassifiserer/KlassifisertInntekt.kt index 78304027..310d1181 100644 --- a/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/klassifiserer/KlassifisertInntekt.kt +++ b/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/klassifiserer/KlassifisertInntekt.kt @@ -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, ) } @@ -33,7 +33,7 @@ private fun mapTilKlassifisertInntektMåneder(klassifisertePosteringer: List, - avvikMåneder: Map> + avvikMåneder: Map>, ) = KlassifisertInntektMåned( årMåned = årmåned, harAvvik = avvikMåneder.containsKey(årmåned), @@ -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, ) - } + }, ) diff --git a/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/v1/InntektRoute.kt b/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/v1/InntektRoute.kt index 42af3ec4..e1a1c5ae 100644 --- a/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/v1/InntektRoute.kt +++ b/dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/v1/InntektRoute.kt @@ -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 @@ -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) + } + } } } diff --git a/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/InntektRouteSpec.kt b/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/InntektRouteSpec.kt index 57654f91..0f8e2a61 100644 --- a/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/InntektRouteSpec.kt +++ b/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/InntektRouteSpec.kt @@ -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( diff --git a/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/TestApplication.kt b/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/TestApplication.kt index b02d01f0..b00be0f4 100644 --- a/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/TestApplication.kt +++ b/dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/v1/TestApplication.kt @@ -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 @@ -74,11 +73,6 @@ internal object TestApplication { } } - internal fun withMockAuthServerAndTestApplication( - moduleFunction: Application.() -> Unit, - test: TestApplicationEngine.() -> R, - ): R = withTestApplication(moduleFunction, test) - internal fun TestApplicationEngine.handleAuthenticatedAzureAdRequest( method: HttpMethod, uri: String,