Skip to content

Commit

Permalink
Oppdatert isPerson nå med hendelseId #deploy-person-service
Browse files Browse the repository at this point in the history
  • Loading branch information
krharum committed Aug 21, 2023
1 parent 6e49be6 commit a41f2b8
Show file tree
Hide file tree
Showing 19 changed files with 545 additions and 287 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@

import no.nav.dolly.bestilling.ConsumerStatus;
import no.nav.dolly.bestilling.personservice.command.PersonServiceExistCommand;
import no.nav.dolly.bestilling.personservice.command.PersonServiceSyncCommand;
import no.nav.dolly.bestilling.personservice.dto.PersonServiceResponse;
import no.nav.dolly.config.credentials.PersonServiceProperties;
import no.nav.dolly.metrics.Timed;
import no.nav.testnav.libs.securitycore.domain.ServerProperties;
import no.nav.testnav.libs.standalone.servletsecurity.exchange.TokenExchange;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

@Service
Expand Down Expand Up @@ -39,13 +37,6 @@ public Mono<PersonServiceResponse> isPerson(String ident) {
.flatMap(token -> new PersonServiceExistCommand(webClient, ident, token.getTokenValue()).call());
}

@Timed(name = "providers", tags = {"operation", "personService_pdlSyncReady"})
public Flux<Boolean> getPdlSyncReady(String ident) {

return tokenService.exchange(serviceProperties)
.flatMapMany(token -> new PersonServiceSyncCommand(webClient, ident, token.getTokenValue()).call());
}

