From f1f1ad0469419e27b38d30040c7b4e4acbbcc01d Mon Sep 17 00:00:00 2001 From: Ludvig Hozman Date: Wed, 9 Oct 2024 14:33:05 +0200 Subject: [PATCH] Legg til aktor id route & tillat ident i prod --- .nais/prod.yml | 2 +- src/main/kotlin/no/nav/api/pdl/PdlRoutes.kt | 25 +++++++++++++ src/main/resources/pdl/schema.graphqls | 4 +-- src/main/resources/saf/schema.graphqls | 15 ++++---- src/test/kotlin/no/nav/api/pdl/PdlTest.kt | 39 +++++++++++++++++++++ 5 files changed, 74 insertions(+), 11 deletions(-) diff --git a/.nais/prod.yml b/.nais/prod.yml index ee87197..05a8f87 100644 --- a/.nais/prod.yml +++ b/.nais/prod.yml @@ -69,7 +69,7 @@ spec: namespace: poao env: - name: IDENT_ALLOW_LIST - value: "R154727,R156418,R158345,R158346,R160569,R165950,R165951,R165952,R150818,R150819,R155645,R162552,D159483,U143410" + value: "R154727,R156418,R158345,R158346,R160569,R165950,R165951,R165952,R150818,R150819,R155645,R162552,D159483,U143410,R172987" - name: OPPFOLGING_URL value: "http://veilarboppfolging.poao/veilarboppfolging/api" - name: OPPFOLGING_SCOPE diff --git a/src/main/kotlin/no/nav/api/pdl/PdlRoutes.kt b/src/main/kotlin/no/nav/api/pdl/PdlRoutes.kt index 2ba0ebb..24acec6 100644 --- a/src/main/kotlin/no/nav/api/pdl/PdlRoutes.kt +++ b/src/main/kotlin/no/nav/api/pdl/PdlRoutes.kt @@ -21,6 +21,16 @@ fun Route.configurePdlRoutes(pdlService: PdlService) { val fnr = call.deserializeFnr() ?: return@post call.respond(HttpStatusCode.BadRequest) call.respond(pdlService.hentPersonalia(fnr, payload)) } + route("aktorid") { + install(NotarizedRoute()) { + post = ApiV2.hentAktorId + } + post { + val token = call.getJWT() + val fnr = call.deserializeFnr() ?: return@post call.respond(HttpStatusCode.BadRequest) + call.respond(pdlService.hentAktorid(fnr, token)) + } + } } } @@ -41,6 +51,21 @@ private object ApiV2 { tags("PDL") canRespond(CommonModels.standardResponses) } + + val hentAktorId = + PostInfo.builder { + summary("Hent aktor ID") + description("Henter aktorid for en person") + request { + requestType(typeOf()) + description("Brukers ident") + } + response { + responseCode(HttpStatusCode.OK) + responseType(typeOf()) + description("identens tilhørende aktorid") + } + } } @Serializable diff --git a/src/main/resources/pdl/schema.graphqls b/src/main/resources/pdl/schema.graphqls index 89ce2a4..826c693 100644 --- a/src/main/resources/pdl/schema.graphqls +++ b/src/main/resources/pdl/schema.graphqls @@ -749,7 +749,7 @@ input Criterion { input SearchRule { # Sjekker om feltet finnes / at det ikke har en null verdi. - exists:String + exists:Boolean # Filtrerer bort treff hvor felt inneholder input verdi notEquals:String # Begrenser treff til kun de hvor felt har input verdi @@ -759,7 +759,7 @@ input SearchRule { # Søk som gir treff også for små variasjoner i skrivemåte fuzzy:String # Søk som gir tilfeldig poengsum til hvert treff (kun ment til generering av testdata) - random:String + random:Float # Bruk "?" som wildcard for enkelt tegn, og "*" som wildcard for 0 eller flere tegn. wildcard:String # Gir treff når opgitt feltstarter med opgitt verdi. diff --git a/src/main/resources/saf/schema.graphqls b/src/main/resources/saf/schema.graphqls index bb134bd..574ec22 100644 --- a/src/main/resources/saf/schema.graphqls +++ b/src/main/resources/saf/schema.graphqls @@ -528,17 +528,16 @@ type Dokumentvariant { filnavn: String # Unik identifikator per fil. - # * NB: Feltet skal kun brukes etter avtale med Team Dokument. - filuuid: String @deprecated(reason: "Feltet er deprekert og vil bli fjernet i fremtiden. Feltet skal kun brukes etter avtale med Team Dokument.") + # * NB: Feltet skal kun brukes etter avtale med Team Dokumentløsninger. + filuuid: String @deprecated(reason: "Feltet er deprekert og vil bli fjernet i fremtiden. Feltet skal kun brukes etter avtale med Team Dokumentløsninger.") - # Dokumentets filtype, f.eks. PDFA, XML eller JPG. Gyldige verdier finnes på siden Fagarkiv - Filtype. - # * NB: Informasjonen er ikke garantert å samsvare med dokumentets faktiske filtype, da dette ikke valideres under arkivering. - # * NB: Verdien 'PDFA' mappes til 'PDF' - # * NB: Feltet skal kun brukes etter avtale med Team Dokument. - filtype: String @deprecated(reason: "Feltet er deprekert og er kun til internt bruk. Feltet skal kun brukes etter avtale med Team Dokument.") + # Dokumentets filtype. PDF, JPEG, PNG, TIFF, XLSX, JSON, XML, AXML, DXML, RTF er verdier som kan returneres. + # * Gyldige verdier finnes på siden Fagarkiv - Filtype (confluence). NB: Verdien 'PDFA' mappes til 'PDF'. + # * Vær oppmerksom på at dette ikke er garantert å samsvare med dokumentets faktiske filtype, da feltet lenge ikke ble sjekket opp mot filinnholdet. + filtype: String # Dokumentets filstørrelse i bytes. - filstoerrelse: Int @deprecated(reason: "Feltet er deprekert og er kun til internt bruk. Feltet skal kun brukes etter avtale med Team Dokument.") + filstoerrelse: Int @deprecated(reason: "Feltet er deprekert og er kun til internt bruk. Feltet skal kun brukes etter avtale med Team Dokumentløsninger.") # Sier hvorvidt saksbehandler som gjør oppslaget vil få tilgang til å åpne denne dokumentvarianten. # * Dersom verdien er false, vil tilgang bli avslått dersom saksbehandler forsøker å åpne dokumentet. diff --git a/src/test/kotlin/no/nav/api/pdl/PdlTest.kt b/src/test/kotlin/no/nav/api/pdl/PdlTest.kt index c5df846..30bb6ab 100644 --- a/src/test/kotlin/no/nav/api/pdl/PdlTest.kt +++ b/src/test/kotlin/no/nav/api/pdl/PdlTest.kt @@ -54,4 +54,43 @@ internal class PdlTest { assertEquals(1, person.data?.hentPerson?.foedselsdato?.size) assertEquals(LocalDate(2020, 6, 6), person.data?.hentPerson?.foedselsdato?.get(0)?.foedselsdato) } + + @Test + fun `should be able to get aktorID for ident`() = + runBlocking { + val mockEngine = + MockEngine { request -> + val body = (request.body as TextContent).text + assertTrue(body.contains("variables")) + assertTrue(body.contains("hentIdenter")) + respond( + status = HttpStatusCode.OK, + headers = + headersOf( + HttpHeaders.ContentType, + "application/json", + ), + content = + """ + { + "data": { + "hentIdenter": { + "identer": [ + { "ident": "123456789" } + ] + } + } + } + """.trimIndent(), + ) + } + val tokenClient = mockk() + every { tokenClient.exchangeOnBehalfOfToken("token") } returns "new_token" + + val pdlClient = PdlClient("http://no.no", tokenClient, mockEngine) + val identer = pdlClient.hentAktorid("10108000398", "token") + + assertEquals(1, identer.data?.hentIdenter?.identer?.size) + assertEquals("123456789", identer.data?.hentIdenter?.identer?.get(0)?.ident) + } }