From 2dfaaf6906ba2d67b3a91ad266db936cb52c40d1 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Mon, 16 Sep 2024 15:22:53 +0200 Subject: [PATCH 01/14] Add AFP offentlig fields to PensjonData Introduced a new inner class `AfpOffentlig` with relevant fields and methods to handle AFP offentlig data. This includes new constraints using `@Min` and `@Max` annotations, and additional enumerations for `StatusAfp`. These changes enhance the model to support detailed information about AFP offentlig. --- .../domain/resultset/pensjon/PensjonData.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java index 7fe6a82686..142fd3ac11 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java @@ -3,6 +3,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -12,6 +14,7 @@ import org.springframework.data.elasticsearch.annotations.FieldType; import java.time.LocalDate; +import java.time.Year; import java.util.ArrayList; import java.util.List; @@ -45,6 +48,9 @@ public class PensjonData { @Schema(description = "Data for uføretrygd (UT)") private Uforetrygd uforetrygd; + @Schema(description = "Data for AFP offentlig") + private AfpOffentlig afpOffentlig; + @JsonIgnore public boolean hasInntekt() { return nonNull(inntekt); @@ -376,4 +382,72 @@ public static class ForventetInntekt { private InntektType inntektType; private Integer belop; } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class AfpOffentlig { + + @Schema(description = "Liste av tpId som støttes direkte for denne personen, " + + "mulige verdier hentes her: /api/mock-oppsett/muligedirektekall") + private List direktekall; + + @Schema(description = "AFP offentlig som denne personen har (stub)") + private List mocksvar; + + public List getDirektekall() { + + if (isNull(direktekall)) { + direktekall = new ArrayList<>(); + } + return direktekall; + } + + public List getMocksvar() { + + if (isNull(mocksvar)) { + mocksvar = new ArrayList<>(); + } + return mocksvar; + } + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class AfpOffentligStub { + + @Schema(description = "TpId som skal stubbes, liste kan hentes her /api/v1/tp/ordning") + private String tpId; + + private StatusAfp statusAfp; + @Field(type = FieldType.Date, format = DateFormat.basic_date, pattern = "uuuu-MM-dd") + private LocalDate virkningsDato; + @Min(2024) + @Schema(description = "Årstall (fra dropdown?), laveste verdi er 2024") + private Year sistBenyttetG; + private List belopsListe; + + public List getBelopsListe() { + + if (isNull(belopsListe)) { + belopsListe = new ArrayList<>(); + } + return belopsListe; + } + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class DatoBeloep { + + @Field(type = FieldType.Date, format = DateFormat.basic_date, pattern = "uuuu-MM-dd") + private LocalDate fomDato; + @Min(1) + @Max(2147483647) + private Integer belop; + } + + public enum StatusAfp {UKJENT, INNVILGET, SOKT, AVSLAG, IKKE_SOKT} } From 10ca966e54106e800be1083f4686dcde2490d470 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 07:35:25 +0200 Subject: [PATCH 02/14] Add routing for AFP Offentlig mock endpoint #deploy-pensjon-testdata-proxy Enhanced the proxy application to support routing for AFP Offentlig mock endpoints. Refactored configuration to accommodate dynamic environment-specific URLs and namespaces. Added new server properties classes for better code organization and maintainability. --- .../proxy.pensjon-testdata-facade-proxy.yml | 2 +- .../pensjon-testdata-facade-proxy/config.yml | 6 +++ ...TestdataFacadeProxyApplicationStarter.java | 39 ++++++++++--------- .../config/Consumers.java | 28 ++++++++++++- .../src/main/resources/application.yml | 11 ++++-- 5 files changed, 62 insertions(+), 24 deletions(-) diff --git a/.github/workflows/proxy.pensjon-testdata-facade-proxy.yml b/.github/workflows/proxy.pensjon-testdata-facade-proxy.yml index a1c18aaf72..32ca251549 100644 --- a/.github/workflows/proxy.pensjon-testdata-facade-proxy.yml +++ b/.github/workflows/proxy.pensjon-testdata-facade-proxy.yml @@ -17,7 +17,7 @@ jobs: with: cluster: "dev-fss" working-directory: "proxies/pensjon-testdata-facade-proxy" - deploy-tag: "#deploy-proxy" + deploy-tag: "#deploy-pensjon-testdata-proxy" permissions: contents: read id-token: write diff --git a/proxies/pensjon-testdata-facade-proxy/config.yml b/proxies/pensjon-testdata-facade-proxy/config.yml index d4b82f58e4..0ca30635f2 100644 --- a/proxies/pensjon-testdata-facade-proxy/config.yml +++ b/proxies/pensjon-testdata-facade-proxy/config.yml @@ -59,6 +59,12 @@ spec: - application: popp-testdata namespace: pensjonopptjening cluster: dev-gcp + - application: pensjon-afp-offentlig-mock-q1 + namespace: pensjon-pen-q1 + cluster: dev-fss + - application: pensjon-afp-offentlig-mock-q2 + namespace: pensjon-pen-q2 + cluster: dev-fss liveness: path: /internal/isAlive initialDelay: 4 diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java index 729787956e..9ddcd73652 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java @@ -39,13 +39,23 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder, Arrays .stream(MILJOER) .forEach( - miljoe -> - routes.route( - spec -> spec - .path("/" + miljoe + "/api/samboer/**") - .filters(filterSPec -> filterSPec.filter(getAuthenticationFilter(tokenService, consumers.getSamboerTestdata(), miljoe)) - .rewritePath("/" + miljoe + "/(?.*)", "/${segment}")) - .uri(forEnvironment(consumers.getSamboerTestdata(), miljoe).getUrl()))); + miljoe -> { + routes.route( + spec -> spec + .path("/" + miljoe + "/api/samboer/**") + .filters(filterSPec -> filterSPec.filter(getAuthenticationFilter(tokenService, + consumers.getSamboerTestdata().getMiljoe(miljoe))) + .rewritePath("/" + miljoe + "/(?.*)", "/${segment}")) + .uri(consumers.getSamboerTestdata().getMiljoe(miljoe).getUrl())); + + routes.route( + spec -> spec + .path("/" + miljoe + "/api/mock-oppsett/**") + .filters(filterSpec -> filterSpec.filter(getAuthenticationFilter(tokenService, + consumers.getAfpOffentlig().getMiljoe(miljoe))) + .rewritePath("/" + miljoe + "/(?.*)", "/${segment}")) + .uri(consumers.getAfpOffentlig().getMiljoe(miljoe).getUrl())); + }); routes .route( spec -> spec @@ -59,25 +69,16 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder, return routes.build(); } + private GatewayFilter getAuthenticationFilter(TrygdeetatenAzureAdTokenService tokenService, - ServerProperties serverProperties, - String miljoe) { + ServerProperties serverProperties) { return AddAuthenticationRequestGatewayFilterFactory .bearerAuthenticationHeaderFilter( () -> tokenService - .exchange(forEnvironment(serverProperties, miljoe)) + .exchange(serverProperties) .map(AccessToken::getTokenValue)); } - private static ServerProperties forEnvironment(ServerProperties original, String env) { - return ServerProperties.of( - original.getCluster(), - original.getNamespace(), - original.getName().replace("MILJOE", env), - original.getUrl().replace("MILJOE", env + ("q1".equals(env) ? ".very" : "")) - ); - } - public static void main(String[] args) { SpringApplication.run(PensjonTestdataFacadeProxyApplicationStarter.class, args); } diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java index 814a4d8b2c..945be86da3 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java @@ -24,6 +24,32 @@ @Setter(PACKAGE) public class Consumers { - private ServerProperties samboerTestdata; + private SamboerServerProperties samboerTestdata; + private AfpOffentligServerProperties afpOffentlig; + public static class SamboerServerProperties extends ServerProperties { + + public ServerProperties getMiljoe(String env) { + + return ServerProperties.of( + this.getCluster(), + this.getNamespace(), + this.getName().replace("{miljoe}", env), + this.getUrl().replace("{miljoe}", env + ("q1".equals(env) ? ".very" : "")) + ); + } + } + + public static class AfpOffentligServerProperties extends ServerProperties { + + public ServerProperties getMiljoe(String env) { + + return ServerProperties.of( + this.getCluster(), + this.getNamespace().replace("{miljoe}", env), + this.getName().replace("{miljoe}", env), + this.getUrl().replace("{miljoe}", env) + ); + } + } } diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml index 80815dce95..89d991fdbf 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml @@ -31,7 +31,12 @@ server: consumers: samboer-testdata: - name: pensjon-samboerforhold-backend-MILJOE + name: pensjon-samboerforhold-backend-{miljoe} namespace: pensjon-person - url: https://pensjon-samboerforhold-backend-MILJOE.intern.dev.nav.no - cluster: dev-gcp \ No newline at end of file + url: https://pensjon-samboerforhold-backend-{miljoe}.intern.dev.nav.no + cluster: dev-gcp + afp-offentlig: + name: pensjon-afp-offentlig-mock-{miljoe} + namespace: pensjon-pen-{miljoe} + url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no' + cluster: dev-fss \ No newline at end of file From e72b62602cdd170288222ae0f1c4621c6f6d80bf Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 09:25:06 +0200 Subject: [PATCH 03/14] Add AfpOffentlig support to Pensjonforvalter integration Introduced new commands and mappings to handle "AfpOffentlig" requests in PensjonforvalterConsumer. Extended status mapping and data domain to include AfpOffentlig. --- .../PensjonforvalterClient.java | 23 ++++- .../PensjonforvalterConsumer.java | 55 +++++++---- .../command/LagreAfpOffentligCommand.java | 93 +++++++++++++++++++ .../command/SletteAfpOffentligCommand.java | 90 ++++++++++++++++++ .../domain/AfpOffentligRequest.java | 68 ++++++++++++++ .../PensjonAfpOffentligMappingStrategy.java | 30 ++++++ .../dolly/domain/resultset/SystemTyper.java | 1 + .../domain/resultset/pensjon/PensjonData.java | 9 +- ...estillingPensjonforvalterStatusMapper.java | 3 + 9 files changed, 353 insertions(+), 19 deletions(-) create mode 100644 apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java create mode 100644 apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java create mode 100644 apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/domain/AfpOffentligRequest.java create mode 100644 apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/mapper/PensjonAfpOffentligMappingStrategy.java diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java index 45ff286e45..f1b0f4106f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java @@ -9,6 +9,7 @@ import no.nav.dolly.bestilling.ClientFuture; import no.nav.dolly.bestilling.ClientRegister; import no.nav.dolly.bestilling.pdldata.PdlDataConsumer; +import no.nav.dolly.bestilling.pensjonforvalter.domain.AfpOffentligRequest; import no.nav.dolly.bestilling.pensjonforvalter.domain.AlderspensjonRequest; import no.nav.dolly.bestilling.pensjonforvalter.domain.AlderspensjonSoknadRequest; import no.nav.dolly.bestilling.pensjonforvalter.domain.AlderspensjonVedtakRequest; @@ -87,6 +88,7 @@ public class PensjonforvalterClient implements ClientRegister { private static final String PEN_ALDERSPENSJON = "AP#"; private static final String PEN_UFORETRYGD = "Ufoer#"; private static final String PEN_PENSJONSAVTALE = "Pensjonsavtale#"; + private static final String PEN_AFP_OFFENTLIG = "AfpOffentlig"; private static final String PERIODE = "/periode/"; private final PensjonforvalterConsumer pensjonforvalterConsumer; @@ -165,7 +167,10 @@ public Flux gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly .map(response -> TP_FORHOLD + decodeStatus(response, dollyPerson.getIdent())), lagrePensjonsavtale(pensjon, dollyPerson.getIdent(), bestilteMiljoer.get()) - .map(response -> PEN_PENSJONSAVTALE + decodeStatus(response, dollyPerson.getIdent())) + .map(response -> PEN_PENSJONSAVTALE + decodeStatus(response, dollyPerson.getIdent())), + + lagreAfpOffentlig(pensjon, dollyPerson.getIdent(), bestilteMiljoer.get()) + .map(response -> PEN_AFP_OFFENTLIG + decodeStatus(response, dollyPerson.getIdent())) ) .collectList() .doOnNext(statusResultat::addAll) @@ -210,6 +215,7 @@ public void release(List identer) { pensjonforvalterConsumer.sletteTpForhold(identer); pensjonforvalterConsumer.slettePensjonsavtale(identer); + pensjonforvalterConsumer.sletteAfpOffentlig(identer); } public static PensjonforvalterResponse mergePensjonforvalterResponses(List responser) { @@ -540,6 +546,21 @@ private Flux lagrePensjonsavtale(PensjonData pensjon, })); } + private Flux lagreAfpOffentlig(PensjonData pensjonData, String ident, Set miljoer) { + + return Flux.just(pensjonData) + .filter(PensjonData::hasAfpOffentlig) + .map(PensjonData::getAfpOffentlig) + .flatMap(pensjon -> Flux.fromIterable(miljoer) + .flatMap(miljoe -> { + + var context = MappingContextUtils.getMappingContext(); + context.setProperty(IDENT, ident); + var request = mapperFacade.map(pensjon, AfpOffentligRequest.class, context); + return pensjonforvalterConsumer.lagreAfpOffentlig(request, miljoe); + })); + } + private String decodeStatus(PensjonforvalterResponse response, String ident) { log.info("Mottatt status på {} fra Pensjon-Testdata-Facade: {}", ident, response); diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterConsumer.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterConsumer.java index c442b6957c..b7e8372367 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterConsumer.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterConsumer.java @@ -6,6 +6,7 @@ import no.nav.dolly.bestilling.pensjonforvalter.command.AnnullerSamboerCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.HentMiljoerCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.HentSamboerCommand; +import no.nav.dolly.bestilling.pensjonforvalter.command.LagreAfpOffentligCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.LagreAlderspensjonCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.LagreGenerertPoppInntektCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.LagrePensjonsavtaleCommand; @@ -16,8 +17,10 @@ import no.nav.dolly.bestilling.pensjonforvalter.command.LagreUforetrygdCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.OpprettPersonCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.PensjonHentVedtakCommand; +import no.nav.dolly.bestilling.pensjonforvalter.command.SletteAfpOffentligCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.SlettePensjonsavtaleCommand; import no.nav.dolly.bestilling.pensjonforvalter.command.SletteTpForholdCommand; +import no.nav.dolly.bestilling.pensjonforvalter.domain.AfpOffentligRequest; import no.nav.dolly.bestilling.pensjonforvalter.domain.AlderspensjonRequest; import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonPersonRequest; import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonPoppGenerertInntektRequest; @@ -66,14 +69,14 @@ public PensjonforvalterConsumer( .build(); } - @Timed(name = "providers", tags = { "operation", "pen_getMiljoer" }) + @Timed(name = "providers", tags = {"operation", "pen_getMiljoer"}) public Mono> getMiljoer() { return tokenService.exchange(serverProperties) .flatMap(token -> new HentMiljoerCommand(webClient, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = { "operation", "popp_lagreInntekt" }) + @Timed(name = "providers", tags = {"operation", "popp_lagreInntekt"}) public Flux lagreInntekter(PensjonPoppInntektRequest pensjonPoppInntektRequest) { return tokenService.exchange(serverProperties) @@ -81,7 +84,7 @@ public Flux lagreInntekter(PensjonPoppInntektRequest p pensjonPoppInntektRequest).call()); } - @Timed(name = "providers", tags = { "operation", "popp_lagreGenerertInntekt" }) + @Timed(name = "providers", tags = {"operation", "popp_lagreGenerertInntekt"}) public Flux lagreGenererteInntekter(PensjonPoppGenerertInntektRequest pensjonPoppGenerertInntektRequest) { return tokenService.exchange(serverProperties) @@ -89,7 +92,7 @@ public Flux lagreGenererteInntekter(PensjonPoppGenerer pensjonPoppGenerertInntektRequest).call()); } - @Timed(name = "providers", tags = { "operation", "pen_opprettPerson" }) + @Timed(name = "providers", tags = {"operation", "pen_opprettPerson"}) public Flux opprettPerson(PensjonPersonRequest pensjonPersonRequest, Set miljoer) { @@ -99,7 +102,7 @@ public Flux opprettPerson(PensjonPersonRequest pensjon .doOnNext(response -> log.info("Opprettet person for {}: {}", pensjonPersonRequest.getFnr(), response)); } - @Timed(name = "providers", tags = { "operation", "pen_hentSamboer" }) + @Timed(name = "providers", tags = {"operation", "pen_hentSamboer"}) public Flux hentSamboer(String ident, String miljoe) { return tokenService.exchange(serverProperties) @@ -107,7 +110,7 @@ public Flux hentSamboer(String ident, String miljoe) { .doOnNext(response -> log.info("Pensjon samboer for {} i {} hentet {}", ident, miljoe, response)); } - @Timed(name = "providers", tags = { "operation", "pen_opprettSamboer" }) + @Timed(name = "providers", tags = {"operation", "pen_opprettSamboer"}) public Flux lagreSamboer(PensjonSamboerRequest pensjonSamboerRequest, String miljoe) { @@ -115,14 +118,14 @@ public Flux lagreSamboer(PensjonSamboerRequest pensjon .flatMapMany(token -> new LagreSamboerCommand(webClient, pensjonSamboerRequest, miljoe, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = { "operation", "pen_opprettSamboer" }) + @Timed(name = "providers", tags = {"operation", "pen_opprettSamboer"}) public Flux annullerSamboer(String periodeId, String miljoe) { return tokenService.exchange(serverProperties) .flatMapMany(token -> new AnnullerSamboerCommand(webClient, periodeId, miljoe, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = { "operation", "pen_lagreAlderspensjon" }) + @Timed(name = "providers", tags = {"operation", "pen_lagreAlderspensjon"}) public Flux lagreAlderspensjon(AlderspensjonRequest request) { return tokenService.exchange(serverProperties) @@ -130,21 +133,21 @@ public Flux lagreAlderspensjon(AlderspensjonRequest re new LagreAlderspensjonCommand(webClient, token.getTokenValue(), request).call()); } - @Timed(name = "providers", tags = { "operation", "pen_lagreUforetrygd" }) + @Timed(name = "providers", tags = {"operation", "pen_lagreUforetrygd"}) public Flux lagreUforetrygd(PensjonUforetrygdRequest request) { return tokenService.exchange(serverProperties) .flatMapMany(token -> new LagreUforetrygdCommand(webClient, token.getTokenValue(), request).call()); } - @Timed(name = "providers", tags = { "operation", "pen_lagreTpForhold" }) + @Timed(name = "providers", tags = {"operation", "pen_lagreTpForhold"}) public Flux lagreTpForhold(PensjonTpForholdRequest pensjonTpForholdRequest) { return tokenService.exchange(serverProperties) .flatMapMany(token -> new LagreTpForholdCommand(webClient, token.getTokenValue(), pensjonTpForholdRequest).call()); } - @Timed(name = "providers", tags = { "operation", "pen_sletteTpForhold" }) + @Timed(name = "providers", tags = {"operation", "pen_sletteTpForhold"}) public void sletteTpForhold(List identer) { tokenService.exchange(serverProperties) @@ -156,21 +159,21 @@ public void sletteTpForhold(List identer) { .subscribe(response -> log.info("Slettet mot PESYS (tp) i alle miljoer")); } - @Timed(name = "providers", tags = { "operation", "pen_lagreTpYtelse" }) + @Timed(name = "providers", tags = {"operation", "pen_lagreTpYtelse"}) public Flux lagreTpYtelse(PensjonTpYtelseRequest pensjonTpYtelseRequest) { return tokenService.exchange(serverProperties) .flatMapMany(token -> new LagreTpYtelseCommand(webClient, token.getTokenValue(), pensjonTpYtelseRequest).call()); } - @Timed(name = "providers", tags = { "operation", "pen_lagrePensjpnsavtale" }) + @Timed(name = "providers", tags = {"operation", "pen_lagrePensjpnsavtale"}) public Flux lagrePensjonsavtale(PensjonsavtaleRequest pensjonsavtaleRequest) { return tokenService.exchange(serverProperties) .flatMapMany(token -> new LagrePensjonsavtaleCommand(webClient, pensjonsavtaleRequest, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = { "operation", "pen_slettePensjpnsavtale" }) + @Timed(name = "providers", tags = {"operation", "pen_slettePensjpnsavtale"}) public void slettePensjonsavtale(List identer) { tokenService.exchange(serverProperties) @@ -180,15 +183,35 @@ public void slettePensjonsavtale(List identer) { .subscribe(resultat -> log.info("Slettet pensjonsavtaler (PEN), alle miljøer")); } - @Timed(name = "providers", tags = { "operation", "pen_hentVedtak" }) + @Timed(name = "providers", tags = {"operation", "pen_hentVedtak"}) public Flux hentVedtak(String ident, String miljoe) { return tokenService.exchange(serverProperties) - .flatMapMany(token -> new PensjonHentVedtakCommand(webClient, ident, miljoe, token.getTokenValue()).call()) + .flatMapMany(token -> new PensjonHentVedtakCommand(webClient, ident, miljoe, token.getTokenValue()).call()) .doOnNext(response -> log.info("Pensjon vedtak for ident {}, miljoe {} mottatt {}", ident, miljoe, response)); } + @Timed(name = "providers", tags = {"operation", "pen_lagreAfpOffentlig"}) + public Flux lagreAfpOffentlig(AfpOffentligRequest afpOffentligRequest, String miljoe) { + + return tokenService.exchange(serverProperties) + .flatMapMany(token -> new LagreAfpOffentligCommand(webClient, afpOffentligRequest, miljoe, token.getTokenValue()).call()); + } + + @Timed(name = "providers", tags = {"operation", "pen_sletteAfpOffentlig"}) + public void sletteAfpOffentlig(List identer) { + + tokenService.exchange(serverProperties) + .flatMapMany(token -> Flux.from(getMiljoer()) + .flatMap(Flux::fromIterable) + .flatMap(miljoe -> Flux.fromIterable(identer) + .map(ident -> new SletteAfpOffentligCommand(webClient, ident, miljoe, token.getTokenValue()).call())) + .flatMap(Flux::from)) + .collectList() + .subscribe(resultat -> log.info("Slettet AfpOffentlig (PEN), alle miljøer")); + } + @Override public String serviceUrl() { return serverProperties.getUrl(); diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java new file mode 100644 index 0000000000..bcb84d1b27 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java @@ -0,0 +1,93 @@ +package no.nav.dolly.bestilling.pensjonforvalter.command; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import no.nav.dolly.bestilling.pensjonforvalter.domain.AfpOffentligRequest; +import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse; +import no.nav.testnav.libs.reactivecore.utils.WebClientFilter; +import org.springframework.http.HttpStatus; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import java.util.Collections; +import java.util.concurrent.Callable; + +import static no.nav.dolly.domain.CommonKeysAndUtils.CONSUMER; +import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CALL_ID; +import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CONSUMER_ID; +import static no.nav.dolly.util.CallIdUtil.generateCallId; +import static org.springframework.http.HttpHeaders.AUTHORIZATION; + +@Slf4j +@RequiredArgsConstructor +public class LagreAfpOffentligCommand implements Callable> { + private static final String PEN_AFP_OFFENTLIG_URL = "/{miljoe}/api/mock-oppsett/{ident}"; + + private final WebClient webClient; + private final AfpOffentligRequest afpOffentligRequest; + private final String miljoe; + private final String token; + + public Mono call() { + + var ident = afpOffentligRequest + .getMocksvar().stream() + .map(AfpOffentligRequest.AfpOffentligStub::getFnr) + .findFirst().orElse(null); + + var callId = generateCallId(); + log.info("Pensjon afp-offentlig {} {}, callId: {}", miljoe, afpOffentligRequest, callId); + + return webClient + .post() + .uri(uriBuilder -> uriBuilder + .path(PEN_AFP_OFFENTLIG_URL) + .build(miljoe, ident)) + .header(AUTHORIZATION, "Bearer " + token) + .header(HEADER_NAV_CALL_ID, callId) + .header(HEADER_NAV_CONSUMER_ID, CONSUMER) + .bodyValue(afpOffentligRequest) + .retrieve() + .toBodilessEntity() + .map(response -> pensjonforvalterResponse(miljoe, HttpStatus.valueOf(response.getStatusCode().value()))) + .doOnError(WebClientFilter::logErrorMessage) + .onErrorResume(error -> Mono.just(pensjonforvalterResponseFromError(miljoe, error))); + } + + private static PensjonforvalterResponse pensjonforvalterResponse(String miljoe, HttpStatus status) { + + var miljoeResponse = PensjonforvalterResponse.ResponseEnvironment.builder() + .miljo(miljoe) + .response(PensjonforvalterResponse.Response.builder() + .httpStatus(PensjonforvalterResponse.HttpStatus.builder() + .status(status.value()) + .reasonPhrase(status.getReasonPhrase()) + .build()) + .path(PEN_AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe)) + .build()) + .build(); + + return PensjonforvalterResponse.builder() + .status(Collections.singletonList(miljoeResponse)) + .build(); + } + + private static PensjonforvalterResponse pensjonforvalterResponseFromError(String miljoe, Throwable error) { + + var miljoeResponse = PensjonforvalterResponse.ResponseEnvironment.builder() + .miljo(miljoe) + .response(PensjonforvalterResponse.Response.builder() + .httpStatus(PensjonforvalterResponse.HttpStatus.builder() + .status(WebClientFilter.getStatus(error).value()) + .reasonPhrase(WebClientFilter.getStatus(error).getReasonPhrase()) + .build()) + .message(WebClientFilter.getMessage(error)) + .path(PEN_AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe)) + .build()) + .build(); + + return PensjonforvalterResponse.builder() + .status(Collections.singletonList(miljoeResponse)) + .build(); + } +} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java new file mode 100644 index 0000000000..b628a706e2 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java @@ -0,0 +1,90 @@ +package no.nav.dolly.bestilling.pensjonforvalter.command; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse; +import no.nav.testnav.libs.reactivecore.utils.WebClientFilter; +import no.nav.testnav.libs.securitycore.config.UserConstant; +import org.springframework.http.HttpStatus; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import java.util.Collections; +import java.util.concurrent.Callable; + +import static no.nav.dolly.domain.CommonKeysAndUtils.CONSUMER; +import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CALL_ID; +import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CONSUMER_ID; +import static no.nav.dolly.util.CallIdUtil.generateCallId; +import static no.nav.dolly.util.TokenXUtil.getUserJwt; +import static org.springframework.http.HttpHeaders.AUTHORIZATION; + +@Slf4j +@RequiredArgsConstructor +public class SletteAfpOffentligCommand implements Callable> { + + private static final String AFP_OFFENTLIG_URL = "/{miljoe}/api/mock-oppsett/{fnr}"; + + private final WebClient webClient; + private final String ident; + private final String miljoe; + private final String token; + + + public Mono call() { + + var callId = generateCallId(); + log.info("Pensjon slette pensjonsavtale callId: {}", callId); + + return webClient + .delete() + .uri(uriBuilder -> uriBuilder + .path(AFP_OFFENTLIG_URL) + .build(miljoe, ident)) + .header(AUTHORIZATION, "Bearer " + token) + .header(UserConstant.USER_HEADER_JWT, getUserJwt()) + .header(HEADER_NAV_CALL_ID, callId) + .header(HEADER_NAV_CONSUMER_ID, CONSUMER) + .retrieve() + .toBodilessEntity() + .map(response -> pensjonforvalterResponse(miljoe, ident, HttpStatus.valueOf(response.getStatusCode().value()))) + .doOnError(WebClientFilter::logErrorMessage) + .onErrorResume(error -> Mono.just(pensjonforvalterResponseFromError(miljoe, ident, error))); + } + + private static PensjonforvalterResponse pensjonforvalterResponse(String miljoe, String ident, HttpStatus status) { + + var miljoeResponse = PensjonforvalterResponse.ResponseEnvironment.builder() + .miljo(miljoe) + .response(PensjonforvalterResponse.Response.builder() + .httpStatus(PensjonforvalterResponse.HttpStatus.builder() + .status(status.value()) + .reasonPhrase(status.getReasonPhrase()) + .build()) + .path(AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe).replace("{ident}", ident)) + .build()) + .build(); + + return PensjonforvalterResponse.builder() + .status(Collections.singletonList(miljoeResponse)) + .build(); + } + + private static PensjonforvalterResponse pensjonforvalterResponseFromError(String miljoe, String ident, Throwable error) { + + var miljoeResponse = PensjonforvalterResponse.ResponseEnvironment.builder() + .miljo(miljoe) + .response(PensjonforvalterResponse.Response.builder() + .httpStatus(PensjonforvalterResponse.HttpStatus.builder() + .status(WebClientFilter.getStatus(error).value()) + .reasonPhrase(WebClientFilter.getStatus(error).getReasonPhrase()) + .build()) + .message(WebClientFilter.getMessage(error)) + .path(AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe).replace("{ident}", ident)) + .build()) + .build(); + + return PensjonforvalterResponse.builder() + .status(Collections.singletonList(miljoeResponse)) + .build(); + }} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/domain/AfpOffentligRequest.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/domain/AfpOffentligRequest.java new file mode 100644 index 0000000000..38d086942b --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/domain/AfpOffentligRequest.java @@ -0,0 +1,68 @@ +package no.nav.dolly.bestilling.pensjonforvalter.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static java.util.Objects.isNull; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AfpOffentligRequest { + + private List direktekall; + private List mocksvar; + + public List getDirektekall() { + + if (isNull(direktekall)) { + direktekall = new ArrayList<>(); + } + return direktekall; + } + + public List getMocksvar() { + + if (isNull(mocksvar)) { + mocksvar = new ArrayList<>(); + } + return mocksvar; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class AfpOffentligStub { + + private String tpId; + private String fnr; + private StatusAfp statusAfp; + private LocalDate virkningsDato; + private Integer sistBenyttetG; + private List belopsListe; + + public List getBelopsListe() { + + if (isNull(belopsListe)) { + belopsListe = new ArrayList<>(); + } + return belopsListe; + } + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class DatoBeloep { + + private LocalDate fomDato; + private Integer belop; + } + + public enum StatusAfp {UKJENT, INNVILGET, SOKT, AVSLAG, IKKE_SOKT} +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/mapper/PensjonAfpOffentligMappingStrategy.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/mapper/PensjonAfpOffentligMappingStrategy.java new file mode 100644 index 0000000000..e55f12e8f5 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/mapper/PensjonAfpOffentligMappingStrategy.java @@ -0,0 +1,30 @@ +package no.nav.dolly.bestilling.pensjonforvalter.mapper; + +import ma.glasnost.orika.CustomMapper; +import ma.glasnost.orika.MapperFactory; +import ma.glasnost.orika.MappingContext; +import no.nav.dolly.bestilling.pensjonforvalter.domain.AfpOffentligRequest; +import no.nav.dolly.domain.resultset.pensjon.PensjonData; +import no.nav.dolly.mapper.MappingStrategy; +import org.springframework.stereotype.Component; + +@Component +public class PensjonAfpOffentligMappingStrategy implements MappingStrategy { + + @Override + public void register(MapperFactory factory) { + + factory.classMap(PensjonData.AfpOffentlig.class, AfpOffentligRequest.class) + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(PensjonData.AfpOffentlig kilde, AfpOffentligRequest target, MappingContext context) { + + var ident = (String) context.getProperty("ident"); + target.getMocksvar() + .forEach(mocksvar -> mocksvar.setFnr(ident)); + } + }) + .byDefault() + .register(); + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/SystemTyper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/SystemTyper.java index 5bb1cdb6ed..3eae32959e 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/SystemTyper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/SystemTyper.java @@ -30,6 +30,7 @@ public enum SystemTyper { PDL_ORDRE("Ordre til PDL"), PDL_PERSONSTATUS("Person finnes i PDL"), PEN_AP("Alderspensjon (AP)"), + PEN_AFP_OFFENTLIG("AFP offentlig (PEN)"), PEN_FORVALTER("Pensjon persondata (PEN)"), PEN_INNTEKT("Pensjonsopptjening (POPP)"), PEN_PENSJONSAVTALE("Pensjonsavtale (PEN)"), diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java index 142fd3ac11..d43f8a1b9b 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/pensjon/PensjonData.java @@ -14,7 +14,6 @@ import org.springframework.data.elasticsearch.annotations.FieldType; import java.time.LocalDate; -import java.time.Year; import java.util.ArrayList; import java.util.List; @@ -56,6 +55,7 @@ public boolean hasInntekt() { return nonNull(inntekt); } + @JsonIgnore public boolean hasGenerertInntekt() { return nonNull(generertInntekt); } @@ -81,6 +81,11 @@ public boolean hasPensjonsavtale() { return !getPensjonsavtale().isEmpty(); } + @JsonIgnore + public boolean hasAfpOffentlig() { + return nonNull(afpOffentlig); + } + public List getPensjonsavtale() { if (isNull(pensjonsavtale)) { @@ -425,7 +430,7 @@ public static class AfpOffentligStub { private LocalDate virkningsDato; @Min(2024) @Schema(description = "Årstall (fra dropdown?), laveste verdi er 2024") - private Year sistBenyttetG; + private Integer sistBenyttetG; private List belopsListe; public List getBelopsListe() { diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingPensjonforvalterStatusMapper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingPensjonforvalterStatusMapper.java index 54aaf40538..c04d76911f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingPensjonforvalterStatusMapper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingPensjonforvalterStatusMapper.java @@ -15,6 +15,7 @@ import java.util.Set; import static java.util.Objects.nonNull; +import static no.nav.dolly.domain.resultset.SystemTyper.PEN_AFP_OFFENTLIG; import static no.nav.dolly.domain.resultset.SystemTyper.PEN_AP; import static no.nav.dolly.domain.resultset.SystemTyper.PEN_FORVALTER; import static no.nav.dolly.domain.resultset.SystemTyper.PEN_INNTEKT; @@ -35,6 +36,7 @@ public final class BestillingPensjonforvalterStatusMapper { private static final String UFORETRYGD = "Ufoer"; private static final String SAMBOER = "Samboer"; private static final String PENSJONSAVTALE = "Pensjonsavtale"; + private static final String PEN_AFPOFFENTLIG = "AfpOffentlig"; public static List buildPensjonforvalterStatusMap(List progressList) { @@ -68,6 +70,7 @@ public static List buildPensjonforvalterStatusMap(List Date: Tue, 17 Sep 2024 09:40:50 +0200 Subject: [PATCH 04/14] Added AFP-Offentlig test config. #deploy-pensjon-testdata-proxy --- .../PensjonTestdataFacadeProxyApplicationStarter.java | 2 -- .../src/test/resources/application-test.yml | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java index 9ddcd73652..2b4d83f87e 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java @@ -69,7 +69,6 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder, return routes.build(); } - private GatewayFilter getAuthenticationFilter(TrygdeetatenAzureAdTokenService tokenService, ServerProperties serverProperties) { return AddAuthenticationRequestGatewayFilterFactory @@ -82,5 +81,4 @@ private GatewayFilter getAuthenticationFilter(TrygdeetatenAzureAdTokenService to public static void main(String[] args) { SpringApplication.run(PensjonTestdataFacadeProxyApplicationStarter.class, args); } - } \ No newline at end of file diff --git a/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml b/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml index 30e48d6e0e..321a8adc42 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml @@ -5,3 +5,7 @@ consumers: name: pensjon-dummy namespace: dummy url: https://pensjon-dummy.dummy.no + afp-offentlig: + name: pensjon-dummy + namespace: dummy + url: https://pensjon-dummy.dummy.no From 5b2e068caf20cbc11fcf05e62008de3694ef045a Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 10:39:42 +0200 Subject: [PATCH 05/14] Add production OAuth2 configuration and refactor LocalVaultConfig @deploy-pensjon-testdata-proxy Introduce a new `application-prod.yml` for production OAuth2 setup. Simplify LocalVaultConfig by removing redundant token checks and adding `@NonNull` annotations. --- .../config/LocalVaultConfig.java | 18 ++++-------------- .../src/main/resources/application-prod.yml | 8 ++++++++ .../src/main/resources/application.yml | 6 +----- .../src/test/resources/application-test.yml | 1 - 4 files changed, 13 insertions(+), 20 deletions(-) create mode 100644 proxies/pensjon-testdata-facade-proxy/src/main/resources/application-prod.yml diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/LocalVaultConfig.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/LocalVaultConfig.java index a516197c0f..92ba1cb5d7 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/LocalVaultConfig.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/LocalVaultConfig.java @@ -2,35 +2,25 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.vault.annotation.VaultPropertySource; +import org.springframework.lang.NonNull; import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.TokenAuthentication; import org.springframework.vault.client.VaultEndpoint; import org.springframework.vault.config.AbstractVaultConfiguration; -import static io.micrometer.common.util.StringUtils.isBlank; - @Configuration @Profile("dev") -@VaultPropertySource(value = "azuread/prod/creds/team-dolly-lokal-app", ignoreSecretNotFound = false) public class LocalVaultConfig extends AbstractVaultConfiguration { - private static final String VAULT_TOKEN = "spring.cloud.vault.token"; - @Override + @NonNull public VaultEndpoint vaultEndpoint() { return VaultEndpoint.create("vault.adeo.no", 443); } @Override + @NonNull public ClientAuthentication clientAuthentication() { - if (System.getenv().containsKey("VAULT_TOKEN")) { - System.setProperty(VAULT_TOKEN, System.getenv("VAULT_TOKEN")); - } - var token = System.getProperty(VAULT_TOKEN); - if (isBlank(token)) { - throw new IllegalArgumentException("Påkrevet property 'spring.cloud.vault.token' er ikke satt."); - } - return new TokenAuthentication(System.getProperty(VAULT_TOKEN)); + return new TokenAuthentication(System.getProperty("spring.cloud.vault.token")); } } diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-prod.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-prod.yml new file mode 100644 index 0000000000..0311ce578e --- /dev/null +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-prod.yml @@ -0,0 +1,8 @@ +spring: + security: + oauth2: + resourceserver: + tokenx: + issuer-uri: ${TOKEN_X_ISSUER} + jwk-set-uri: ${TOKEN_X_JWKS_URI} + accepted-audience: ${TOKEN_X_CLIENT_ID} \ No newline at end of file diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml index 89d991fdbf..222ba800fb 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml @@ -11,10 +11,6 @@ spring: issuer-uri: ${AAD_ISSUER_URI}/v2.0 jwk-set-uri: ${AAD_ISSUER_URI}/discovery/v2.0/keys accepted-audience: ${azure.app.client.id}, api://${azure.app.client.id} - tokenx: - issuer-uri: ${TOKEN_X_ISSUER} - jwk-set-uri: ${TOKEN_X_JWKS_URI} - accepted-audience: ${TOKEN_X_CLIENT_ID} cloud: gateway: httpclient: @@ -38,5 +34,5 @@ consumers: afp-offentlig: name: pensjon-afp-offentlig-mock-{miljoe} namespace: pensjon-pen-{miljoe} - url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no' + url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no cluster: dev-fss \ No newline at end of file diff --git a/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml b/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml index 321a8adc42..9b722c3bc5 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/test/resources/application-test.yml @@ -1,4 +1,3 @@ -TOKEN_X_ISSUER: dummy consumers: samboer-testdata: From a523c35637fd2ddcdb8def2d13bc5c21dc73672e Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 10:49:07 +0200 Subject: [PATCH 06/14] Deploy #deploy-pensjon-testdata-proxy --- .../PensjonTestdataFacadeProxyApplicationStarter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java index 2b4d83f87e..7bf9e59026 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java @@ -81,4 +81,4 @@ private GatewayFilter getAuthenticationFilter(TrygdeetatenAzureAdTokenService to public static void main(String[] args) { SpringApplication.run(PensjonTestdataFacadeProxyApplicationStarter.class, args); } -} \ No newline at end of file +} From 82b5dad551800467745118288b1214bb6c1d57d0 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 12:34:27 +0200 Subject: [PATCH 07/14] Update URLs and configurations for testdata facades #deploy-pensjon-testdata-proxy Updated the Pensjon Testdata Facade and AFP Offentlig URLs to new environments. Modified corresponding YAML configuration files to align with the new URL settings and namespaces. Added missing ServerProperties for Pensjon Testdata Facade in the Consumers configuration. --- proxies/pensjon-testdata-facade-proxy/config.yml | 7 ++----- .../PensjonTestdataFacadeProxyApplicationStarter.java | 2 +- .../pensjontestdatafacadeproxy/config/Consumers.java | 3 ++- .../src/main/resources/application-dev.yml | 6 ++++++ .../src/main/resources/application.yml | 6 ++++-- 5 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml diff --git a/proxies/pensjon-testdata-facade-proxy/config.yml b/proxies/pensjon-testdata-facade-proxy/config.yml index 0ca30635f2..6e40f9e9ad 100644 --- a/proxies/pensjon-testdata-facade-proxy/config.yml +++ b/proxies/pensjon-testdata-facade-proxy/config.yml @@ -56,14 +56,11 @@ spec: - application: pensjon-samboerforhold-backend-q2 namespace: pensjon-person cluster: dev-gcp - - application: popp-testdata - namespace: pensjonopptjening - cluster: dev-gcp - application: pensjon-afp-offentlig-mock-q1 - namespace: pensjon-pen-q1 + namespace: pensjon-saksbehandling cluster: dev-fss - application: pensjon-afp-offentlig-mock-q2 - namespace: pensjon-pen-q2 + namespace: pensjon-saksbehandling cluster: dev-fss liveness: path: /internal/isAlive diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java index 7bf9e59026..f302fa21aa 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java @@ -63,7 +63,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder, .filters(gatewayFilterSpec -> gatewayFilterSpec .addRequestHeader(HttpHeaders.AUTHORIZATION, "dolly") ) //Auth header er required men sjekkes ikke utover det - .uri("http://pensjon-testdata-facade.pensjontestdata.svc.nais.local/")) + .uri(consumers.getPensjonTestdataFacade().getUrl())) .build(); return routes.build(); diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java index 945be86da3..d082937041 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/config/Consumers.java @@ -26,6 +26,7 @@ public class Consumers { private SamboerServerProperties samboerTestdata; private AfpOffentligServerProperties afpOffentlig; + private ServerProperties pensjonTestdataFacade; public static class SamboerServerProperties extends ServerProperties { @@ -46,7 +47,7 @@ public ServerProperties getMiljoe(String env) { return ServerProperties.of( this.getCluster(), - this.getNamespace().replace("{miljoe}", env), + this.getNamespace(), this.getName().replace("{miljoe}", env), this.getUrl().replace("{miljoe}", env) ); diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml new file mode 100644 index 0000000000..231c181f50 --- /dev/null +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml @@ -0,0 +1,6 @@ + +consumers: + pensjon-testdata-facade: + url: https://pensjon-testdata-facade.dev.intern.nav.no + afp-offentlig: + url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml index 222ba800fb..ab36b16fbb 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml @@ -26,6 +26,8 @@ server: include-message: always consumers: + pensjon-testdata-facade: + url: http://pensjon-testdata-facade.pensjontestdata.svc.nais.local samboer-testdata: name: pensjon-samboerforhold-backend-{miljoe} namespace: pensjon-person @@ -33,6 +35,6 @@ consumers: cluster: dev-gcp afp-offentlig: name: pensjon-afp-offentlig-mock-{miljoe} - namespace: pensjon-pen-{miljoe} - url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no + namespace: pensjon-saksbehandling + url: http://pensjon-afp-offentlig-mock-{miljoe}.pensjon-saksbehandling.svc.nais.local cluster: dev-fss \ No newline at end of file From fe12ff78edcc233df50da39481999904d5862853 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 12:42:12 +0200 Subject: [PATCH 08/14] Deploy #deploy-test-dolly-backend --- .../main/java/no/nav/dolly/DollyBackendApplicationStarter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java index 6af8668f77..f0ef428e58 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java @@ -10,4 +10,4 @@ public static void main(String[] args) { SpringApplication.run(DollyBackendApplicationStarter.class, args); } -} \ No newline at end of file +} From 1d7dd7f50f1c4aad54ca832d88165aeec7647e28 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 12:54:37 +0200 Subject: [PATCH 09/14] Update URL and response handling to use 'ident' instead of 'fnr' Changed the URL parameter from 'fnr' to 'ident' in `SletteAfpOffentligCommand` and updated the response handling in `LagreAfpOffentligCommand`. This ensures consistent usage of the identifier field across requests and responses. --- .../command/LagreAfpOffentligCommand.java | 12 ++++++------ .../command/SletteAfpOffentligCommand.java | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java index bcb84d1b27..72509b04f6 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java @@ -49,12 +49,12 @@ public Mono call() { .bodyValue(afpOffentligRequest) .retrieve() .toBodilessEntity() - .map(response -> pensjonforvalterResponse(miljoe, HttpStatus.valueOf(response.getStatusCode().value()))) + .map(response -> pensjonforvalterResponse(miljoe, ident, HttpStatus.valueOf(response.getStatusCode().value()))) .doOnError(WebClientFilter::logErrorMessage) - .onErrorResume(error -> Mono.just(pensjonforvalterResponseFromError(miljoe, error))); + .onErrorResume(error -> Mono.just(pensjonforvalterResponseFromError(miljoe, ident, error))); } - private static PensjonforvalterResponse pensjonforvalterResponse(String miljoe, HttpStatus status) { + private static PensjonforvalterResponse pensjonforvalterResponse(String miljoe, String ident, HttpStatus status) { var miljoeResponse = PensjonforvalterResponse.ResponseEnvironment.builder() .miljo(miljoe) @@ -63,7 +63,7 @@ private static PensjonforvalterResponse pensjonforvalterResponse(String miljoe, .status(status.value()) .reasonPhrase(status.getReasonPhrase()) .build()) - .path(PEN_AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe)) + .path(PEN_AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe).replace("{ident}", ident)) .build()) .build(); @@ -72,7 +72,7 @@ private static PensjonforvalterResponse pensjonforvalterResponse(String miljoe, .build(); } - private static PensjonforvalterResponse pensjonforvalterResponseFromError(String miljoe, Throwable error) { + private static PensjonforvalterResponse pensjonforvalterResponseFromError(String miljoe, String ident, Throwable error) { var miljoeResponse = PensjonforvalterResponse.ResponseEnvironment.builder() .miljo(miljoe) @@ -82,7 +82,7 @@ private static PensjonforvalterResponse pensjonforvalterResponseFromError(String .reasonPhrase(WebClientFilter.getStatus(error).getReasonPhrase()) .build()) .message(WebClientFilter.getMessage(error)) - .path(PEN_AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe)) + .path(PEN_AFP_OFFENTLIG_URL.replace("{miljoe}", miljoe).replace("{ident}", ident)) .build()) .build(); diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java index b628a706e2..a112230ffc 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java @@ -23,7 +23,7 @@ @RequiredArgsConstructor public class SletteAfpOffentligCommand implements Callable> { - private static final String AFP_OFFENTLIG_URL = "/{miljoe}/api/mock-oppsett/{fnr}"; + private static final String AFP_OFFENTLIG_URL = "/{miljoe}/api/mock-oppsett/{ident}"; private final WebClient webClient; private final String ident; From 7213ddf02d30d8f0860f8d2e118bddcf2edfb4da Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 13:35:47 +0200 Subject: [PATCH 10/14] Reduce response timeout and enable wiretap for HTTP client #deploy-pensjon-testdata-proxy Adjusted the HTTP client response-timeout from 1200s to 10s and enabled wiretap for both the client and server to assist in debugging. Additionally, configured logging levels for better traceability within Spring Cloud Gateway components. --- .../src/main/resources/application.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml index ab36b16fbb..59f8e4b2da 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml @@ -14,10 +14,22 @@ spring: cloud: gateway: httpclient: - response-timeout: 1200s + response-timeout: 30s + wiretap: true + httpserver: + wiretap: true vault: enabled: false +logging: + level: + reactor: + netty: INFO + org: + springframework: + cloud: + gateway: TRACE + server: servlet: encoding: From e53481fb25dbcd529422b66db94f653fc7899f3f Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Tue, 17 Sep 2024 13:55:56 +0200 Subject: [PATCH 11/14] Remove afp-offentlig mock from dev and update service URL #deploy-pensjon-testdata-proxy The afp-offentlig mock service has been removed from the application-dev.yml configuration. The service URL and cluster information have been updated in the application.yml file to reflect the new environment settings. --- .../src/main/resources/application-dev.yml | 2 -- .../src/main/resources/application.yml | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml index 231c181f50..70af6cc16b 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application-dev.yml @@ -2,5 +2,3 @@ consumers: pensjon-testdata-facade: url: https://pensjon-testdata-facade.dev.intern.nav.no - afp-offentlig: - url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml index 59f8e4b2da..6c15990c60 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml +++ b/proxies/pensjon-testdata-facade-proxy/src/main/resources/application.yml @@ -48,5 +48,5 @@ consumers: afp-offentlig: name: pensjon-afp-offentlig-mock-{miljoe} namespace: pensjon-saksbehandling - url: http://pensjon-afp-offentlig-mock-{miljoe}.pensjon-saksbehandling.svc.nais.local - cluster: dev-fss \ No newline at end of file + url: https://pensjon-afp-offentlig-mock-{miljoe}.intern.dev.nav.no + cluster: dev-gcp \ No newline at end of file From 0f7c76b03e51dbc8220e96869762a453aa03dc6b Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Wed, 18 Sep 2024 10:16:43 +0200 Subject: [PATCH 12/14] Update cluster config and HTTP method for AFP-Offentlig #deploy-test-dolly-backend #deploy-pensjon-testdata-proxy Changed cluster configuration from dev-fss to dev-gcp for specific applications in the config file. Modified logging messages and switched the HTTP method from POST to PUT for storing AFP-Offentlig data in the relevant Java command class. --- .../pensjonforvalter/command/LagreAfpOffentligCommand.java | 2 +- .../pensjonforvalter/command/SletteAfpOffentligCommand.java | 2 +- proxies/pensjon-testdata-facade-proxy/config.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java index 72509b04f6..8bcbe60a52 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/LagreAfpOffentligCommand.java @@ -39,7 +39,7 @@ public Mono call() { log.info("Pensjon afp-offentlig {} {}, callId: {}", miljoe, afpOffentligRequest, callId); return webClient - .post() + .put() .uri(uriBuilder -> uriBuilder .path(PEN_AFP_OFFENTLIG_URL) .build(miljoe, ident)) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java index a112230ffc..af238eef7e 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/SletteAfpOffentligCommand.java @@ -34,7 +34,7 @@ public class SletteAfpOffentligCommand implements Callable call() { var callId = generateCallId(); - log.info("Pensjon slette pensjonsavtale callId: {}", callId); + log.info("Pensjon slette AFP-Offentlig callId: {}", callId); return webClient .delete() diff --git a/proxies/pensjon-testdata-facade-proxy/config.yml b/proxies/pensjon-testdata-facade-proxy/config.yml index 6e40f9e9ad..c57e676b1d 100644 --- a/proxies/pensjon-testdata-facade-proxy/config.yml +++ b/proxies/pensjon-testdata-facade-proxy/config.yml @@ -58,10 +58,10 @@ spec: cluster: dev-gcp - application: pensjon-afp-offentlig-mock-q1 namespace: pensjon-saksbehandling - cluster: dev-fss + cluster: dev-gcp - application: pensjon-afp-offentlig-mock-q2 namespace: pensjon-saksbehandling - cluster: dev-fss + cluster: dev-gcp liveness: path: /internal/isAlive initialDelay: 4 From 830c50b671a15b0c8187898f2c701c98c5267c34 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Thu, 19 Sep 2024 09:55:26 +0200 Subject: [PATCH 13/14] deploy #deploy-pensjon-testdata-proxy --- .../PensjonTestdataFacadeProxyApplicationStarter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java index f302fa21aa..49072216df 100644 --- a/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java +++ b/proxies/pensjon-testdata-facade-proxy/src/main/java/no/nav/testnav/proxies/pensjontestdatafacadeproxy/PensjonTestdataFacadeProxyApplicationStarter.java @@ -81,4 +81,4 @@ private GatewayFilter getAuthenticationFilter(TrygdeetatenAzureAdTokenService to public static void main(String[] args) { SpringApplication.run(PensjonTestdataFacadeProxyApplicationStarter.class, args); } -} +} \ No newline at end of file From f463f98435c1bb9ddbe1981c05bdb66b85e2a0a2 Mon Sep 17 00:00:00 2001 From: kristenhaerum Date: Thu, 19 Sep 2024 10:44:35 +0200 Subject: [PATCH 14/14] Fix incorrect PEN_AFP_OFFENTLIG constant value #deploy-test-dolly-backend Corrected the PEN_AFP_OFFENTLIG constant to include a trailing '#'. This ensures consistent formatting with other similar constants and may prevent potential issues during data processing. --- .../bestilling/pensjonforvalter/PensjonforvalterClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java index f1b0f4106f..b4aabdc45b 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/PensjonforvalterClient.java @@ -88,7 +88,7 @@ public class PensjonforvalterClient implements ClientRegister { private static final String PEN_ALDERSPENSJON = "AP#"; private static final String PEN_UFORETRYGD = "Ufoer#"; private static final String PEN_PENSJONSAVTALE = "Pensjonsavtale#"; - private static final String PEN_AFP_OFFENTLIG = "AfpOffentlig"; + private static final String PEN_AFP_OFFENTLIG = "AfpOffentlig#"; private static final String PERIODE = "/periode/"; private final PensjonforvalterConsumer pensjonforvalterConsumer;