@Override
public String serviceUrl() {
return serviceProperties.getUrl();
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ type FalskIdentitetIdentifiserendeInformasjon {
statsborgerskap: [String!]!
}

type Foedested

type Foedsel {
foedekommune: String
foedeland: String
Expand Down Expand Up @@ -807,8 +809,11 @@ input CompletionParameters {
}

input Criterion {
" Feltnavn ikludert sti til ønsket felt (Eksempel: person.navn.fornavn)"
fieldName: String!
and: [Criterion]
" Feltnavn inkludert sti til ønsket felt (Eksempel: person.navn.fornavn)"
fieldName: String
not: [Criterion]
or: [Criterion]
"""
Søk i historiske data
Expand All @@ -817,7 +822,7 @@ input Criterion {
null = søke i både historiske og gjeldende data.
"""
searchHistorical: Boolean
searchRule: SearchRule!
searchRule: SearchRule
}

input Paging {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package no.nav.testnav.apps.personservice.consumer;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.apps.personservice.config.credentials.PdlServiceProperties;
import no.nav.testnav.apps.personservice.consumer.command.GetPdlAktoerCommand;
import no.nav.testnav.apps.personservice.consumer.command.GetPdlPersonCommand;
import no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql.MetadataDTO;
import no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql.PdlAktoer;
import no.nav.testnav.apps.personservice.domain.Person;
import no.nav.testnav.libs.servletsecurity.exchange.TokenExchange;
Expand All @@ -16,8 +18,11 @@
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;

import static java.util.Collections.emptyList;
import static java.util.Objects.nonNull;
Expand Down Expand Up @@ -81,17 +86,28 @@ private boolean isGruppe(PdlAktoer.AktoerIdent ident, String gruppe) {
return isNotBlank(ident.getIdent()) && !ident.getHistorisk() && gruppe.equals(ident.getGruppe());
}

private boolean isPresent(PdlAktoer pdlAktoer) {
private boolean isPresent(PdlAktoer pdlAktoer, Set<String> opplysningId) {

List<PdlAktoer.AktoerIdent> identer = nonNull(pdlAktoer) && nonNull(pdlAktoer.getData()) && nonNull(pdlAktoer.getData().getHentIdenter()) ?
pdlAktoer.getData().getHentIdenter().getIdenter() : emptyList();
if (nonNull(opplysningId)) {

return nonNull(pdlAktoer) &&
pdlAktoer.getErrors().stream().noneMatch(value -> value.getMessage().equals("Fant ikke person")) &&
identer.stream()
.filter(ident -> identer.stream().anyMatch(ident2 -> isGruppe(ident2, "AKTORID")))
.anyMatch(ident -> identer.stream().anyMatch(ident2 -> isGruppe(ident2, "FOLKEREGISTERIDENT")) ||
identer.stream().anyMatch(ident2 -> isGruppe(ident2, "NPID")));
var person = pdlAktoer.getData().getHentPerson();
return Stream.of(person.getNavn(), person.getFoedsel(), person.getFolkeregisteridentifikator(), person.getFolkeregisterpersonstatus(), person.getBostedsadresse())
.flatMap(Collection::stream)
.map(MetadataDTO::getMetadata)
.map(MetadataDTO.Metadata::getOpplysningsId)
.anyMatch(opplysningId::contains);
} else {

List<PdlAktoer.AktoerIdent> identer = nonNull(pdlAktoer) && nonNull(pdlAktoer.getData()) && nonNull(pdlAktoer.getData().getHentIdenter()) ?
pdlAktoer.getData().getHentIdenter().getIdenter() : emptyList();

return nonNull(pdlAktoer) &&
pdlAktoer.getErrors().stream().noneMatch(value -> value.getMessage().equals("Fant ikke person")) &&
identer.stream()
.filter(ident -> identer.stream().anyMatch(ident2 -> isGruppe(ident2, "AKTORID")))
.anyMatch(ident -> identer.stream().anyMatch(ident2 -> isGruppe(ident2, "FOLKEREGISTERIDENT")) ||
identer.stream().anyMatch(ident2 -> isGruppe(ident2, "NPID")));
}
}

public Mono<Optional<PdlAktoer.AktoerIdent>> getAktoer(String ident) {
Expand All @@ -109,13 +125,13 @@ public Mono<Optional<PdlAktoer.AktoerIdent>> getAktoer(String ident) {
}));
}

public Mono<Boolean> isPerson(String ident) {
public Mono<Boolean> isPerson(String ident, Set<String> hendelseId) {

log.info("Henter ident {} fra PDL", ident);
return tokenExchange
.exchange(serviceProperties)
.flatMap(token -> Mono.zip(new GetPdlAktoerCommand(webClient, PDL_URL, ident, token.getTokenValue()).call(),
new GetPdlAktoerCommand(webClient, PDL_Q1_URL, ident, token.getTokenValue()).call())
.map(tuple -> isPresent(tuple.getT1()) && isPresent(tuple.getT2())));
.map(tuple -> isPresent(tuple.getT1(), hendelseId) && isPresent(tuple.getT2(), hendelseId)));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.testnav.apps.personservice.consumer.command;

import com.fasterxml.jackson.databind.JsonNode;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql.PdlAktoer;
Expand Down Expand Up @@ -40,12 +41,12 @@ public class GetPdlAktoerCommand implements Callable<Mono<PdlAktoer>> {
public Mono<PdlAktoer> call() {

Map<String, Object> variables = new HashMap<>();
variables.put("ident", ident);
variables.put("ident1", ident);

String query = null;
InputStream queryStream = Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("pdl/pdlHentIdent.graphql");
.getResourceAsStream("pdl/pdlPersonQuery.graphql");
try {
query = new BufferedReader(new InputStreamReader(queryStream, StandardCharsets.UTF_8))
.lines().collect(Collectors.joining("\n"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
@Value
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class Bostedsadresse {
public class Bostedsadresse extends MetadataDTO {
Vegadresse vegadresse;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
@Value
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class Foedsel {
public class Foedsel extends MetadataDTO {

LocalDate foedselsdato;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
@Value
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class Folkeregisteridentifikator {
public class Folkeregisteridentifikator extends MetadataDTO {
String identifikasjonsnummer;
String status;
String type;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Value;

@Value
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class Folkeregisterpersonstatus extends MetadataDTO {
String identifikasjonsnummer;
String status;
String type;
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,61 @@
package no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Value;

import java.util.ArrayList;
import java.util.List;

@Value
import static java.util.Objects.isNull;

@Data
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class HentPerson {
List<Navn> navn;
List<Foedsel> foedsel;
List<Bostedsadresse> bostedsadresse;
List<Folkeregisteridentifikator> folkeregisteridentifikator;
List<Folkeregisterpersonstatus> folkeregisterpersonstatus;

public List<Navn> getNavn() {

if (isNull(navn)) {
navn = new ArrayList<>();
}
return navn;
}

public List<Foedsel> getFoedsel() {

if (isNull(foedsel)) {
foedsel = new ArrayList<>();
}
return foedsel;
}

public List<Bostedsadresse> getBostedsadresse() {

if (isNull(bostedsadresse)) {
bostedsadresse = new ArrayList<>();
}
return bostedsadresse;
}

public List<Folkeregisteridentifikator> getFolkeregisteridentifikator() {

if (isNull(folkeregisteridentifikator)) {
folkeregisteridentifikator = new ArrayList<>();
}
return folkeregisteridentifikator;
}

public List<Folkeregisterpersonstatus> getFolkeregisterpersonstatus() {

if (isNull(folkeregisterpersonstatus)) {
folkeregisterpersonstatus = new ArrayList<>();
}
return folkeregisterpersonstatus;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class MetadataDTO {

Metadata metadata;

@Data
@AllArgsConstructor
@NoArgsConstructor(force = true)
public static class Metadata {

String opplysningsId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
@Value
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class Navn {
public class Navn extends MetadataDTO {
String fornavn;
String mellomnavn;
String etternavn;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class PdlAktoer {
@NoArgsConstructor(force = true)
public static class Data {
HentIdenter hentIdenter;
HentPerson hentPerson;
}

@lombok.Data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import lombok.RequiredArgsConstructor;
import no.nav.testnav.apps.personservice.consumer.dto.pdl.graphql.PdlAktoer.AktoerIdent;
import no.nav.testnav.apps.personservice.domain.Person;
import no.nav.testnav.apps.personservice.service.PdlSyncService;
import no.nav.testnav.apps.personservice.service.PersonService;
import no.nav.testnav.libs.dto.personservice.v1.PersonDTO;
import org.springframework.http.ResponseEntity;
Expand All @@ -15,12 +14,14 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
import org.webjars.NotFoundException;
import reactor.core.publisher.Mono;

import java.util.Optional;
import java.util.Set;

import static java.lang.String.format;

Expand All @@ -30,7 +31,6 @@
public class PersonController {

private final PersonService personService;
private final PdlSyncService pdlSyncService;

@PostMapping
public ResponseEntity<Object> createPerson(
Expand Down Expand Up @@ -62,16 +62,10 @@ public Mono<PersonDTO> getPerson(

@GetMapping("/{ident}/exists")
public Mono<Boolean> isPerson(
@PathVariable("ident") @Size(min = 11, max = 11, message = "Ident må ha 11 siffer") String ident) {

return personService.isPerson(ident);
}

@GetMapping("/{ident}/sync")
public Boolean syncPdlPersonReady(
@PathVariable("ident") @Size(min = 11, max = 11, message = "Ident må ha 11 siffer") String ident) {
@PathVariable("ident") @Size(min = 11, max = 11, message = "Ident må ha 11 siffer") String ident,
@RequestParam(value = "hendelseId", required = false) Set<String> hendelseId) {

return pdlSyncService.syncPdlPersonReady(ident);
return personService.isPerson(ident, hendelseId);
}

@GetMapping("/{ident}/aktoerId")
Expand Down
Loading

0 comments on commit a41f2b8

Please sign in to comment.