From 3213f9399d7a47cf394bbf265940b9b38d920ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristen=20H=C3=A6rum?= Date: Wed, 5 Mar 2025 10:18:08 +0100 Subject: [PATCH] Feature/add legacy search functionality and mapping strategies --- .../dollysearchservice/dto/Person.java | 121 ++++++++++++ .../mapper/LegacyRequestMappingStrategy.java | 57 ++++++ .../mapper/LegacyResponseMappingStrategy.java | 181 ++++++++++++++++++ .../provider/LegacyController.java | 28 +++ .../service/LegacyService.java | 42 ++++ .../utils/OpenSearchPersonQueryUtils.java | 20 +- .../utils/OpenSearchQueryBuilder.java | 2 + .../data/dollysearchservice/v1/PersonDTO.java | 120 ++++++++++++ .../dollysearchservice/v1/PersonRequest.java | 2 + .../dollysearchservice/v1/PersonSearch.java | 166 ++++++++++++++++ 10 files changed, 733 insertions(+), 6 deletions(-) create mode 100644 apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyRequestMappingStrategy.java create mode 100644 apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyResponseMappingStrategy.java create mode 100644 apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/provider/LegacyController.java create mode 100644 apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/service/LegacyService.java create mode 100644 libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonDTO.java create mode 100644 libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonSearch.java diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/dto/Person.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/dto/Person.java index ceff05e392..459b4f2835 100644 --- a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/dto/Person.java +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/dto/Person.java @@ -4,7 +4,12 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import no.nav.testnav.libs.data.pdlforvalter.v1.FolkeregisterPersonstatusDTO; +import no.nav.testnav.libs.data.pdlforvalter.v1.ForelderBarnRelasjonDTO; +import no.nav.testnav.libs.data.pdlforvalter.v1.KjoennDTO; +import no.nav.testnav.libs.data.pdlforvalter.v1.SivilstandDTO; +import java.time.LocalDate; import java.util.List; @Data @@ -15,6 +20,7 @@ public class Person { private HentIdenter hentIdenter; private HentPerson hentPerson; + private List tags; @Data @Builder @@ -31,6 +37,7 @@ public static class HentIdenter { public static class Identer { private String gruppe; private String ident; + private Boolean historisk; } @Data @@ -39,6 +46,15 @@ public static class Identer { @AllArgsConstructor public static class HentPerson { private List navn; + private List foedselsdato; + private List kjoenn; + private List sivilstand; + private List statsborgerskap; + private List folkeregisterpersonstatus; + private List doedsfall; + private List innflyttingTilNorge; + private List utflyttingFraNorge; + private List forelderBarnRelasjon; } @Data @@ -51,4 +67,109 @@ public static class Navn { private String mellomnavn; private String etternavn; } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Foedselsdato { + + private LocalDate foedselsdato; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Kjoenn { + + private KjoennDTO.Kjoenn kjoenn; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Sivilstand { + + private SivilstandDTO.Sivilstand type; + private String relatertVedSivilstand; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Statsborgerskap { + + private String land; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Folkeregisterpersonstatus { + + private FolkeregisterPersonstatusDTO.FolkeregisterPersonstatus status; + private Folkeregistermetadata folkeregistermetadata; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Folkeregistermetadata { + + private LocalDate gyldighetstidspunkt; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Doedsfall { + + private LocalDate doedsdato; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class InnflyttingTilNorge { + + private String fraflyttingsland; + private String fraflyttingsstedIUtlandet; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class UtflyttingFraNorge { + + private String tilflyttingsland; + private String tilflyttingsstedIUtlandet; + private LocalDate utflyttingsdato; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ForelderBarnRelasjon { + + private String relatertPersonsIdent; + private ForelderBarnRelasjonDTO.Rolle relatertPersonsRolle; + private ForelderBarnRelasjonDTO.Rolle minRolleForPerson; + + public boolean isBarn() { + return relatertPersonsRolle == ForelderBarnRelasjonDTO.Rolle.BARN; + } + + public boolean isForelder() { + return minRolleForPerson == ForelderBarnRelasjonDTO.Rolle.BARN; + } + } } diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyRequestMappingStrategy.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyRequestMappingStrategy.java new file mode 100644 index 0000000000..4b6e279a6a --- /dev/null +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyRequestMappingStrategy.java @@ -0,0 +1,57 @@ +package no.nav.testnav.dollysearchservice.mapper; + +import ma.glasnost.orika.CustomMapper; +import ma.glasnost.orika.MapperFactory; +import ma.glasnost.orika.MappingContext; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonRequest; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonSearch; +import no.nav.testnav.libs.data.pdlforvalter.v1.FolkeregisterPersonstatusDTO.FolkeregisterPersonstatus; +import no.nav.testnav.libs.data.pdlforvalter.v1.KjoennDTO; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +import static java.util.Objects.nonNull; +import static org.apache.commons.lang3.StringUtils.isNotBlank; + +@Component +public class LegacyRequestMappingStrategy implements MappingStrategy { + + @Override + public void register(MapperFactory factory) { + + factory.classMap(PersonSearch.class, PersonRequest.class) + .customize(new CustomMapper() { + @Override + public void mapAtoB(PersonSearch personSearch, PersonRequest personRequest, MappingContext context) { + + Optional.ofNullable(personSearch.getAlder()) + .ifPresent(alder -> { + personRequest.setAlderFom(nonNull(alder.getFra()) ? + alder.getFra().intValue() : null); + personRequest.setAlderTom(nonNull(alder.getTil()) ? + alder.getTil().intValue() : null); + }); + + Optional.ofNullable(personSearch.getPersonstatus()) + .ifPresent(personstatus -> + personRequest.setPersonStatus(FolkeregisterPersonstatus.valueOf(personstatus.getStatus()))); + + Optional.ofNullable(personSearch.getKjoenn()) + .ifPresent(kjoenn -> personRequest.setKjoenn(KjoennDTO.Kjoenn.valueOf(kjoenn))); + + Optional.ofNullable(personSearch.getNasjonalitet()) + .ifPresent(nasjonalitet -> personRequest.setStatsborgerskap(nasjonalitet.getStatsborgerskap())); + + Optional.ofNullable(personSearch.getAdresser()) + .ifPresent(adresser -> { + personRequest.setAdresse(PersonRequest.AdresseRequest.builder() + .harUtenlandsadresse(isNotBlank(adresser.getHarUtenlandskAdresse())) + .harKontaktadresse(isNotBlank(adresser.getHarKontaktadresse())) + .harOppholdsadresse(isNotBlank(adresser.getHarOppholdsadresse())) + .build()); + }); + } + }).register(); + } +} diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyResponseMappingStrategy.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyResponseMappingStrategy.java new file mode 100644 index 0000000000..0541c7a623 --- /dev/null +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/mapper/LegacyResponseMappingStrategy.java @@ -0,0 +1,181 @@ +package no.nav.testnav.dollysearchservice.mapper; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import ma.glasnost.orika.CustomMapper; +import ma.glasnost.orika.MapperFactory; +import ma.glasnost.orika.MappingContext; +import no.nav.testnav.dollysearchservice.dto.Person; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonDTO; +import org.springframework.stereotype.Component; + +import static java.util.Objects.nonNull; +import static org.apache.commons.lang3.BooleanUtils.isFalse; + +@Component +@RequiredArgsConstructor +public class LegacyResponseMappingStrategy implements MappingStrategy { + + private final ObjectMapper objectMapper; + + @Override + public void register(MapperFactory factory) { + factory.classMap(JsonNode.class, PersonDTO.class) + .customize(new CustomMapper<>() { + + @Override + public void mapAtoB(JsonNode response, PersonDTO personDTO, MappingContext context) { + + var person = objectMapper.convertValue(response, Person.class); + personDTO.setTags(person.getTags()); + mapIdent(personDTO, person); + mapAktoerId(personDTO, person); + mapNavn(personDTO, person); + mapFoedselsdato(personDTO, person); + mapKjoenn(personDTO, person); + mapStatsborgerskap(personDTO, person); + mapSivilstand(personDTO, person); + mapPersonstatus(personDTO, person); + mapDoedsdato(personDTO, person); + mapInnflyttingTilNorge(personDTO, person); + mapUtflyttingFraNorge(personDTO, person); + mapForelderBarnRelasjoner(personDTO, person); + } + }) + .register(); + } + + private static void mapIdent(PersonDTO personDTO, Person person) { + + personDTO.setIdent(person.getHentIdenter().getIdenter().stream() + .filter(identer -> "FOLKEREGISTERIDENT".equals(identer.getGruppe()) && + isFalse(identer.getHistorisk())) + .map(Person.Identer::getIdent) + .findFirst().orElse(null)); + } + + private static void mapAktoerId(PersonDTO personDTO, Person person) { + + person.getHentIdenter().getIdenter().stream() + .filter(identer -> "AKTORID".equals(identer.getGruppe()) && + isFalse(identer.getHistorisk())) + .map(Person.Identer::getIdent) + .findFirst() + .ifPresent(personDTO::setAktorId); + } + + private static void mapNavn(PersonDTO personDTO, Person person) { + + person.getHentPerson().getNavn().stream() + .findFirst() + .ifPresent(navn -> { + personDTO.setFornavn(navn.getFornavn()); + personDTO.setMellomnavn(navn.getMellomnavn()); + personDTO.setEtternavn(navn.getEtternavn()); + }); + } + + private static void mapFoedselsdato(PersonDTO personDTO, Person person) { + + person.getHentPerson().getFoedselsdato().stream() + .findFirst() + .ifPresent(foedselsdato -> + personDTO.setFoedselsdato(PersonDTO.FoedselsdatoDTO.builder() + .foedselsdato(foedselsdato.getFoedselsdato()) + .build())); + } + + private static void mapKjoenn(PersonDTO personDTO, Person person) { + + person.getHentPerson().getKjoenn().stream() + .findFirst() + .ifPresent(kjoenn -> + personDTO.setKjoenn(kjoenn.getKjoenn().name())); + } + + private static void mapStatsborgerskap(PersonDTO personDTO, Person person) { + + if (nonNull(person.getHentPerson().getStatsborgerskap())) { + personDTO.setStatsborgerskap(PersonDTO.StatsborgerskapDTO.builder() + .land(person.getHentPerson().getStatsborgerskap().stream() + .map(Person.Statsborgerskap::getLand) + .distinct() + .toList()) + .build()); + } + } + + private static void mapSivilstand(PersonDTO personDTO, Person person) { + + person.getHentPerson().getSivilstand().stream() + .findFirst() + .ifPresent(sivilstand -> + personDTO.setSivilstand(PersonDTO.SivilstandDTO.builder() + .type(sivilstand.getType().name()) + .relatertVedSivilstand(sivilstand.getRelatertVedSivilstand()) + .build())); + } + + private static void mapPersonstatus(PersonDTO personDTO, Person person) { + + if (nonNull(person.getHentPerson().getFolkeregisterpersonstatus())) { + personDTO.setFolkeregisterpersonstatus(person.getHentPerson().getFolkeregisterpersonstatus().stream() + .map(personstatus -> PersonDTO.FolkeregisterpersonstatusDTO.builder() + .status(personstatus.getStatus().name()) + .gyldighetstidspunkt(personstatus.getFolkeregistermetadata().getGyldighetstidspunkt()) + .build()) + .toList()); + } + } + + private void mapDoedsdato(PersonDTO personDTO, Person person) { + + person.getHentPerson().getDoedsfall().stream() + .filter(doedsfall -> nonNull(doedsfall.getDoedsdato())) + .findFirst() + .ifPresent(doedsfall -> personDTO.setDoedsfall(PersonDTO.DoedsfallDTO.builder() + .doedsdato(doedsfall.getDoedsdato()) + .build())); + } + + private void mapInnflyttingTilNorge(PersonDTO personDTO, Person person) { + + person.getHentPerson().getInnflyttingTilNorge().stream() + .findFirst() + .ifPresent(innflyttingTilNorge -> personDTO.setInnfyttingTilNorge(PersonDTO.InnflyttingTilNorgeDTO.builder() + .fraflyttingsland(innflyttingTilNorge.getFraflyttingsland()) + .fraflyttingsstedIUtlandet(innflyttingTilNorge.getFraflyttingsstedIUtlandet()) + .build())); + } + + private void mapUtflyttingFraNorge(PersonDTO personDTO, Person person) { + + person.getHentPerson().getUtflyttingFraNorge().stream() + .findFirst() + .ifPresent(utflyttingFraNorge -> personDTO.setUtfyttingFraNorge(PersonDTO.UtfyttingFraNorgeDTO.builder() + .tilflyttingsland(utflyttingFraNorge.getTilflyttingsland()) + .tilflyttingsstedIUtlandet(utflyttingFraNorge.getTilflyttingsstedIUtlandet()) + .utflyttingsdato(utflyttingFraNorge.getUtflyttingsdato()) + .build())); + } + + private void mapForelderBarnRelasjoner(PersonDTO personDTO, Person person) { + + if (nonNull(person.getHentPerson().getForelderBarnRelasjon())) { + personDTO.setForelderBarnRelasjoner(PersonDTO.ForelderBarnRelasjonDTO.builder() + .barn(person.getHentPerson().getForelderBarnRelasjon().stream() + .filter(Person.ForelderBarnRelasjon::isBarn) + .map(Person.ForelderBarnRelasjon::getRelatertPersonsIdent) + .toList()) + .foreldre(person.getHentPerson().getForelderBarnRelasjon().stream() + .filter(Person.ForelderBarnRelasjon::isForelder) + .map(forelderBarnRelasjon -> PersonDTO.ForelderDTO.builder() + .ident(forelderBarnRelasjon.getRelatertPersonsIdent()) + .rolle(forelderBarnRelasjon.getRelatertPersonsRolle().name()) + .build()) + .toList()) + .build()); + } + } +} diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/provider/LegacyController.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/provider/LegacyController.java new file mode 100644 index 0000000000..59b746872f --- /dev/null +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/provider/LegacyController.java @@ -0,0 +1,28 @@ +package no.nav.testnav.dollysearchservice.provider; + +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import no.nav.testnav.dollysearchservice.service.LegacyService; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonDTO; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonSearch; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Flux; + +@Deprecated +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/legacy") +public class LegacyController { + + private final LegacyService legacyService; + + @PostMapping + @Operation(description = "Søker opp Testnorge-personer som ikke finnes i Dolly.") + public Flux searchPersoner(@RequestBody PersonSearch personSearch) { + + return legacyService.searchPersoner(personSearch); + } +} \ No newline at end of file diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/service/LegacyService.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/service/LegacyService.java new file mode 100644 index 0000000000..e18d5d68ee --- /dev/null +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/service/LegacyService.java @@ -0,0 +1,42 @@ +package no.nav.testnav.dollysearchservice.service; + +import lombok.RequiredArgsConstructor; +import ma.glasnost.orika.MapperFacade; +import no.nav.testnav.dollysearchservice.dto.SearchInternalResponse; +import no.nav.testnav.dollysearchservice.dto.SearchRequest; +import no.nav.testnav.dollysearchservice.utils.OpenSearchQueryBuilder; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonDTO; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonRequest; +import no.nav.testnav.libs.data.dollysearchservice.v1.PersonSearch; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Flux; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class LegacyService { + + private final PersonQueryService personQueryService; + private final MapperFacade mapperFacade; + + public Flux searchPersoner(PersonSearch personSearch) { + + var personRequest = SearchRequest.builder() + .personRequest(mapperFacade.map(personSearch, PersonRequest.class)) + .build(); + + var query = OpenSearchQueryBuilder.buildSearchQuery(personRequest); + + return personQueryService.execQuery(personRequest, query) + .map(this::formatResponse) + .flatMapMany(Flux::fromIterable); + } + + private List formatResponse(SearchInternalResponse response) { + + return response.getPersoner().stream() + .map(person -> mapperFacade.map(person, PersonDTO.class)) + .toList(); + } +} diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchPersonQueryUtils.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchPersonQueryUtils.java index 3ce74429b8..5320e9144f 100644 --- a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchPersonQueryUtils.java +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchPersonQueryUtils.java @@ -141,7 +141,7 @@ public static void addAdressebeskyttelseQuery(BoolQueryBuilder queryBuilder, Sea .must(nestedMatchQuery("hentPerson.adressebeskyttelse", METADATA_HISTORISK, false)) .must(nestedMatchQuery("hentPerson.adressebeskyttelse", "gradering", adresse.getAddressebeskyttelse().name()) - )); + )); } public static void addHarBostedsadresseQuery(BoolQueryBuilder queryBuilder, SearchRequest request) { @@ -275,7 +275,7 @@ public static void addAdresseMatrikkelQuery(BoolQueryBuilder queryBuilder, Searc queryBuilder .must(nestedMatchQuery(BOSTEDSADRESSE, METADATA_HISTORISK, false)) .must(nestedExistQuery(BOSTEDSADRESSE, MATRIKKELADRESSE)) - ); + ); } public static void addHarBostedUkjentQuery(BoolQueryBuilder queryBuilder, SearchRequest request) { @@ -286,7 +286,7 @@ public static void addHarBostedUkjentQuery(BoolQueryBuilder queryBuilder, Search queryBuilder .must(nestedMatchQuery(BOSTEDSADRESSE, METADATA_HISTORISK, false)) .must(nestedExistQuery(BOSTEDSADRESSE, "ukjentBosted")) - ); + ); } public static void addHarDeltBostedQuery(BoolQueryBuilder queryBuilder, SearchRequest request) { @@ -340,10 +340,18 @@ public static void addStatsborgerskapQuery(BoolQueryBuilder queryBuilder, Search .must(nestedMatchQuery("hentPerson.statsborgerskap", METADATA_HISTORISK, false)) .must(nestedMatchQuery("hentPerson.statsborgerskap", "land", request.getPersonRequest().getStatsborgerskap()) - ); + ); } } + public static void addPersonStatusQuery(BoolQueryBuilder queryBuilder, SearchRequest request) { + + Optional.ofNullable(request.getPersonRequest().getPersonStatus()) + .ifPresent(status -> queryBuilder + .must(nestedMatchQuery("hentPerson.folkeregisterpersonstatus", METADATA_HISTORISK, false)) + .must(nestedMatchQuery("hentPerson.folkeregisterpersonstatus", "status", status))); + } + public static void addHarOppholdQuery(BoolQueryBuilder queryBuilder, SearchRequest request) { if (isTrue(request.getPersonRequest().getHarOpphold())) { @@ -357,7 +365,7 @@ public static void addHarNyIdentitetQuery(BoolQueryBuilder queryBuilder, SearchR queryBuilder .must(nestedMatchQuery(HENT_IDENTER, HISTORISK, false)) .must(nestedMatchQuery(HENT_IDENTER, HISTORISK, true) - ); + ); } } @@ -368,7 +376,7 @@ public static void addKjoennQuery(BoolQueryBuilder queryBuilder, SearchRequest r .must(nestedMatchQuery("hentPerson.kjoenn", METADATA_HISTORISK, false)) .must(nestedMatchQuery("hentPerson.kjoenn", "kjoenn", request.getPersonRequest().getKjoenn().name()) - ); + ); } } diff --git a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchQueryBuilder.java b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchQueryBuilder.java index c981baac24..b1ef689124 100644 --- a/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchQueryBuilder.java +++ b/apps/dolly-search-service/src/main/java/no/nav/testnav/dollysearchservice/utils/OpenSearchQueryBuilder.java @@ -42,6 +42,7 @@ import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addHarUtflyttingQuery; import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addIdenttypeQuery; import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addKjoennQuery; +import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addPersonStatusQuery; import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addSivilstandQuery; import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addStatsborgerskapQuery; import static no.nav.testnav.dollysearchservice.utils.OpenSearchPersonQueryUtils.addVergemaalQuery; @@ -100,6 +101,7 @@ private static void setPersonQuery(BoolQueryBuilder queryBuilder, SearchRequest addHarNyIdentitetQuery(queryBuilder, request); addKjoennQuery(queryBuilder, request); addIdenttypeQuery(queryBuilder, request); + addPersonStatusQuery(queryBuilder, request); }); } diff --git a/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonDTO.java b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonDTO.java new file mode 100644 index 0000000000..3e57691282 --- /dev/null +++ b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonDTO.java @@ -0,0 +1,120 @@ +package no.nav.testnav.libs.data.dollysearchservice.v1; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PersonDTO { + + private String fornavn; + private String mellomnavn; + private String etternavn; + private String kjoenn; + private String ident; + private String aktorId; + private List tags; + private FoedselsdatoDTO foedselsdato; + private DoedsfallDTO doedsfall; + private SivilstandDTO sivilstand; + private StatsborgerskapDTO statsborgerskap; + private UtfyttingFraNorgeDTO utfyttingFraNorge; + private InnflyttingTilNorgeDTO innfyttingTilNorge; + private ForelderBarnRelasjonDTO forelderBarnRelasjoner; + private List folkeregisterpersonstatus; + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class FoedselsdatoDTO { + + private LocalDate foedselsdato; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class DoedsfallDTO { + + private LocalDate doedsdato; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class SivilstandDTO { + + private String type; + private String relatertVedSivilstand; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class StatsborgerskapDTO { + + private List land; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ForelderBarnRelasjonDTO { + + private List barn; + private List foreldre; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class FolkeregisterpersonstatusDTO { + + private String status; + private LocalDate gyldighetstidspunkt; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ForelderDTO { + + private String ident; + private String rolle; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class InnflyttingTilNorgeDTO { + + private String fraflyttingsland; + private String fraflyttingsstedIUtlandet; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class UtfyttingFraNorgeDTO { + + private String tilflyttingsland; + private String tilflyttingsstedIUtlandet; + private LocalDate utflyttingsdato; + } +} \ No newline at end of file diff --git a/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonRequest.java b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonRequest.java index 4e873f4d09..00607a840a 100644 --- a/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonRequest.java +++ b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonRequest.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import no.nav.testnav.libs.data.pdlforvalter.v1.AdressebeskyttelseDTO; +import no.nav.testnav.libs.data.pdlforvalter.v1.FolkeregisterPersonstatusDTO; import no.nav.testnav.libs.data.pdlforvalter.v1.Identtype; import no.nav.testnav.libs.data.pdlforvalter.v1.KjoennDTO; import no.nav.testnav.libs.data.pdlforvalter.v1.SivilstandDTO; @@ -38,6 +39,7 @@ public class PersonRequest { private Boolean harOpphold; @Schema(description = "landkode") private String statsborgerskap; + private FolkeregisterPersonstatusDTO.FolkeregisterPersonstatus personStatus; private Boolean harNyIdentitet; private AdresseRequest adresse; diff --git a/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonSearch.java b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonSearch.java new file mode 100644 index 0000000000..dda8b863c8 --- /dev/null +++ b/libs/data-transfer-search-objects/src/main/java/no/nav/testnav/libs/data/dollysearchservice/v1/PersonSearch.java @@ -0,0 +1,166 @@ +package no.nav.testnav.libs.data.dollysearchservice.v1; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PersonSearch { + + private Integer page; + private Integer pageSize; + private Integer terminateAfter; + private String tag; + private List tags; + private List excludeTags; + private String kjoenn; + private String randomSeed; + private Boolean kunLevende; + private List identer; + private FoedselsdatoSearch foedselsdato; + private SivilstandSearch sivilstand; + private NasjonalitetSearch nasjonalitet; + private AlderSearch alder; + private IdentifikasjonSearch identifikasjon; + private RelasjonSearch relasjoner; + private PersonstatusSearch personstatus; + private AdresserSearch adresser; + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class AlderSearch { + + private Short fra; + private Short til; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class FoedselsdatoSearch { + + private LocalDate fom; + private LocalDate tom; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class IdentifikasjonSearch { + + private String identtype; + private String adressebeskyttelse; + private Boolean falskIdentitet; + private Boolean utenlandskIdentitet; + private Boolean identHistorikk; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class NasjonalitetSearch { + + private String statsborgerskap; + private InnflyttingSearch innflytting; + private UtflyttingSearch utflytting; + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class InnflyttingSearch { + + private String fraflyttingsland; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class UtflyttingSearch { + + private String tilflyttingsland; + } + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class PersonstatusSearch { + + private String status; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class AdresserSearch { + + private BostedsadresseSearch bostedsadresse; + private OppholdsadresseSearch oppholdsadresse; + private String harUtenlandskAdresse; + private String harKontaktadresse; + private String harOppholdsadresse; + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class BostedsadresseSearch { + + private String borINorge; + private String kommunenummer; + private String bydelsnummer; + private String postnummer; + private String historiskKommunenummer; + private String historiskBydelsnummer; + private String historiskPostnummer; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class OppholdsadresseSearch { + + private String oppholdAnnetSted; + } + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class RelasjonSearch { + + private String harBarn; + private String harDoedfoedtBarn; + private List forelderBarnRelasjoner; + private String foreldreansvar; + } + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class SivilstandSearch { + + private String type; + private String tidligereType; + private Boolean manglerSivilstand; + } +} \ No newline at end of file