Skip to content

Commit

Permalink
Opplegg for behandlingsnummer inn til PDL
Browse files Browse the repository at this point in the history
  • Loading branch information
jolarsen committed May 4, 2023
1 parent c14312d commit 2abfb78
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand All @@ -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();
}

Expand All @@ -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
Expand All @@ -79,7 +86,29 @@ public Person hentPerson(HentPersonQueryRequest q, PersonResponseProjection p, b

@Override
public List<HentPersonBolkResult> 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<HentPersonBolkResult> hentPersonBolk(Ytelse ytelse, HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p) {
return query(ytelse, q, p, HentPersonBolkQueryResponse.class).hentPersonBolk();
}

@Override
Expand All @@ -94,12 +123,18 @@ public List<HentIdenterBolkResult> hentIdenterBolkResults(HentIdenterBolkQueryRe

@Override
public <T extends GraphQLResult<?>> T query(GraphQLOperationRequest q, GraphQLResponseProjection p, Class<T> clazz) {
return query(new GraphQLRequest(q, p), clazz);
return query(null, new GraphQLRequest(q, p), clazz);
}

@Override
public <T extends GraphQLResult<?>> T query(Ytelse ytelse, GraphQLOperationRequest q, GraphQLResponseProjection p, Class<T> clazz) {
return query(ytelse, new GraphQLRequest(q, p), clazz);
}

private <T extends GraphQLResult<?>> T query(GraphQLRequest req, Class<T> clazz) {
private <T extends GraphQLResult<?>> T query(Ytelse ytelse, GraphQLRequest req, Class<T> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,18 @@ public interface Persondata {

List<HentPersonBolkResult> hentPersonBolk(HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p);

Person hentPerson(Ytelse ytelse, HentPersonQueryRequest q, PersonResponseProjection p);

Person hentPerson(Ytelse ytelse, HentPersonQueryRequest q, PersonResponseProjection p, boolean ignoreNotFound);

List<HentPersonBolkResult> hentPersonBolk(Ytelse ytelse, HentPersonBolkQueryRequest q, HentPersonBolkResultResponseProjection p);

GeografiskTilknytning hentGT(HentGeografiskTilknytningQueryRequest q, GeografiskTilknytningResponseProjection p);

<T extends GraphQLResult<?>> T query(GraphQLOperationRequest q, GraphQLResponseProjection p, Class<T> clazz);

<T extends GraphQLResult<?>> T query(Ytelse ytelse, GraphQLOperationRequest q, GraphQLResponseProjection p, Class<T> clazz);

private Optional<String> hentId(String id, IdentGruppe gruppe, boolean ignoreNotFound) {
var query = new HentIdenterQueryRequest();
query.setIdent(id);
Expand All @@ -87,4 +95,23 @@ private Optional<String> 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;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,17 @@ 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();
}

@Test
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();
Expand All @@ -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
Expand Down

0 comments on commit 2abfb78

Please sign in to comment.