diff --git a/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/AbstractPersonKlient.java b/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/AbstractPersonKlient.java index ab2a14da8..d9fc51573 100644 --- a/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/AbstractPersonKlient.java +++ b/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/AbstractPersonKlient.java @@ -3,6 +3,7 @@ import java.net.HttpURLConnection; import java.net.http.HttpRequest; import java.util.List; +import java.util.Optional; import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperationRequest; import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLRequest; @@ -37,6 +38,7 @@ public abstract class AbstractPersonKlient implements Persondata { private final PdlDefaultErrorHandler errorHandler; private final Tema tema; + private final Ytelse defaultYtelse; private final RestClient restKlient; private final RestConfig restConfig; @@ -49,9 +51,14 @@ protected AbstractPersonKlient(Tema tema) { } protected AbstractPersonKlient(RestClient restKlient, Tema tema) { + this(restKlient, tema, Ytelse.FORELDREPENGER); + } + + protected AbstractPersonKlient(RestClient restKlient, Tema tema, Ytelse ytelse) { this.restKlient = restKlient; this.restConfig = RestConfig.forClient(this.getClass()); this.tema = tema; + this.defaultYtelse = ytelse; this.errorHandler = new PdlDefaultErrorHandler(); } @@ -62,7 +69,7 @@ public GeografiskTilknytning hentGT(HentGeografiskTilknytningQueryRequest q, Geo @Override public Person hentPerson(HentPersonQueryRequest q, PersonResponseProjection p) { - return query(q, p, HentPersonQueryResponse.class).hentPerson(); + return query(defaultYtelse, q, p, HentPersonQueryResponse.class).hentPerson(); } @Override @@ -79,7 +86,29 @@ public Person hentPerson(HentPersonQueryRequest q, PersonResponseProjection p, b @Override public List hentPersonBolk(HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p) { - return query(q, p, HentPersonBolkQueryResponse.class).hentPersonBolk(); + return query(defaultYtelse, q, p, HentPersonBolkQueryResponse.class).hentPersonBolk(); + } + + @Override + public Person hentPerson(Ytelse ytelse, HentPersonQueryRequest q, PersonResponseProjection p) { + return query(ytelse, q, p, HentPersonQueryResponse.class).hentPerson(); + } + + @Override + public Person hentPerson(Ytelse ytelse, HentPersonQueryRequest q, PersonResponseProjection p, boolean ignoreNotFound) { + try { + return hentPerson(ytelse, q, p); + } catch (PdlException e) { + if (e.getStatus() == HttpURLConnection.HTTP_NOT_FOUND && ignoreNotFound) { + return null; + } + throw e; + } + } + + @Override + public List hentPersonBolk(Ytelse ytelse, HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p) { + return query(ytelse, q, p, HentPersonBolkQueryResponse.class).hentPersonBolk(); } @Override @@ -94,12 +123,18 @@ public List hentIdenterBolkResults(HentIdenterBolkQueryRe @Override public > T query(GraphQLOperationRequest q, GraphQLResponseProjection p, Class clazz) { - return query(new GraphQLRequest(q, p), clazz); + return query(null, new GraphQLRequest(q, p), clazz); + } + + @Override + public > T query(Ytelse ytelse, GraphQLOperationRequest q, GraphQLResponseProjection p, Class clazz) { + return query(ytelse, new GraphQLRequest(q, p), clazz); } - private > T query(GraphQLRequest req, Class clazz) { + private > T query(Ytelse ytelse, GraphQLRequest req, Class clazz) { var method = new RestRequest.Method(RestRequest.WebMethod.POST, HttpRequest.BodyPublishers.ofString(req.toHttpJsonBody())); var restRequest = RestRequest.newRequest(method, restConfig.endpoint(), restConfig).header("TEMA", tema.name()); + Optional.ofNullable(ytelse).ifPresent(bnr -> restRequest.header("behandlingsnummer", bnr.getBehandlingsnummer())); var res = restKlient.send(restRequest, clazz); if (res.hasErrors()) { return errorHandler.handleError(res.getErrors(), restConfig.endpoint(), PDL_ERROR_RESPONSE); diff --git a/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/Persondata.java b/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/Persondata.java index f8a8ed64e..bf20f617a 100644 --- a/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/Persondata.java +++ b/integrasjon/person-klient/src/main/java/no/nav/vedtak/felles/integrasjon/person/Persondata.java @@ -66,10 +66,18 @@ public interface Persondata { List hentPersonBolk(HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p); + Person hentPerson(Ytelse ytelse, HentPersonQueryRequest q, PersonResponseProjection p); + + Person hentPerson(Ytelse ytelse, HentPersonQueryRequest q, PersonResponseProjection p, boolean ignoreNotFound); + + List hentPersonBolk(Ytelse ytelse, HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p); + GeografiskTilknytning hentGT(HentGeografiskTilknytningQueryRequest q, GeografiskTilknytningResponseProjection p); > T query(GraphQLOperationRequest q, GraphQLResponseProjection p, Class clazz); + > T query(Ytelse ytelse, GraphQLOperationRequest q, GraphQLResponseProjection p, Class clazz); + private Optional hentId(String id, IdentGruppe gruppe, boolean ignoreNotFound) { var query = new HentIdenterQueryRequest(); query.setIdent(id); @@ -87,4 +95,23 @@ private Optional hentId(String id, IdentGruppe gruppe, boolean ignoreNot throw e; } } + + enum Ytelse { // Persondata innhentes for ytelse. Default = Foreldrepenger + // Utelatt TILBAKEKREVING("B323") Bruk aktuell ytelse + ENGANGSSTØNAD("B321"), + FORELDREPENGER("B271"), + SVANGERSKAPSPENGER("B322"), + PLEIEPENGER("B249"); // PGA fptilbake + + private final String behandlingsnummer; + + Ytelse(String behandlingsnummer) { + this.behandlingsnummer = behandlingsnummer; + } + + public String getBehandlingsnummer() { + return behandlingsnummer; + } + } + } diff --git a/integrasjon/person-klient/src/test/java/no/nav/vedtak/felles/integrasjon/person/PersondataKlientTest.java b/integrasjon/person-klient/src/test/java/no/nav/vedtak/felles/integrasjon/person/PersondataKlientTest.java index c8946f223..1e91dd05c 100644 --- a/integrasjon/person-klient/src/test/java/no/nav/vedtak/felles/integrasjon/person/PersondataKlientTest.java +++ b/integrasjon/person-klient/src/test/java/no/nav/vedtak/felles/integrasjon/person/PersondataKlientTest.java @@ -81,6 +81,7 @@ void skal_returnere_person() { assertThat(person.getNavn().get(0).getFornavn()).isNotEmpty(); var rq = captor.getValue(); rq.validateRequest(r -> assertThat(r.headers().map().get("TEMA")).contains("FOR")); + rq.validateRequest(r -> assertThat(r.headers().map().get("behandlingsnummer")).contains(Persondata.Ytelse.FORELDREPENGER.getBehandlingsnummer())); assertThat(rq.validateDelayedHeaders(Set.of("Authorization", "Nav-Consumer-Token", "Nav-Consumer-Id"))).isTrue(); } @@ -88,7 +89,9 @@ void skal_returnere_person() { void skal_returnere_bolk_med_person() { var resource = getClass().getClassLoader().getResource("pdl/personBolkResponse.json"); var response = DefaultJsonMapper.fromJson(resource, HentPersonBolkQueryResponse.class); - when(restClient.send(any(RestRequest.class), any())).thenReturn(response); + var captor = ArgumentCaptor.forClass(RestRequest.class); + + when(restClient.send(captor.capture(), any(Class.class))).thenReturn(response); var query = new HentPersonBolkQueryRequest(); @@ -98,12 +101,15 @@ void skal_returnere_bolk_med_person() { .navn(new NavnResponseProjection().fornavn()) .adressebeskyttelse(new AdressebeskyttelseResponseProjection().gradering())); - var personer = pdlKlient.hentPersonBolk(query, projection); + var personer = pdlKlient.hentPersonBolk(Persondata.Ytelse.SVANGERSKAPSPENGER, query, projection); assertThat(personer).hasSize(1); assertThat(personer.get(0).getIdent()).isEqualTo("12345678901"); assertThat(personer.get(0).getPerson().getAdressebeskyttelse()).hasSize(1); assertThat(personer.get(0).getPerson().getAdressebeskyttelse().get(0).getGradering()).isEqualTo(AdressebeskyttelseGradering.UGRADERT); + var rq = captor.getValue(); + rq.validateRequest(r -> assertThat(r.headers().map().get("TEMA")).contains("FOR")); + rq.validateRequest(r -> assertThat(r.headers().map().get("behandlingsnummer")).contains(Persondata.Ytelse.SVANGERSKAPSPENGER.getBehandlingsnummer())); } @Test