diff --git a/apps/adresse-service/config.yml b/apps/adresse-service/config.yml index 9afa0b9e9c5..74d4e2e4ef8 100644 --- a/apps/adresse-service/config.yml +++ b/apps/adresse-service/config.yml @@ -39,31 +39,20 @@ spec: accessPolicy: inbound: rules: - - application: testnav-oversikt-frontend - cluster: dev-gcp + - application: dolly-frontend + - application: dolly-frontend-dev + - application: dolly-frontend-dev-unstable + - application: dolly-idporten - application: team-dolly-lokal-app - cluster: dev-gcp + - application: testnav-endringsmelding-service - application: testnav-organisasjon-forvalter - cluster: dev-gcp + - application: testnav-oversikt-frontend - application: testnav-pdl-forvalter - cluster: dev-gcp - application: testnav-pdl-forvalter-dev - cluster: dev-gcp - - application: tps-forvalteren-dev - cluster: dev-fss - application: tps-forvalteren cluster: dev-fss - - application: dolly-frontend-dev - cluster: dev-gcp - - application: dolly-frontend - cluster: dev-gcp - - application: dolly-idporten - cluster: dev-gcp - - application: app-1 - namespace: plattformsikkerhet - cluster: dev-gcp - - application: testnav-endringsmelding-service - cluster: dev-gcp + - application: tps-forvalteren-dev + cluster: dev-fss outbound: external: - host: testnav-pdl-proxy.dev-fss-pub.nais.io diff --git a/apps/adresse-service/src/main/resources/logback-spring.xml b/apps/adresse-service/src/main/resources/logback-spring.xml index 7315b501544..b5676347c14 100644 --- a/apps/adresse-service/src/main/resources/logback-spring.xml +++ b/apps/adresse-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 @@ -35,5 +36,5 @@ - + \ No newline at end of file diff --git a/apps/amelding-service/config.yml b/apps/amelding-service/config.yml index 6bbad77339c..658233016a0 100644 --- a/apps/amelding-service/config.yml +++ b/apps/amelding-service/config.yml @@ -11,23 +11,13 @@ spec: accessPolicy: inbound: rules: - - application: team-dolly-lokal-app - cluster: dev-gcp - - application: testnav-oversikt-frontend - cluster: dev-gcp - - application: dolly-backend-dev - cluster: dev-gcp - application: dolly-backend - cluster: dev-gcp - - application: dolly-frontend-dev - cluster: dev-gcp + - application: dolly-backend-dev - application: dolly-frontend - cluster: dev-gcp + - application: dolly-frontend-dev - application: dolly-idporten - cluster: dev-gcp - - application: app-1 - namespace: plattformsikkerhet - cluster: dev-gcp + - application: team-dolly-lokal-app + - application: testnav-oversikt-frontend outbound: rules: - application: testnav-oppsummeringsdokument-service diff --git a/apps/amelding-service/src/main/resources/logback-spring.xml b/apps/amelding-service/src/main/resources/logback-spring.xml index 52c15597b3c..b674b8f8e84 100644 --- a/apps/amelding-service/src/main/resources/logback-spring.xml +++ b/apps/amelding-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 diff --git a/apps/app-tilgang-analyse-service/config.yml b/apps/app-tilgang-analyse-service/config.yml index 19edc95c9ab..6af65eac8e0 100644 --- a/apps/app-tilgang-analyse-service/config.yml +++ b/apps/app-tilgang-analyse-service/config.yml @@ -19,12 +19,7 @@ spec: inbound: rules: - application: team-dolly-lokal-app - cluster: dev-gcp - application: testnav-oversikt-frontend - cluster: dev-gcp - - application: app-1 - cluster: dev-gcp - namespace: plattformsikkerhet outbound: external: - host: api.github.com diff --git a/apps/app-tilgang-analyse-service/src/main/resources/logback-spring.xml b/apps/app-tilgang-analyse-service/src/main/resources/logback-spring.xml index 8fe635b4e57..803031980fa 100644 --- a/apps/app-tilgang-analyse-service/src/main/resources/logback-spring.xml +++ b/apps/app-tilgang-analyse-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 diff --git a/apps/arbeidsforhold-service/src/main/resources/logback-spring.xml b/apps/arbeidsforhold-service/src/main/resources/logback-spring.xml index 2066327923b..b052f83d230 100644 --- a/apps/arbeidsforhold-service/src/main/resources/logback-spring.xml +++ b/apps/arbeidsforhold-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 diff --git a/apps/batch-bestilling-service/config.yml b/apps/batch-bestilling-service/config.yml index dfc14304b02..5ab41a834d7 100644 --- a/apps/batch-bestilling-service/config.yml +++ b/apps/batch-bestilling-service/config.yml @@ -15,12 +15,11 @@ spec: inbound: rules: - application: team-dolly-lokal-app - cluster: dev-gcp - application: testnav-oversikt-frontend - cluster: dev-gcp outbound: rules: - application: dolly-backend + - application: dolly-backend-dev azure: application: allowAllUsers: true diff --git a/apps/batch-bestilling-service/src/main/java/no/nav/registre/testnorge/batchbestillingservice/config/DevConfig.java b/apps/batch-bestilling-service/src/main/java/no/nav/registre/testnorge/batchbestillingservice/config/DevConfig.java index d5795d77967..7f2ce2bae18 100644 --- a/apps/batch-bestilling-service/src/main/java/no/nav/registre/testnorge/batchbestillingservice/config/DevConfig.java +++ b/apps/batch-bestilling-service/src/main/java/no/nav/registre/testnorge/batchbestillingservice/config/DevConfig.java @@ -2,6 +2,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.lang.NonNull; import org.springframework.vault.annotation.VaultPropertySource; import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.TokenAuthentication; @@ -13,17 +14,18 @@ @Configuration @Profile("dev") @VaultPropertySource(value = "secret/dolly/lokal", ignoreSecretNotFound = false) -@VaultPropertySource(value = "secret/.common/tokenx/dev/app-1", ignoreSecretNotFound = false) public class DevConfig extends AbstractVaultConfiguration { - private static final String VAULT_TOKEN = "spring.cloud.vault.token"; + 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")); diff --git a/apps/batch-bestilling-service/src/main/resources/logback-spring.xml b/apps/batch-bestilling-service/src/main/resources/logback-spring.xml index 1a9ce7a5e5c..27020c5c331 100644 --- a/apps/batch-bestilling-service/src/main/resources/logback-spring.xml +++ b/apps/batch-bestilling-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 diff --git a/apps/brreg-stub/src/main/resources/logback-spring.xml b/apps/brreg-stub/src/main/resources/logback-spring.xml index 7315b501544..86987ef37a2 100644 --- a/apps/brreg-stub/src/main/resources/logback-spring.xml +++ b/apps/brreg-stub/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 diff --git a/apps/bruker-service/config.test.yml b/apps/bruker-service/config.test.yml index a9afa1ccde4..212ff54597d 100644 --- a/apps/bruker-service/config.test.yml +++ b/apps/bruker-service/config.test.yml @@ -20,19 +20,11 @@ spec: accessPolicy: inbound: rules: - - application: team-dolly-lokal-app - cluster: dev-gcp - - application: testnav-oversikt-frontend - cluster: dev-gcp - application: dolly-frontend-dev - cluster: dev-gcp - - application: dolly-idporten - cluster: dev-gcp - application: dolly-frontend-dev-unstable - cluster: dev-gcp - - application: app-1 - namespace: plattformsikkerhet - cluster: dev-gcp + - application: dolly-idporten + - application: team-dolly-lokal-app + - application: testnav-oversikt-frontend outbound: rules: - application: testnav-person-organisasjon-tilgang-service-dev diff --git a/apps/bruker-service/src/main/resources/logback-spring.xml b/apps/bruker-service/src/main/resources/logback-spring.xml index 70ee88e5962..b0e1850eb07 100644 --- a/apps/bruker-service/src/main/resources/logback-spring.xml +++ b/apps/bruker-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 @@ -24,7 +25,8 @@ - + + true 256 diff --git a/apps/budpro-service/src/main/resources/logback-spring.xml b/apps/budpro-service/src/main/resources/logback-spring.xml index 8404dbd99f3..a92f9af3406 100644 --- a/apps/budpro-service/src/main/resources/logback-spring.xml +++ b/apps/budpro-service/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 diff --git a/apps/dolly-backend/config.test.yml b/apps/dolly-backend/config.test.yml index dfd3b0c610b..46df37d2e1f 100644 --- a/apps/dolly-backend/config.test.yml +++ b/apps/dolly-backend/config.test.yml @@ -16,23 +16,16 @@ spec: accessPolicy: inbound: rules: - - application: testnav-oversikt-frontend - cluster: dev-gcp - application: dolly-frontend-dev - cluster: dev-gcp - - application: dolly-idporten - cluster: dev-gcp - application: dolly-frontend-dev-unstable - cluster: dev-gcp - - application: testnav-batch-bestilling-service - cluster: dev-gcp + - application: dolly-idporten - application: team-dolly-lokal-app - cluster: dev-gcp - - application: app-1 - namespace: plattformsikkerhet - cluster: dev-gcp + - application: testnav-batch-bestilling-service + - application: testnav-dollystatus + - application: testnav-oversikt-frontend outbound: rules: + - application: generer-navn-service - application: testnav-amelding-service - application: testnav-arbeidsforhold-service - application: testnav-arbeidsplassencv-proxy diff --git a/apps/dolly-backend/config.yml b/apps/dolly-backend/config.yml index 8919f2da7e5..ab8d0dc02a3 100644 --- a/apps/dolly-backend/config.yml +++ b/apps/dolly-backend/config.yml @@ -16,30 +16,18 @@ spec: inbound: rules: - application: dolly-frontend - cluster: dev-gcp - application: dolly-idporten - cluster: dev-gcp + - application: testnav-batch-bestilling-service - application: testnav-dollystatus - cluster: dev-gcp + - application: testnav-helsepersonell-service - application: testnav-oversikt-frontend - cluster: dev-gcp - - application: testnav-batch-bestilling-service - cluster: dev-gcp - application: etterlatte-testdata - cluster: dev-gcp namespace: etterlatte - - application: devtools - cluster: dev-gcp - namespace: aap - - application: bot - cluster: dev-gcp - namespace: aap - - application: testnav-helsepersonell-service - cluster: dev-gcp - application: statuspoll namespace: navdig outbound: rules: + - application: generer-navn-service - application: testnav-amelding-service - application: testnav-arbeidsforhold-service - application: testnav-arbeidsplassencv-proxy @@ -50,6 +38,7 @@ spec: - application: testnav-organisasjon-service - application: testnav-pdl-forvalter - application: testnav-person-service + - application: testnav-skattekort-service - application: testnav-sykemelding-api - application: testnav-synt-sykemelding-api - application: testnav-tps-messaging-service 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 6af8668f777..f0ef428e58d 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 +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/OpprettPersonCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/OpprettPersonCommand.java index a72dfc6a746..e23888c7b1f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/OpprettPersonCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/pensjonforvalter/command/OpprettPersonCommand.java @@ -9,6 +9,7 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import reactor.netty.http.client.HttpClientRequest; import reactor.util.retry.Retry; import java.time.Duration; @@ -19,6 +20,7 @@ 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 no.nav.dolly.util.RequestTimeout.REQUEST_DURATION; import static org.springframework.http.HttpHeaders.AUTHORIZATION; @Slf4j @@ -41,6 +43,10 @@ public Flux call() { .uri(uriBuilder -> uriBuilder .path(PENSJON_OPPRETT_PERSON_URL) .build()) + .httpRequest(httpRequest -> { + HttpClientRequest reactorRequest = httpRequest.getNativeRequest(); + reactorRequest.responseTimeout(Duration.ofSeconds(REQUEST_DURATION)); + }) .header(AUTHORIZATION, "Bearer " + token) .header(UserConstant.USER_HEADER_JWT, getUserJwt()) .header(HEADER_NAV_CALL_ID, callId) @@ -68,4 +74,4 @@ public Flux call() { .toList()) .build())); } -} \ No newline at end of file +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/TpsMessagingConsumer.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/TpsMessagingConsumer.java index a06891bd259..c0d78e1c627 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/TpsMessagingConsumer.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/TpsMessagingConsumer.java @@ -5,7 +5,7 @@ import no.nav.dolly.bestilling.ConsumerStatus; import no.nav.dolly.bestilling.tpsmessagingservice.command.EgenansattDeleteCommand; import no.nav.dolly.bestilling.tpsmessagingservice.command.EgenansattPostCommand; -import no.nav.dolly.bestilling.tpsmessagingservice.command.PersonGetCommand; +import no.nav.dolly.bestilling.tpsmessagingservice.command.PersonHentCommand; import no.nav.dolly.bestilling.tpsmessagingservice.command.TpsMessagingPostCommand; import no.nav.dolly.config.Consumers; import no.nav.dolly.metrics.Timed; @@ -52,7 +52,7 @@ public TpsMessagingConsumer( .build(); } - @Timed(name = "providers", tags = {"operation", "tps_messaging_createUtenlandskBankkonto"}) + @Timed(name = "providers", tags = { "operation", "tps_messaging_createUtenlandskBankkonto" }) public Flux sendUtenlandskBankkontoRequest(String ident, List miljoer, BankkontonrUtlandDTO body) { @@ -61,7 +61,7 @@ public Flux sendUtenlandskBankkontoRequest(String ident, new TpsMessagingPostCommand(webClient, ident, miljoer, body, UTENLANDSK_BANKKONTO_URL, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = {"operation", "tps_messaging_createNorskBankkonto"}) + @Timed(name = "providers", tags = { "operation", "tps_messaging_createNorskBankkonto" }) public Flux sendNorskBankkontoRequest(String ident, List miljoer, BankkontonrNorskDTO body) { return tokenService.exchange(serverProperties) @@ -69,7 +69,7 @@ public Flux sendNorskBankkontoRequest(String ident, List< new TpsMessagingPostCommand(webClient, ident, miljoer, body, NORSK_BANKKONTO_URL, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = {"operation", "tps_messaging_createSkjerming"}) + @Timed(name = "providers", tags = { "operation", "tps_messaging_createSkjerming" }) public Flux sendEgenansattRequest(String ident, List miljoer, LocalDate fraOgMed) { return tokenService.exchange(serverProperties) @@ -77,14 +77,14 @@ public Flux sendEgenansattRequest(String ident, List deleteEgenansattRequest(String ident, List miljoer) { return tokenService.exchange(serverProperties) .flatMapMany(token -> new EgenansattDeleteCommand(webClient, ident, miljoer, token.getTokenValue()).call()); } - @Timed(name = "providers", tags = {"operation", "tps_messaging_createSpraakkode"}) + @Timed(name = "providers", tags = { "operation", "tps_messaging_createSpraakkode" }) public Flux sendSpraakkodeRequest(String ident, List miljoer, SpraakDTO body) { return tokenService.exchange(serverProperties) @@ -92,11 +92,11 @@ public Flux sendSpraakkodeRequest(String ident, List getPerson(String ident, List miljoer) { return tokenService.exchange(serverProperties) - .flatMapMany(token -> new PersonGetCommand(webClient, ident, miljoer, token.getTokenValue()).call()); + .flatMapMany(token -> new PersonHentCommand(webClient, ident, miljoer, token.getTokenValue()).call()); } @Override diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/command/PersonGetCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/command/PersonHentCommand.java similarity index 86% rename from apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/command/PersonGetCommand.java rename to apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/command/PersonHentCommand.java index 7d30c111fdd..66c17fa02a3 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/command/PersonGetCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/tpsmessagingservice/command/PersonHentCommand.java @@ -14,10 +14,10 @@ @RequiredArgsConstructor @Slf4j -public class PersonGetCommand implements Callable> { +public class PersonHentCommand implements Callable> { private static final String MILJOER_PARAM = "miljoer"; - private static final String PERSONER_URL = "/api/v1/personer/{ident}"; + private static final String PERSONER_URL = "/api/v2/personer/ident"; private final WebClient webClient; private final String ident; @@ -27,11 +27,12 @@ public class PersonGetCommand implements Callable> { @Override public Flux call() { - return webClient.get() + return webClient.post() .uri(uriBuilder -> uriBuilder .path(PERSONER_URL) .queryParam(MILJOER_PARAM, miljoer) - .build(ident)) + .build()) + .bodyValue(ident) .header(HttpHeaders.AUTHORIZATION, "Bearer " + token) .retrieve() .bodyToFlux(PersonMiljoeDTO.class) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/config/CachingConfig.java b/apps/dolly-backend/src/main/java/no/nav/dolly/config/CachingConfig.java index 769530033ad..b3e918603dd 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/config/CachingConfig.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/config/CachingConfig.java @@ -17,6 +17,7 @@ public class CachingConfig { public static final String CACHE_BESTILLING = "bestilling"; + public static final String CACHE_BESTILLING_MAL = "bestilling-mal"; public static final String CACHE_BRUKER = "bruker"; public static final String CACHE_GRUPPE = "gruppe"; public static final String CACHE_HELSEPERSONELL = "helsepersonell"; @@ -25,6 +26,7 @@ public class CachingConfig { @Profile({ "dev", "prod" }) public CacheManager cacheManager(Caffeine caffeine) { var caffeineCacheManager = new CaffeineCacheManager(CACHE_BESTILLING, + CACHE_BESTILLING_MAL, CACHE_BRUKER, CACHE_GRUPPE, CACHE_HELSEPERSONELL diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/config/JsonMapperConfig.java b/apps/dolly-backend/src/main/java/no/nav/dolly/config/JsonMapperConfig.java index ab13b6f8be8..a8eb426cdd2 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/config/JsonMapperConfig.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/config/JsonMapperConfig.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.YearMonthSerializer; @@ -45,12 +46,14 @@ public ObjectMapper objectMapper() { .addSerializer(ZonedDateTime.class, new ZonedDateTimeSerializer(DateTimeFormatter.ISO_DATE_TIME)); return JsonMapper .builder() + .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true) .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true) .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS) .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) .build() + .registerModule(new JavaTimeModule()) .registerModule(simpleModule); } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/PdlPersonBolk.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/PdlPersonBolk.java index 61c1e4f1c74..081c322ee18 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/PdlPersonBolk.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/PdlPersonBolk.java @@ -1,15 +1,13 @@ package no.nav.dolly.domain; +import com.fasterxml.jackson.databind.JsonNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.ArrayList; import java.util.List; -import static java.util.Objects.isNull; - @Data @Builder @NoArgsConstructor @@ -17,7 +15,7 @@ public class PdlPersonBolk { private Data data; - private Extensions extensions; + private JsonNode extensions; @lombok.Data @Builder @@ -30,36 +28,6 @@ public static class Data { private List hentIdenterBolk; } - @lombok.Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class Extensions { - - private List warnings; - - public List getWarnings() { - - if (isNull(warnings)) { - warnings = new ArrayList<>(); - } - return warnings; - } - } - - @lombok.Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class Warning { - - private String code; - private String details; - private String id; - private String message; - private String query; - } - @lombok.Data @Builder @NoArgsConstructor diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/jpa/Bruker.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/jpa/Bruker.java index 3b07d184c96..58441a7da19 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/jpa/Bruker.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/jpa/Bruker.java @@ -1,5 +1,6 @@ package no.nav.dolly.domain.jpa; +import com.fasterxml.jackson.annotation.JsonInclude; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -36,6 +37,7 @@ @NoArgsConstructor @AllArgsConstructor @Table(name = "BRUKER") +@JsonInclude(JsonInclude.Include.NON_EMPTY) public class Bruker implements Serializable { @Id diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsBestillingStatus.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsBestillingStatus.java index e0fdc364c23..21db02dc4fc 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsBestillingStatus.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsBestillingStatus.java @@ -1,32 +1,12 @@ package no.nav.dolly.domain.resultset.entity.bestilling; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.JsonNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import no.nav.dolly.domain.resultset.RsStatusRapport; -import no.nav.dolly.domain.resultset.aareg.RsAareg; -import no.nav.dolly.domain.resultset.arenaforvalter.Arenadata; -import no.nav.dolly.domain.resultset.breg.RsBregdata; -import no.nav.dolly.domain.resultset.dokarkiv.RsDokarkiv; import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; -import no.nav.dolly.domain.resultset.histark.RsHistark; -import no.nav.dolly.domain.resultset.inntektsmeldingstub.RsInntektsmelding; -import no.nav.dolly.domain.resultset.inntektstub.InntektMultiplierWrapper; -import no.nav.dolly.domain.resultset.inst.RsInstdata; -import no.nav.dolly.domain.resultset.kontoregister.BankkontoData; -import no.nav.dolly.domain.resultset.krrstub.RsDigitalKontaktdata; -import no.nav.dolly.domain.resultset.medl.RsMedl; -import no.nav.dolly.domain.resultset.pdldata.PdlPersondata; -import no.nav.dolly.domain.resultset.pensjon.PensjonData; -import no.nav.dolly.domain.resultset.sigrunstub.RsLignetInntekt; -import no.nav.dolly.domain.resultset.sigrunstub.RsPensjonsgivendeForFolketrygden; -import no.nav.dolly.domain.resultset.skjerming.RsSkjerming; -import no.nav.dolly.domain.resultset.sykemelding.RsSykemelding; -import no.nav.dolly.domain.resultset.tpsmessagingservice.RsTpsMessaging; -import no.nav.dolly.domain.resultset.udistub.model.RsUdiPerson; -import no.nav.testnav.libs.data.arbeidsplassencv.v1.ArbeidsplassenCVDTO; import java.time.LocalDateTime; import java.util.ArrayList; @@ -39,7 +19,6 @@ @Data @NoArgsConstructor @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_EMPTY) @Builder public class RsBestillingStatus { @@ -58,7 +37,7 @@ public class RsBestillingStatus { private Long opprettetFraId; private Long opprettetFraGruppeId; private Long gjenopprettetFraIdent; - private RsBestilling bestilling; + private JsonNode bestilling; private String opprettFraIdenter; public Set getEnvironments() { @@ -74,36 +53,4 @@ public List getStatus() { } return status; } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - @JsonInclude(JsonInclude.Include.NON_EMPTY) - public static class RsBestilling { - - private Boolean navSyntetiskIdent; - private List importFraPdl; - private String kildeMiljoe; - private RsDigitalKontaktdata krrstub; - private List instdata; - private List aareg; - private List sigrunstub; - private List sigrunstubPensjonsgivende; - private InntektMultiplierWrapper inntektstub; - private Arenadata arenaforvalter; - private RsUdiPerson udistub; - private PensjonData pensjonforvalter; - private RsInntektsmelding inntektsmelding; - private RsBregdata brregstub; - private RsDokarkiv dokarkiv; - private RsMedl medl; - private RsHistark histark; - private RsSykemelding sykemelding; - private PdlPersondata pdldata; - private RsTpsMessaging tpsMessaging; - private BankkontoData bankkonto; - private RsSkjerming skjerming; - private ArbeidsplassenCVDTO arbeidsplassenCV; - } } \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestilling.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestilling.java new file mode 100644 index 00000000000..cfcbaf8bc8e --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestilling.java @@ -0,0 +1,24 @@ +package no.nav.dolly.domain.resultset.entity.bestilling; + +import com.fasterxml.jackson.databind.JsonNode; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; + +import java.time.LocalDateTime; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RsMalBestilling { + + private Long id; + private JsonNode bestilling; + private String miljoer; + private String malNavn; + private RsBrukerUtenFavoritter bruker; + private LocalDateTime sistOppdatert; +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestillingWrapper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestillingWrapper.java index 5033027879a..7bb94900566 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestillingWrapper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/entity/bestilling/RsMalBestillingWrapper.java @@ -1,36 +1,13 @@ package no.nav.dolly.domain.resultset.entity.bestilling; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import no.nav.dolly.domain.resultset.aareg.RsAareg; -import no.nav.dolly.domain.resultset.arenaforvalter.Arenadata; -import no.nav.dolly.domain.resultset.breg.RsBregdata; -import no.nav.dolly.domain.resultset.dokarkiv.RsDokarkiv; -import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; -import no.nav.dolly.domain.resultset.histark.RsHistark; -import no.nav.dolly.domain.resultset.inntektsmeldingstub.RsInntektsmelding; -import no.nav.dolly.domain.resultset.inntektstub.InntektMultiplierWrapper; -import no.nav.dolly.domain.resultset.inst.RsInstdata; -import no.nav.dolly.domain.resultset.kontoregister.BankkontoData; -import no.nav.dolly.domain.resultset.krrstub.RsDigitalKontaktdata; -import no.nav.dolly.domain.resultset.medl.RsMedl; -import no.nav.dolly.domain.resultset.pdldata.PdlPersondata; -import no.nav.dolly.domain.resultset.pensjon.PensjonData; -import no.nav.dolly.domain.resultset.sigrunstub.RsLignetInntekt; -import no.nav.dolly.domain.resultset.sigrunstub.RsPensjonsgivendeForFolketrygden; -import no.nav.dolly.domain.resultset.skjerming.RsSkjerming; -import no.nav.dolly.domain.resultset.sykemelding.RsSykemelding; -import no.nav.dolly.domain.resultset.tpsmessagingservice.RsTpsMessaging; -import no.nav.dolly.domain.resultset.udistub.model.RsUdiPerson; -import no.nav.testnav.libs.data.arbeidsplassencv.v1.ArbeidsplassenCVDTO; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.TreeMap; import static java.util.Objects.isNull; @@ -51,52 +28,4 @@ public Map> getMalbestillinger() { } return malbestillinger; } - - @Getter - @Setter - @Builder - @NoArgsConstructor - @AllArgsConstructor - @JsonInclude(JsonInclude.Include.NON_EMPTY) - public static class RsMalBestilling { - - private Long id; - private String malNavn; - private RsBestilling bestilling; - private RsBrukerUtenFavoritter bruker; - } - - @Getter - @Setter - @Builder - @NoArgsConstructor - @AllArgsConstructor - @JsonInclude(JsonInclude.Include.NON_EMPTY) - public static class RsBestilling { - - private Integer antallIdenter; - private Boolean navSyntetiskIdent; - private String opprettFraIdenter; - private Set environments; - private PdlPersondata pdldata; - private RsDigitalKontaktdata krrstub; - private List instdata; - private List aareg; - private List sigrunstub; - private List sigrunstubPensjonsgivende; - private InntektMultiplierWrapper inntektstub; - private Arenadata arenaforvalter; - private RsUdiPerson udistub; - private RsInntektsmelding inntektsmelding; - private PensjonData pensjonforvalter; - private RsBregdata brregstub; - private RsDokarkiv dokarkiv; - private RsMedl medl; - private RsHistark histark; - private RsSykemelding sykemelding; - private RsTpsMessaging tpsMessaging; - private RsSkjerming skjerming; - private BankkontoData bankkonto; - private ArbeidsplassenCVDTO arbeidsplassenCV; - } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingMapper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingMapper.java similarity index 97% rename from apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingMapper.java rename to apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingMapper.java index ef7c5ea975d..9e805136d87 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingMapper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingMapper.java @@ -1,4 +1,4 @@ -package no.nav.dolly.mapper.strategy; +package no.nav.dolly.mapper; import lombok.experimental.UtilityClass; import no.nav.dolly.domain.jpa.Bestilling; diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingStatusMappingStrategy.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingStatusMappingStrategy.java index e7b03e9a9f3..11d9d610bdc 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingStatusMappingStrategy.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/BestillingStatusMappingStrategy.java @@ -1,5 +1,6 @@ package no.nav.dolly.mapper.strategy; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -9,16 +10,14 @@ import no.nav.dolly.domain.jpa.Bestilling; import no.nav.dolly.domain.jpa.BestillingProgress; import no.nav.dolly.domain.jpa.OrganisasjonBestilling; -import no.nav.dolly.domain.resultset.RsDollyBestillingRequest; import no.nav.dolly.domain.resultset.entity.bestilling.RsBestillingStatus; import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; import no.nav.dolly.mapper.MappingStrategy; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; +import org.springframework.web.server.ResponseStatusException; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - +import static java.util.Objects.isNull; import static no.nav.dolly.bestilling.service.DollyBestillingService.getEnvironments; import static no.nav.dolly.mapper.AnnenFeilStatusMapper.buildAnnenFeilStatusMap; import static no.nav.dolly.mapper.ArbeidsplassenCVStatusMapper.buildArbeidsplassenCVStatusMap; @@ -44,14 +43,13 @@ import static no.nav.dolly.mapper.BestillingTpsMessagingStatusMapper.buildTpsMessagingStatusMap; import static no.nav.dolly.mapper.BestillingUdiStubStatusMapper.buildUdiStubStatusMap; import static org.apache.commons.lang3.StringUtils.isBlank; -import static org.apache.commons.lang3.StringUtils.isNotBlank; @Slf4j @Component @RequiredArgsConstructor public class BestillingStatusMappingStrategy implements MappingStrategy { - private final JsonBestillingMapper jsonBestillingMapper; + private static final String EMPTY_JSON = "{}"; private final ObjectMapper objectMapper; @Override @@ -62,12 +60,21 @@ public void register(MapperFactory factory) { public void mapAtoB(Bestilling bestilling, RsBestillingStatus bestillingStatus, MappingContext context) { var ident = (String) context.getProperty("ident"); + try { + bestillingStatus.setBestilling( + objectMapper.readTree(isNull(bestilling.getBestKriterier()) || + EMPTY_JSON.equals(bestilling.getBestKriterier()) ? EMPTY_JSON : + bestilling.getBestKriterier())); + } catch (JsonProcessingException e) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); + } + + bestillingStatus.setBruker(mapperFacade.map(bestilling.getBruker(), RsBrukerUtenFavoritter.class)); + var progresser = bestilling.getProgresser().stream() .filter(progress -> isBlank(ident) || ident.equals(progress.getIdent())) .toList(); - RsDollyBestillingRequest bestillingRequest = jsonBestillingMapper - .mapBestillingRequest(bestilling.getId(), bestilling.getBestKriterier()); bestillingStatus.setAntallLevert((int) progresser.stream() .filter(BestillingProgress::isIdentGyldig) .count()); @@ -97,32 +104,6 @@ public void mapAtoB(Bestilling bestilling, RsBestillingStatus bestillingStatus, bestillingStatus.getStatus().addAll(buildKontoregisterStatusMap(progresser)); bestillingStatus.getStatus().addAll(buildArbeidsplassenCVStatusMap(progresser)); bestillingStatus.getStatus().addAll(buildAnnenFeilStatusMap(progresser)); - bestillingStatus.setBestilling(RsBestillingStatus.RsBestilling.builder() - .pdldata(bestillingRequest.getPdldata()) - .aareg(bestillingRequest.getAareg()) - .krrstub(bestillingRequest.getKrrstub()) - .medl(bestillingRequest.getMedl()) - .arenaforvalter(bestillingRequest.getArenaforvalter()) - .instdata(bestillingRequest.getInstdata()) - .inntektstub(bestillingRequest.getInntektstub()) - .sigrunstub(bestillingRequest.getSigrunstub()) - .sigrunstubPensjonsgivende(bestillingRequest.getSigrunstubPensjonsgivende()) - .udistub(bestillingRequest.getUdistub()) - .pensjonforvalter(bestillingRequest.getPensjonforvalter()) - .inntektsmelding(bestillingRequest.getInntektsmelding()) - .brregstub(bestillingRequest.getBrregstub()) - .dokarkiv(bestillingRequest.getDokarkiv()) - .histark(bestillingRequest.getHistark()) - .sykemelding(bestillingRequest.getSykemelding()) - .skjerming(bestillingRequest.getSkjerming()) - .tpsMessaging(bestillingRequest.getTpsMessaging()) - .bankkonto(bestillingRequest.getBankkonto()) - .arbeidsplassenCV(bestillingRequest.getArbeidsplassenCV()) - .importFraPdl(mapIdents(bestilling.getPdlImport())) - .kildeMiljoe(bestilling.getKildeMiljoe()) - .navSyntetiskIdent(bestilling.getNavSyntetiskIdent()) - .build()); - bestillingStatus.setBruker(mapperFacade.map(bestilling.getBruker(), RsBrukerUtenFavoritter.class)); } }) .exclude("bruker") @@ -139,9 +120,6 @@ public void mapAtoB(OrganisasjonBestilling bestilling, RsBestillingStatus bestil }) .byDefault() .register(); - } - private static List mapIdents(String idents) { - return isNotBlank(idents) ? Arrays.asList(idents.split(",")) : Collections.emptyList(); } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/DollyRequest2MalBestillingMappingStrategy.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/DollyRequest2MalBestillingMappingStrategy.java new file mode 100644 index 00000000000..484f5dd7757 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/DollyRequest2MalBestillingMappingStrategy.java @@ -0,0 +1,201 @@ +package no.nav.dolly.mapper.strategy; + +import ma.glasnost.orika.CustomMapper; +import ma.glasnost.orika.MapperFactory; +import ma.glasnost.orika.MappingContext; +import no.nav.dolly.domain.resultset.RsDollyUtvidetBestilling; +import no.nav.dolly.domain.resultset.arenaforvalter.Arenadata; +import no.nav.dolly.domain.resultset.inntektstub.InntektMultiplierWrapper; +import no.nav.dolly.domain.resultset.kontoregister.BankkontoData; +import no.nav.dolly.domain.resultset.krrstub.RsDigitalKontaktdata; +import no.nav.dolly.domain.resultset.pdldata.PdlPersondata; +import no.nav.dolly.domain.resultset.pensjon.PensjonData; +import no.nav.dolly.domain.resultset.sykemelding.RsSykemelding; +import no.nav.dolly.mapper.MappingStrategy; +import no.nav.testnav.libs.data.arbeidsplassencv.v1.ArbeidsplassenCVDTO; +import no.nav.testnav.libs.data.pdlforvalter.v1.PersonDTO; +import org.springframework.stereotype.Component; + +@Component +public class DollyRequest2MalBestillingMappingStrategy implements MappingStrategy { + + @Override + public void register(MapperFactory factory) { + factory.classMap(RsDollyUtvidetBestilling.class, RsDollyUtvidetBestilling.class) + .mapNulls(false) + .field("arbeidsplassenCV", "arbeidsplassenCV") + .field("arenaforvalter", "arenaforvalter") + .field("bankkonto", "bankkonto") + .field("brregstub", "brregstub") + .field("dokarkiv", "dokarkiv") + .field("environments", "environments") + .field("histark", "histark") + .field("inntektsmelding", "inntektsmelding") + .field("inntektstub", "inntektstub") + .field("krrstub", "krrstub") + .field("medl", "medl") + .field("navSyntetiskIdent", "navSyntetiskIdent") + .field("pdldata", "pdldata") + .field("pensjonforvalter", "pensjonforvalter") + .field("sigrunstub", "sigrunstub") + .field("sigrunstubPensjonsgivende", "sigrunstubPensjonsgivende") + .field("skjerming", "skjerming") + .field("sykemelding", "sykemelding") + .field("tpsMessaging", "tpsMessaging") + .field("udistub", "udistub") + + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(RsDollyUtvidetBestilling request, RsDollyUtvidetBestilling akkumulert, MappingContext context) { + + akkumulert.getAareg().addAll(request.getAareg()); + akkumulert.getEnvironments().addAll(request.getEnvironments()); + akkumulert.getInstdata().addAll(request.getInstdata()); + akkumulert.getSigrunstub().addAll(request.getSigrunstub()); + akkumulert.getSigrunstubPensjonsgivende().addAll(request.getSigrunstubPensjonsgivende()); + } + }) + .register(); + + factory.classMap(ArbeidsplassenCVDTO.Jobboensker.class, ArbeidsplassenCVDTO.Jobboensker.class) + .mapNulls(false) + .field("active", "active") + .field("startOption", "startOption") + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(ArbeidsplassenCVDTO.Jobboensker jobboensker, ArbeidsplassenCVDTO.Jobboensker akkumulert, MappingContext context) { + akkumulert.getLocations().addAll(jobboensker.getLocations()); + akkumulert.getOccupationDrafts().addAll(jobboensker.getOccupationDrafts()); + akkumulert.getOccupationTypes().addAll(jobboensker.getOccupationTypes()); + akkumulert.getOccupations().addAll(jobboensker.getOccupations()); + akkumulert.getWorkLoadTypes().addAll(jobboensker.getWorkLoadTypes()); + akkumulert.getWorkScheduleTypes().addAll(jobboensker.getWorkScheduleTypes()); + } + }) + .register(); + + factory.classMap(ArbeidsplassenCVDTO.class, ArbeidsplassenCVDTO.class) + .mapNulls(false) + .field("harHjemmel", "harHjemmel") + .field("harBil", "harBil") + .field("sammendrag", "sammendrag") + .field("jobboensker", "jobboensker") + .field("sistEndretAvNav", "sistEndretAvNav") + .field("sistEndret", "sistEndret") + + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(ArbeidsplassenCVDTO arbeidsplassenCV, ArbeidsplassenCVDTO akkumulert, MappingContext context) { + akkumulert.getAndreGodkjenninger().addAll(arbeidsplassenCV.getAndreGodkjenninger()); + akkumulert.getAnnenErfaring().addAll(arbeidsplassenCV.getAnnenErfaring()); + akkumulert.getArbeidserfaring().addAll(arbeidsplassenCV.getArbeidserfaring()); + akkumulert.getFagbrev().addAll(arbeidsplassenCV.getFagbrev()); + akkumulert.getFoererkort().addAll(arbeidsplassenCV.getFoererkort()); + akkumulert.getKompetanser().addAll(arbeidsplassenCV.getKompetanser()); + akkumulert.getKurs().addAll(arbeidsplassenCV.getKurs()); + akkumulert.getOffentligeGodkjenninger().addAll(arbeidsplassenCV.getOffentligeGodkjenninger()); + akkumulert.getSpraak().addAll(arbeidsplassenCV.getSpraak()); + akkumulert.getUtdanning().addAll(arbeidsplassenCV.getUtdanning()); + } + }) + .register(); + + factory.classMap(RsDigitalKontaktdata.class, RsDigitalKontaktdata.class) + .mapNulls(false) + .byDefault() + .register(); + + factory.classMap(RsSykemelding.class, RsSykemelding.class) + .mapNulls(false) + .byDefault() + .register(); + + factory.classMap(BankkontoData.class, BankkontoData.class) + .mapNulls(false) + .byDefault() + .register(); + + factory.classMap(InntektMultiplierWrapper.class, InntektMultiplierWrapper.class) + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(InntektMultiplierWrapper inntekt, InntektMultiplierWrapper akkumlert, MappingContext context) { + akkumlert.getInntektsinformasjon().addAll(inntekt.getInntektsinformasjon()); + } + }) + .register(); + + factory.classMap(PensjonData.class, PensjonData.class) + .mapNulls(false) + .field("inntekt", "inntekt") + .field("alderspensjon", "alderspensjon") + .field("uforetrygd", "uforetrygd") + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(PensjonData pensjonData, PensjonData akkumulert, MappingContext context) { + akkumulert.getTp().addAll(pensjonData.getTp()); + } + }) + .register(); + + factory.classMap(Arenadata.class, Arenadata.class) + .mapNulls(false) + .field("aktiveringDato", "aktiveringDato") + .field("arenaBrukertype", "arenaBrukertype") + .field("automatiskInnsendingAvMeldekort", "automatiskInnsendingAvMeldekort") + .field("inaktiveringDato", "inaktiveringDato") + .field("kvalifiseringsgruppe", "kvalifiseringsgruppe") + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(Arenadata arenadata, Arenadata akkumulert, MappingContext context) { + akkumulert.getAap115().addAll(arenadata.getAap115()); + akkumulert.getAap().addAll(arenadata.getAap()); + akkumulert.getDagpenger().addAll(arenadata.getDagpenger()); + } + }) + .register(); + + factory.classMap(PdlPersondata.class, PdlPersondata.class) + .mapNulls(false) + .byDefault() + .register(); + + factory.classMap(PersonDTO.class, PersonDTO.class) + .mapNulls(false) + .field("ident", "ident") + .field("identtype", "identtype") + .customize(new CustomMapper<>() { + @Override + public void mapAtoB(PersonDTO personDTO, PersonDTO akkumulertDTO, MappingContext context) { + akkumulertDTO.getAdressebeskyttelse().addAll(personDTO.getAdressebeskyttelse()); + akkumulertDTO.getBostedsadresse().addAll(personDTO.getBostedsadresse()); + akkumulertDTO.getBostedsadresse().addAll(personDTO.getBostedsadresse()); + akkumulertDTO.getDeltBosted().addAll(personDTO.getDeltBosted()); + akkumulertDTO.getDoedfoedtBarn().addAll(personDTO.getDoedfoedtBarn()); + akkumulertDTO.getDoedsfall().addAll(personDTO.getDoedsfall()); + akkumulertDTO.getFalskIdentitet().addAll(personDTO.getFalskIdentitet()); + akkumulertDTO.getFoedsel().addAll(personDTO.getFoedsel()); + akkumulertDTO.getFolkeregisterPersonstatus().addAll(personDTO.getFolkeregisterPersonstatus()); + akkumulertDTO.getForelderBarnRelasjon().addAll(personDTO.getForelderBarnRelasjon()); + akkumulertDTO.getForeldreansvar().addAll(personDTO.getForeldreansvar()); + akkumulertDTO.getFullmakt().addAll(personDTO.getFullmakt()); + akkumulertDTO.getInnflytting().addAll(personDTO.getInnflytting()); + akkumulertDTO.getKjoenn().addAll(personDTO.getKjoenn()); + akkumulertDTO.getKontaktadresse().addAll(personDTO.getKontaktadresse()); + akkumulertDTO.getKontaktinformasjonForDoedsbo().addAll(personDTO.getKontaktinformasjonForDoedsbo()); + akkumulertDTO.getNavn().addAll(personDTO.getNavn()); + akkumulertDTO.getNyident().addAll(personDTO.getNyident()); + akkumulertDTO.getOpphold().addAll(personDTO.getOpphold()); + akkumulertDTO.getOppholdsadresse().addAll(personDTO.getOppholdsadresse()); + akkumulertDTO.getSikkerhetstiltak().addAll(personDTO.getSikkerhetstiltak()); + akkumulertDTO.getSivilstand().addAll(personDTO.getSivilstand()); + akkumulertDTO.getStatsborgerskap().addAll(personDTO.getStatsborgerskap()); + akkumulertDTO.getTelefonnummer().addAll(personDTO.getTelefonnummer()); + akkumulertDTO.getTilrettelagtKommunikasjon().addAll(personDTO.getTilrettelagtKommunikasjon()); + akkumulertDTO.getUtenlandskIdentifikasjonsnummer().addAll(personDTO.getUtenlandskIdentifikasjonsnummer()); + akkumulertDTO.getUtflytting().addAll(personDTO.getUtflytting()); + akkumulertDTO.getVergemaal().addAll(personDTO.getVergemaal()); + } + }) + .register(); + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/JsonBestillingMapper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/JsonBestillingMapper.java index 8ab5a101263..da7247007ee 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/JsonBestillingMapper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/JsonBestillingMapper.java @@ -3,7 +3,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import no.nav.dolly.domain.resultset.RsDollyBestillingRequest; import no.nav.dolly.domain.resultset.RsOrganisasjonBestilling.SyntetiskOrganisasjon; import org.springframework.stereotype.Component; @@ -18,15 +17,6 @@ public class JsonBestillingMapper { private final ObjectMapper objectMapper; - public RsDollyBestillingRequest mapBestillingRequest(Long bestillingId, String jsonInput) { - try { - return objectMapper.readValue(nonNull(jsonInput) ? jsonInput : "{}", RsDollyBestillingRequest.class); - } catch (IOException e) { - log.error("Mapping av JSON fra database bestKriterier, bestId: {} feilet. {}", bestillingId, e.getMessage(), e); - } - return new RsDollyBestillingRequest(); - } - public SyntetiskOrganisasjon mapOrganisasjonBestillingRequest(String jsonInput) { try { return objectMapper.readValue(nonNull(jsonInput) ? jsonInput : "{}", SyntetiskOrganisasjon.class); diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/MalBestillingMappingStrategy.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/MalBestillingMappingStrategy.java index ae69562e82e..78262ddf95b 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/MalBestillingMappingStrategy.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/strategy/MalBestillingMappingStrategy.java @@ -1,40 +1,47 @@ package no.nav.dolly.mapper.strategy; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import ma.glasnost.orika.CustomMapper; import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.MappingContext; import no.nav.dolly.domain.jpa.BestillingMal; -import no.nav.dolly.domain.resultset.RsDollyBestillingRequest; -import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper; +import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestilling; +import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; import no.nav.dolly.mapper.MappingStrategy; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; - -import static no.nav.dolly.bestilling.service.DollyBestillingService.getEnvironments; +import org.springframework.web.server.ResponseStatusException; @Slf4j @Component @RequiredArgsConstructor public class MalBestillingMappingStrategy implements MappingStrategy { - private final JsonBestillingMapper jsonBestillingMapper; + private final ObjectMapper objectMapper; @Override public void register(MapperFactory factory) { - factory.classMap(BestillingMal.class, RsMalBestillingWrapper.RsBestilling.class) + factory.classMap(BestillingMal.class, RsMalBestilling.class) .customize(new CustomMapper<>() { @Override - public void mapAtoB(BestillingMal bestilling, RsMalBestillingWrapper.RsBestilling malBestilling, MappingContext context) { + public void mapAtoB(BestillingMal kilde, RsMalBestilling destinasjon, MappingContext context) { + + try { + destinasjon.setId(kilde.getId()); + destinasjon.setMiljoer(kilde.getMiljoer()); + destinasjon.setMalNavn(kilde.getMalNavn()); + destinasjon.setBestilling(objectMapper.readTree(kilde.getBestKriterier())); + destinasjon.setBruker(mapperFacade.map(kilde.getBruker(), RsBrukerUtenFavoritter.class)); + destinasjon.setSistOppdatert(kilde.getSistOppdatert()); - RsDollyBestillingRequest bestillingRequest = jsonBestillingMapper - .mapBestillingRequest(bestilling.getId(), bestilling.getBestKriterier()); - mapperFacade.map(bestillingRequest, malBestilling); - malBestilling.setEnvironments(getEnvironments(bestilling.getMiljoer())); - malBestilling.setNavSyntetiskIdent(true); + } catch (JsonProcessingException e) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); + } } }) - .byDefault() .register(); } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/BestillingController.java b/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/BestillingController.java index 63569c8aa9d..39ea45abcd1 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/BestillingController.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/BestillingController.java @@ -7,9 +7,7 @@ import no.nav.dolly.domain.jpa.Bestilling; import no.nav.dolly.domain.resultset.entity.bestilling.RsBestillingFragment; import no.nav.dolly.domain.resultset.entity.bestilling.RsBestillingStatus; -import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper; import no.nav.dolly.domain.resultset.entity.testident.RsWhereAmI; -import no.nav.dolly.service.BestillingMalService; import no.nav.dolly.service.BestillingService; import no.nav.dolly.service.NavigasjonService; import no.nav.dolly.service.OrganisasjonBestillingService; @@ -21,7 +19,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -34,7 +31,6 @@ import static no.nav.dolly.config.CachingConfig.CACHE_BESTILLING; import static no.nav.dolly.config.CachingConfig.CACHE_GRUPPE; import static org.apache.commons.lang3.BooleanUtils.isTrue; -import static org.apache.commons.lang3.StringUtils.isBlank; @Transactional @RestController @@ -46,7 +42,6 @@ public class BestillingController { private final BestillingService bestillingService; private final OrganisasjonBestillingService organisasjonBestillingService; private final NavigasjonService navigasjonService; - private final BestillingMalService bestillingMalService; private final GjenopprettBestillingService gjenopprettBestillingService; @Cacheable(value = CACHE_BESTILLING) @@ -123,40 +118,4 @@ public RsBestillingStatus gjenopprettBestilling(@PathVariable("bestillingId") Lo gjenopprettBestillingService.executeAsync(bestilling); return mapperFacade.map(bestilling, RsBestillingStatus.class); } - - @Cacheable(value = CACHE_BESTILLING) - @GetMapping("/malbestilling") - @Operation(description = "Hent mal-bestilling, kan filtreses på en bruker") - public RsMalBestillingWrapper getMalBestillinger(@RequestParam(required = false, value = "brukerId") String brukerId) { - - return isBlank(brukerId) ? - bestillingMalService.getMalBestillinger() : bestillingMalService.getMalbestillingByUser(brukerId); - } - - @CacheEvict(value = { CACHE_BESTILLING }, allEntries = true) - @PostMapping("/malbestilling") - @Operation(description = "Opprett ny mal-bestilling fra bestillingId") - @Transactional - public void opprettMalbestilling(@RequestParam(value = "bestillingId") Long bestillingId, @RequestParam(value = "malNavn") String malNavn) { - - bestillingMalService.saveBestillingMalFromBestillingId(bestillingId, malNavn); - } - - @CacheEvict(value = { CACHE_BESTILLING }, allEntries = true) - @DeleteMapping("/malbestilling/{id}") - @Operation(description = "Slett mal-bestilling") - @Transactional - public void deleteMalBestilling(@PathVariable Long id) { - - bestillingMalService.deleteMalBestillingByID(id); - } - - @CacheEvict(value = { CACHE_BESTILLING }, allEntries = true) - @PutMapping("/malbestilling/{id}") - @Operation(description = "Rediger mal-bestilling") - @Transactional - public void redigerMalBestilling(@PathVariable Long id, @RequestParam(value = "malNavn") String malNavn) { - - bestillingMalService.updateMalNavnById(id, malNavn); - } } \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/MalBestillingController.java b/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/MalBestillingController.java new file mode 100644 index 00000000000..cdc4812ed7d --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/provider/api/MalBestillingController.java @@ -0,0 +1,74 @@ +package no.nav.dolly.provider.api; + +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestilling; +import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper; +import no.nav.dolly.service.MalBestillingService; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import static no.nav.dolly.config.CachingConfig.CACHE_BESTILLING_MAL; +import static org.apache.commons.lang3.StringUtils.isBlank; + +@RequestMapping(value = "/api/v1/malbestilling") +@RestController +@RequiredArgsConstructor +public class MalBestillingController { + + private final MalBestillingService malBestillingService; + + @CacheEvict(value = { CACHE_BESTILLING_MAL }, allEntries = true) + @PostMapping(value = "/ident/{ident}") + @Operation(description = "Opprett ny mal-bestilling fra ident") + public RsMalBestilling createTemplateFromIdent(@PathVariable String ident, + @RequestParam String malNavn) { + + return malBestillingService.createFromIdent(ident, malNavn); + } + + @Cacheable(value = CACHE_BESTILLING_MAL) + @GetMapping + @Operation(description = "Hent mal-bestilling, kan filtreres på en bruker") + public RsMalBestillingWrapper getMalBestillinger(@RequestParam(required = false) String brukerId) { + + return isBlank(brukerId) ? + malBestillingService.getMalBestillinger() : malBestillingService.getMalbestillingByUser(brukerId); + } + + @CacheEvict(value = { CACHE_BESTILLING_MAL }, allEntries = true) + @PostMapping + @Operation(description = "Opprett ny mal-bestilling fra bestillingId") + @Transactional + public RsMalBestilling opprettMalbestilling(@RequestParam Long bestillingId, @RequestParam String malNavn) { + + return malBestillingService.saveBestillingMalFromBestillingId(bestillingId, malNavn); + } + + @CacheEvict(value = { CACHE_BESTILLING_MAL }, allEntries = true) + @DeleteMapping("/id/{id}") + @Operation(description = "Slett mal-bestilling") + @Transactional + public void deleteMalBestilling(@PathVariable Long id) { + + malBestillingService.deleteMalBestillingByID(id); + } + + @CacheEvict(value = { CACHE_BESTILLING_MAL }, allEntries = true) + @PutMapping("/id/{id}") + @Operation(description = "Rediger mal-bestilling") + @Transactional + public RsMalBestilling redigerMalBestilling(@PathVariable Long id, @RequestParam String malNavn) { + + return malBestillingService.updateMalNavnById(id, malNavn); + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingMalService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingMalService.java deleted file mode 100644 index 22260a5ed3c..00000000000 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingMalService.java +++ /dev/null @@ -1,177 +0,0 @@ -package no.nav.dolly.service; - -import lombok.RequiredArgsConstructor; -import ma.glasnost.orika.MapperFacade; -import no.nav.dolly.domain.jpa.Bestilling; -import no.nav.dolly.domain.jpa.BestillingMal; -import no.nav.dolly.domain.jpa.Bruker; -import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper; -import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper.RsBestilling; -import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper.RsMalBestilling; -import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; -import no.nav.dolly.exceptions.NotFoundException; -import no.nav.dolly.repository.BestillingMalRepository; -import no.nav.dolly.repository.BestillingRepository; -import no.nav.testnav.libs.servletsecurity.action.GetUserInfo; -import org.apache.commons.collections4.IterableUtils; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static java.util.Objects.isNull; -import static java.util.Objects.nonNull; -import static no.nav.dolly.util.CurrentAuthentication.getUserId; - -@Service -@RequiredArgsConstructor -public class BestillingMalService { - - private static final String ANONYM = "FELLES"; - private static final String ALLE = "ALLE"; - - private final BestillingMalRepository bestillingMalRepository; - private final BestillingRepository bestillingRepository; - private final BrukerService brukerService; - private final MapperFacade mapperFacade; - private final GetUserInfo getUserInfo; - - public RsMalBestillingWrapper getMalBestillinger() { - - var malBestillingWrapper = new RsMalBestillingWrapper(); - - var malBestillinger = IterableUtils.toList(bestillingMalRepository.findAll()) - .stream() - .collect(Collectors.groupingBy(bestilling -> getBruker(bestilling.getBruker()))) - .entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue() - .stream() - .map(bestillingMal -> RsMalBestilling.builder() - .bestilling(mapperFacade.map(bestillingMal, RsBestilling.class)) - .malNavn(bestillingMal.getMalNavn()) - .id(bestillingMal.getId()) - .bruker(mapperFacade.map(nonNull(bestillingMal.getBruker()) ? - bestillingMal.getBruker() : - Bruker.builder().brukerId(ANONYM).brukernavn(ANONYM).build(), RsBrukerUtenFavoritter.class)) - .build()) - .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) - .toList())); - - malBestillingWrapper.getMalbestillinger().putAll(malBestillinger); - malBestillingWrapper.getMalbestillinger().put(ALLE, malBestillinger.values().stream() - .flatMap(Collection::stream) - .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) - .toList()); - - return malBestillingWrapper; - } - - public List getMalbestillingByUserAndNavn(String brukerId, String malNavn) { - - var bruker = brukerService.fetchOrCreateBruker(brukerId); - - return bestillingMalRepository.findByBrukerAndMalNavn(bruker, malNavn) - .stream() - .map(bestilling -> RsMalBestilling.builder() - .malNavn(bestilling.getMalNavn()) - .id(bestilling.getId()) - .bestilling(mapperFacade.map(bestilling, RsBestilling.class)) - .build()) - .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) - .toList(); - } - - public RsMalBestillingWrapper getMalbestillingByUser(String brukerId) { - - var bruker = brukerService.fetchOrCreateBruker(brukerId); - - var malBestillinger = bestillingMalRepository.findByBruker(bruker) - .stream() - .collect(Collectors.groupingBy(bestilling -> getBruker(bestilling.getBruker()))) - .entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue() - .stream() - .map(bestillingMal -> RsMalBestilling.builder() - .bestilling(mapperFacade.map(bestillingMal, RsBestilling.class)) - .malNavn(bestillingMal.getMalNavn()) - .id(bestillingMal.getId()) - .bruker(mapperFacade.map(nonNull(bestillingMal.getBruker()) ? - bestillingMal.getBruker() : - Bruker.builder().brukerId(ANONYM).brukernavn(ANONYM).build(), RsBrukerUtenFavoritter.class)) - .build()) - .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) - .toList())); - - return RsMalBestillingWrapper.builder() - .malbestillinger(malBestillinger) - .build(); - } - - public void saveBestillingMal(Bestilling bestilling, String malNavn, Bruker bruker) { - - var eksisterende = bestillingMalRepository.findByBrukerAndMalNavn(bruker, malNavn); - if (eksisterende.isEmpty()) { - bestillingMalRepository.save(BestillingMal.builder() - - .bestKriterier(bestilling.getBestKriterier()) - .bruker(bruker) - .malNavn(malNavn) - .miljoer(bestilling.getMiljoer()) - .build()); - } else { - eksisterende.stream() - .findFirst() - .ifPresent(malbestilling -> { - malbestilling.setBestKriterier(bestilling.getBestKriterier()); - malbestilling.setMiljoer(bestilling.getMiljoer()); - }); - } - } - - public void saveBestillingMalFromBestillingId(Long bestillingId, String malNavn) { - - Bruker bruker = brukerService.fetchOrCreateBruker(getUserId(getUserInfo)); - - var bestilling = bestillingRepository.findById(bestillingId) - .orElseThrow(() -> new NotFoundException(bestillingId + " finnes ikke")); - - overskrivDuplikateMalbestillinger(malNavn, bruker); - bestillingMalRepository.save(BestillingMal.builder() - .bestKriterier(bestilling.getBestKriterier()) - .bruker(bruker) - .malNavn(malNavn) - .miljoer(bestilling.getMiljoer()) - .build()); - } - - public void deleteMalBestillingByID(Long id) { - - bestillingMalRepository.deleteById(id); - } - - public void updateMalNavnById(Long id, String nyttMalNavn) { - - bestillingMalRepository.updateMalNavnById(id, nyttMalNavn); - } - - public static String getBruker(Bruker bruker) { - - if (isNull(bruker)) { - return ANONYM; - } - return switch (bruker.getBrukertype()) { - case AZURE, BANKID -> bruker.getBrukernavn(); - case BASIC -> bruker.getNavIdent(); - }; - } - - void overskrivDuplikateMalbestillinger(String malNavn, Bruker bruker) { - - var gamleMalBestillinger = getMalbestillingByUserAndNavn(bruker.getBrukerId(), malNavn); - gamleMalBestillinger.forEach(malBestilling -> - bestillingMalRepository.deleteById(malBestilling.getId())); - } -} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java index 1474ca5f181..5066ec21607 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/BestillingService.java @@ -68,7 +68,7 @@ public class BestillingService { private static final String SEARCH_STRING = "info:"; private static final String DEFAULT_VALUE = null; private final BestillingRepository bestillingRepository; - private final BestillingMalService bestillingMalService; + private final MalBestillingService malBestillingService; private final BestillingKontrollRepository bestillingKontrollRepository; private final IdentRepository identRepository; private final BestillingProgressRepository bestillingProgressRepository; @@ -209,7 +209,7 @@ public Bestilling saveBestilling(RsDollyUpdateRequest request, String ident) { .build(); if (isNotBlank(request.getMalBestillingNavn())) { - bestillingMalService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); + malBestillingService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); } return saveBestillingToDB(bestilling); } @@ -245,7 +245,7 @@ public Bestilling saveBestilling(Long gruppeId, RsDollyBestilling request, Integ .build(); fixAaregAbstractClassProblem(request.getAareg()); if (isNotBlank(request.getMalBestillingNavn())) { - bestillingMalService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); + malBestillingService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); } return saveBestillingToDB(bestilling); } @@ -331,7 +331,7 @@ public Bestilling saveBestilling(Long gruppeId, RsDollyImportFraPdlRequest reque fixAaregAbstractClassProblem(request.getAareg()); if (isNotBlank(request.getMalBestillingNavn())) { - bestillingMalService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); + malBestillingService.saveBestillingMal(bestilling, request.getMalBestillingNavn(), bruker); } return saveBestillingToDB(bestilling); } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/MalBestillingService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/MalBestillingService.java new file mode 100644 index 00000000000..8cb32a303e1 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/MalBestillingService.java @@ -0,0 +1,273 @@ +package no.nav.dolly.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import ma.glasnost.orika.MapperFacade; +import no.nav.dolly.domain.jpa.Bestilling; +import no.nav.dolly.domain.jpa.BestillingMal; +import no.nav.dolly.domain.jpa.Bruker; +import no.nav.dolly.domain.resultset.RsDollyUtvidetBestilling; +import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestilling; +import no.nav.dolly.domain.resultset.entity.bestilling.RsMalBestillingWrapper; +import no.nav.dolly.domain.resultset.entity.bruker.RsBrukerUtenFavoritter; +import no.nav.dolly.exceptions.NotFoundException; +import no.nav.dolly.repository.BestillingMalRepository; +import no.nav.dolly.repository.BestillingRepository; +import no.nav.testnav.libs.servletsecurity.action.GetUserInfo; +import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.server.ResponseStatusException; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import static java.util.Objects.isNull; +import static java.util.Objects.nonNull; +import static no.nav.dolly.util.CurrentAuthentication.getUserId; + +@Service +@RequiredArgsConstructor +public class MalBestillingService { + + private static final String ANONYM = "FELLES"; + private static final String ALLE = "ALLE"; + private static final String EMPTY_JSON = "{}"; + + private final BestillingMalRepository bestillingMalRepository; + private final BestillingRepository bestillingRepository; + private final BrukerService brukerService; + private final MapperFacade mapperFacade; + private final GetUserInfo getUserInfo; + private final ObjectMapper objectMapper; + + @Transactional(readOnly = true) + public RsMalBestillingWrapper getMalBestillinger() { + + var malBestillingWrapper = new RsMalBestillingWrapper(); + + var malBestillinger = IterableUtils.toList(bestillingMalRepository.findAll()) + .stream() + .collect(Collectors.groupingBy(bestilling -> getBruker(bestilling.getBruker()))) + .entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue() + .stream() + .map(bestillingMal -> { + try { + return RsMalBestilling.builder() + .bestilling(objectMapper.readTree(bestillingMal.getBestKriterier())) + .malNavn(bestillingMal.getMalNavn()) + .id(bestillingMal.getId()) + .bruker(mapperFacade.map(nonNull(bestillingMal.getBruker()) ? + bestillingMal.getBruker() : + Bruker.builder().brukerId(ANONYM).brukernavn(ANONYM).build(), RsBrukerUtenFavoritter.class)) + .build(); + } catch (JsonProcessingException e) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); + } + }) + .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) + .toList())); + + malBestillingWrapper.getMalbestillinger().putAll(malBestillinger); + malBestillingWrapper.getMalbestillinger().put(ALLE, malBestillinger.values().stream() + .flatMap(Collection::stream) + .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) + .toList()); + + return malBestillingWrapper; + } + + @Transactional(readOnly = true) + public RsMalBestillingWrapper getMalbestillingByUser(String brukerId) { + + var bruker = brukerService.fetchBruker(brukerId); + + var malBestillinger = bestillingMalRepository.findByBruker(bruker) + .stream() + .collect(Collectors.groupingBy(bestilling -> getBruker(bestilling.getBruker()))) + .entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue() + .stream() + .map(bestillingMal -> { + try { + return RsMalBestilling.builder() + .bestilling(objectMapper.readTree(bestillingMal.getBestKriterier())) + .malNavn(bestillingMal.getMalNavn()) + .id(bestillingMal.getId()) + .bruker(mapperFacade.map(nonNull(bestillingMal.getBruker()) ? + bestillingMal.getBruker() : + Bruker.builder().brukerId(ANONYM).brukernavn(ANONYM).build(), RsBrukerUtenFavoritter.class)) + .build(); + } catch (JsonProcessingException e) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e); + } + }) + .sorted(Comparator.comparing(RsMalBestilling::getMalNavn)) + .toList())); + + return RsMalBestillingWrapper.builder() + .malbestillinger(malBestillinger) + .build(); + } + + public void saveBestillingMal(Bestilling bestilling, String malNavn, Bruker bruker) { + + var eksisterende = bestillingMalRepository.findByBrukerAndMalNavn(bruker, malNavn); + + if (eksisterende.isEmpty()) { + bestillingMalRepository.save(BestillingMal.builder() + + .bestKriterier(bestilling.getBestKriterier()) + .bruker(bruker) + .malNavn(malNavn) + .miljoer(bestilling.getMiljoer()) + .build()); + } else { + + var oppdateEksisterende = eksisterende.getFirst(); + oppdateEksisterende.setBestKriterier(bestilling.getBestKriterier()); + oppdateEksisterende.setMiljoer(bestilling.getMiljoer()); + } + } + + @Transactional + public RsMalBestilling saveBestillingMalFromBestillingId(Long bestillingId, String malNavn) { + + var bruker = brukerService.fetchBruker(getUserId(getUserInfo)); + + var bestilling = bestillingRepository.findById(bestillingId) + .orElseThrow(() -> new NotFoundException(bestillingId + " finnes ikke")); + + BestillingMal malbestilling; + var maler = bestillingMalRepository.findByBrukerAndMalNavn(bruker, malNavn); + if (maler.isEmpty()) { + malbestilling = bestillingMalRepository.save(BestillingMal.builder() + .bestKriterier(bestilling.getBestKriterier()) + .bruker(bruker) + .malNavn(malNavn) + .miljoer(bestilling.getMiljoer()) + .build()); + } else { + malbestilling = maler.getFirst(); + } + + return mapperFacade.map(malbestilling, RsMalBestilling.class); + } + + @Transactional + public void deleteMalBestillingByID(Long id) { + + bestillingMalRepository.findById(id) + .orElseThrow(() -> + new ResponseStatusException(HttpStatus.NOT_FOUND, "Malbestilling med id %d ble ikke funnet".formatted(id))); + bestillingMalRepository.deleteById(id); + } + + @Transactional + public RsMalBestilling updateMalNavnById(Long id, String nyttMalNavn) { + + bestillingMalRepository.findById(id) + .orElseThrow(() -> + new ResponseStatusException(HttpStatus.NOT_FOUND, "Malbestilling med id %d ble ikke funnet".formatted(id))); + + bestillingMalRepository.updateMalNavnById(id, nyttMalNavn); + var oppdatertMalBestilling = new AtomicReference(); + + bestillingMalRepository.findById(id) + .ifPresentOrElse(malBestilling -> + oppdatertMalBestilling.set(mapperFacade.map(malBestilling, RsMalBestilling.class)), null); + return oppdatertMalBestilling.get(); + } + + @Transactional + public RsMalBestilling createFromIdent(String ident, String name) { + + var bruker = brukerService.fetchBruker(getUserId(getUserInfo)); + + var bestillinger = bestillingRepository.findBestillingerByIdent(ident); + if (bestillinger.isEmpty()) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Ingen bestillinger funnet på ident %s".formatted(ident)); + } + + var aggregertRequest = new RsDollyUtvidetBestilling(); + + bestillinger.stream() + .filter(bestilling -> nonNull(bestilling.getBestKriterier()) && + !EMPTY_JSON.equals(bestilling.getBestKriterier())) + .filter(bestilling -> isNull(bestilling.getOpprettetFraGruppeId()) && + isNull(bestilling.getGjenopprettetFraIdent()) && + isNull(bestilling.getOpprettetFraId())) + .forEach(bestilling -> { + var dollyBestilling = fromJson(bestilling.getBestKriterier()); + dollyBestilling.getEnvironments().addAll(toSet(bestilling.getMiljoer())); + dollyBestilling.setNavSyntetiskIdent(bestilling.getNavSyntetiskIdent()); + mapperFacade.map(dollyBestilling, aggregertRequest); + }); + + BestillingMal akkumulertMal; + var maler = bestillingMalRepository.findByBrukerAndMalNavn(bruker, name); + if (maler.isEmpty()) { + + akkumulertMal = bestillingMalRepository.save(BestillingMal.builder() + .bruker(bruker) + .malNavn(name) + .miljoer(String.join(",", aggregertRequest.getEnvironments())) + .bestKriterier(toJson(aggregertRequest)) + .build()); + } else { + + akkumulertMal = maler.getFirst(); + akkumulertMal.setMiljoer(String.join(",", aggregertRequest.getEnvironments())); + akkumulertMal.setBestKriterier(toJson(aggregertRequest)); + } + + return mapperFacade.map(akkumulertMal, RsMalBestilling.class); + } + + public static String getBruker(Bruker bruker) { + + if (isNull(bruker)) { + return ANONYM; + } + return switch (bruker.getBrukertype()) { + case AZURE, BANKID -> bruker.getBrukernavn(); + case BASIC -> bruker.getNavIdent(); + }; + } + + private static Set toSet(String miljoer) { + + return StringUtils.isNotBlank(miljoer) ? + Arrays.stream(miljoer.split(",")) + .collect(Collectors.toSet()) : + Collections.emptySet(); + } + + private String toJson(RsDollyUtvidetBestilling bestilling) { + + try { + return objectMapper.writeValueAsString(bestilling); + } catch (JsonProcessingException e) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e); + } + } + + private RsDollyUtvidetBestilling fromJson(String json) { + + try { + return objectMapper.readValue(json, RsDollyUtvidetBestilling.class); + } catch (JsonProcessingException e) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingMalService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingMalService.java index 49df018d294..c576d6bd5c3 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingMalService.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/OrganisasjonBestillingMalService.java @@ -23,7 +23,7 @@ import java.util.stream.Collectors; import static java.util.Objects.nonNull; -import static no.nav.dolly.service.BestillingMalService.getBruker; +import static no.nav.dolly.service.MalBestillingService.getBruker; import static no.nav.dolly.util.CurrentAuthentication.getUserId; @Service diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/service/SplittGruppeService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/service/SplittGruppeService.java index 05bcf05dabf..c5618670b90 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/service/SplittGruppeService.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/service/SplittGruppeService.java @@ -6,7 +6,7 @@ import no.nav.dolly.domain.jpa.Testgruppe; import no.nav.dolly.domain.jpa.Testident; import no.nav.dolly.exceptions.NotFoundException; -import no.nav.dolly.mapper.strategy.BestillingMapper; +import no.nav.dolly.mapper.BestillingMapper; import no.nav.dolly.repository.BestillingKontrollRepository; import no.nav.dolly.repository.BestillingProgressRepository; import no.nav.dolly.repository.BestillingRepository; diff --git a/apps/dolly-backend/src/main/resources/logback-spring.xml b/apps/dolly-backend/src/main/resources/logback-spring.xml index c5446a2acc1..5a6ea947bb8 100644 --- a/apps/dolly-backend/src/main/resources/logback-spring.xml +++ b/apps/dolly-backend/src/main/resources/logback-spring.xml @@ -2,7 +2,8 @@ - + + true 256 @@ -37,10 +38,10 @@ - - - - - - + + + + + + diff --git a/apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/BestillingControllerTest.java b/apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/BestillingControllerTest.java index ea7b9a628f6..f56d00aa621 100644 --- a/apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/BestillingControllerTest.java +++ b/apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/BestillingControllerTest.java @@ -1,10 +1,8 @@ package no.nav.dolly.provider.api; import ma.glasnost.orika.MapperFacade; -import no.nav.dolly.bestilling.service.DollyBestillingService; import no.nav.dolly.domain.jpa.Bestilling; import no.nav.dolly.domain.resultset.entity.bestilling.RsBestillingStatus; -import no.nav.dolly.service.BestillingMalService; import no.nav.dolly.service.BestillingService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -34,12 +32,6 @@ class BestillingControllerTest { @Mock private BestillingService bestillingService; - @Mock - private DollyBestillingService dollyBestillingService; - - @Mock - private BestillingMalService bestillingMalService; - @InjectMocks private BestillingController bestillingController; @@ -60,7 +52,7 @@ void getBestillingerOk() { when(mapperFacade.mapAsList(anyList(), eq(RsBestillingStatus.class))) .thenReturn(singletonList(RsBestillingStatus.builder().id(BESTILLING_ID).build())); - RsBestillingStatus bestilling = bestillingController.getBestillinger(GRUPPE_ID, 0, 10).get(0); + RsBestillingStatus bestilling = bestillingController.getBestillinger(GRUPPE_ID, 0, 10).getFirst(); verify(bestillingService).getBestillingerFromGruppeIdPaginert(GRUPPE_ID, 0, 10); verify(mapperFacade).mapAsList(anyList(), eq(RsBestillingStatus.class)); @@ -76,12 +68,4 @@ void stopBestillingProgressOk() { verify(bestillingService).cancelBestilling(BESTILLING_ID); verify(mapperFacade).map(any(Bestilling.class), eq(RsBestillingStatus.class)); } - - @Test - void malBestillingNavnOk() { - - bestillingController.getMalBestillinger(null); - - verify(bestillingMalService).getMalBestillinger(); - } } diff --git a/apps/dolly-backend/src/test/java/no/nav/dolly/service/BestillingMalServiceTest.java b/apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/MalBestillingControllerTest.java similarity index 86% rename from apps/dolly-backend/src/test/java/no/nav/dolly/service/BestillingMalServiceTest.java rename to apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/MalBestillingControllerTest.java index 3397428469a..2879d3ae1ba 100644 --- a/apps/dolly-backend/src/test/java/no/nav/dolly/service/BestillingMalServiceTest.java +++ b/apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/MalBestillingControllerTest.java @@ -1,4 +1,4 @@ -package no.nav.dolly.service; +package no.nav.dolly.provider.api; import no.nav.dolly.MockedJwtAuthenticationTokenUtils; import no.nav.dolly.domain.jpa.Bestilling; @@ -30,9 +30,13 @@ import java.time.LocalDate; import java.time.LocalDateTime; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.hasSize; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -42,7 +46,7 @@ @EnableAutoConfiguration @ComponentScan("no.nav.dolly") @AutoConfigureMockMvc(addFilters = false) -class BestillingMalServiceTest { +class MalBestillingControllerTest { @MockBean @SuppressWarnings("unused") @@ -54,7 +58,7 @@ class BestillingMalServiceTest { private final static String MALNAVN = "test"; private final static String NYTT_MALNAVN = "nyttMalnavn"; - private final static String BEST_KRITERIER = "Testeteste"; + private final static String BEST_KRITERIER = "{\"test\":true}"; private static final Bruker DUMMY_EN = Bruker.builder() .brukerId("testbruker_en") .brukernavn("test_en") @@ -67,6 +71,12 @@ class BestillingMalServiceTest { .brukertype(Bruker.Brukertype.AZURE) .epost("epost@test_to") .build(); + private static final Bruker DUMMY_TRE = Bruker.builder() + .brukerId("123") + .brukernavn("test_tre") + .brukertype(Bruker.Brukertype.AZURE) + .epost("epost@test_tre") + .build(); private static final String IDENT = "12345678912"; private static final String BESKRIVELSE = "Teste"; private static final String TESTGRUPPE = "Testgruppe"; @@ -92,6 +102,7 @@ public void beforeEach() { flyway.migrate(); saveDummyBruker(DUMMY_EN); saveDummyBruker(DUMMY_TO); + saveDummyBruker(DUMMY_TRE); MockedJwtAuthenticationTokenUtils.setJwtAuthenticationToken(); } @@ -111,14 +122,13 @@ void shouldCreateAndGetMaler() saveDummyBestillingMal(bruker_en); saveDummyBestillingMal(bruker_to); - mockMvc.perform(get("/api/v1/bestilling/malbestilling")) + mockMvc.perform(get("/api/v1/malbestilling")) .andExpect(status().isOk()) .andExpect(jsonPath("$.malbestillinger.ALLE", hasSize(2))) .andExpect(jsonPath("$.malbestillinger.test_en", hasSize(1))) .andExpect(jsonPath("$.malbestillinger.test_to", hasSize(1))) .andExpect(jsonPath("$.malbestillinger.test_en[0].malNavn").value(MALNAVN)) .andExpect(jsonPath("$.malbestillinger.test_en[0].bruker.brukerId").value(bruker_en.getBrukerId())) - .andExpect(jsonPath("$.malbestillinger.test_en[0].bestilling.navSyntetiskIdent", is(true))) .andExpect(jsonPath("$.malbestillinger.test_to[0].bruker.brukerId").value(bruker_to.getBrukerId())); } @@ -132,12 +142,12 @@ void shouldCreateMalerFromExistingOrder() var testgruppe = saveDummyGruppe(); var bestilling = saveDummyBestilling(bruker_en, testgruppe); - mockMvc.perform(post("/api/v1/bestilling/malbestilling") + mockMvc.perform(post("/api/v1/malbestilling") .queryParam("bestillingId", String.valueOf(bestilling.getId())) .queryParam("malNavn", MALNAVN)) .andExpect(status().isOk()); - mockMvc.perform(post("/api/v1/bestilling/malbestilling") + mockMvc.perform(post("/api/v1/malbestilling") .queryParam("bestillingId", UGYLDIG_BESTILLINGID) .queryParam("malNavn", MALNAVN)) .andExpect(status().is4xxClientError()); @@ -152,18 +162,18 @@ void shouldCreateUpdateAndDeleteMal() var bruker_en = brukerRepository.findBrukerByBrukerId(DUMMY_EN.getBrukerId()).orElseThrow(); var bestillingMal = saveDummyBestillingMal(bruker_en); - mockMvc.perform(put("/api/v1/bestilling/malbestilling/{id}", bestillingMal.getId()) + mockMvc.perform(put("/api/v1/malbestilling/id/{id}", bestillingMal.getId()) .queryParam("malNavn", NYTT_MALNAVN)) .andExpect(status().isOk()); - mockMvc.perform(get("/api/v1/bestilling/malbestilling")) + mockMvc.perform(get("/api/v1/malbestilling")) .andExpect(status().isOk()) .andExpect(jsonPath("$.malbestillinger.test_en", hasSize(1))); - mockMvc.perform(delete("/api/v1/bestilling/malbestilling/{id}", bestillingMal.getId())) + mockMvc.perform(delete("/api/v1/malbestilling/id/{id}", bestillingMal.getId())) .andExpect(status().isOk()); - mockMvc.perform(get("/api/v1/bestilling/malbestilling")) + mockMvc.perform(get("/api/v1/malbestilling")) .andExpect(status().isOk()) .andExpect(jsonPath("$.malbestillinger.ALLE", empty())); } diff --git a/apps/dolly-backend/src/test/java/no/nav/dolly/service/OrganisasjonBestillingMalServiceTest.java b/apps/dolly-backend/src/test/java/no/nav/dolly/service/OrganisasjonMalBestillingServiceTest.java similarity index 99% rename from apps/dolly-backend/src/test/java/no/nav/dolly/service/OrganisasjonBestillingMalServiceTest.java rename to apps/dolly-backend/src/test/java/no/nav/dolly/service/OrganisasjonMalBestillingServiceTest.java index 2caa2dc8316..fe745d24d26 100644 --- a/apps/dolly-backend/src/test/java/no/nav/dolly/service/OrganisasjonBestillingMalServiceTest.java +++ b/apps/dolly-backend/src/test/java/no/nav/dolly/service/OrganisasjonMalBestillingServiceTest.java @@ -44,7 +44,7 @@ @EnableAutoConfiguration @ComponentScan("no.nav.dolly") @AutoConfigureMockMvc(addFilters = false) -class OrganisasjonBestillingMalServiceTest { +class OrganisasjonMalBestillingServiceTest { @MockBean @SuppressWarnings("unused") diff --git a/apps/dolly-frontend/config.idporten.yml b/apps/dolly-frontend/config.idporten.yml index 9c476c57611..abf0e070cf6 100644 --- a/apps/dolly-frontend/config.idporten.yml +++ b/apps/dolly-frontend/config.idporten.yml @@ -24,30 +24,38 @@ spec: accessPolicy: outbound: rules: - - application: testnorge-tilbakemelding-api + - application: dolly-backend + - application: dolly-backend-dev + - application: dolly-redis-session + - application: generer-navn-service - application: testnav-adresse-service + - application: testnav-amelding-service - application: testnav-arbeidsplassencv-proxy + - application: testnav-bruker-service + - application: testnav-bruker-service-dev + - application: testnav-generer-synt-amelding-service + - application: testnav-helsepersonell-service + - application: testnav-joark-dokument-service + - application: testnav-kodeverk-service - application: testnav-miljoer-service - - application: testnav-organisasjon-service - - application: testnav-organisasjon-forvalter - application: testnav-oppsummeringsdokument-service - - application: testnorge-profil-api - - application: testnav-organisasjon-tilgang-service - - application: testnav-joark-dokument-service - application: testnav-organisasjon-faste-data-service - - application: testnav-tps-messaging-service - - application: testnav-varslinger-service - - application: dolly-redis-session - - application: testnav-person-organisasjon-tilgang-service + - application: testnav-organisasjon-forvalter + - application: testnav-organisasjon-service + - application: testnav-organisasjon-tilgang-service - application: testnav-pdl-forvalter - - application: testnav-bruker-service + - application: testnav-person-faste-data-service + - application: testnav-person-organisasjon-tilgang-service + - application: testnav-person-organisasjon-tilgang-service-dev - application: testnav-person-search-service - - application: testnav-helsepersonell-service - - application: dolly-backend - application: testnav-person-service - - application: generer-navn-service - - application: testnav-kodeverk-service + - application: testnav-skattekort-service + - application: testnav-sykemelding-api - application: testnav-tenor-search-service + - application: testnav-tps-messaging-service + - application: testnav-varslinger-service + - application: testnorge-profil-api + - application: testnorge-tilbakemelding-api external: - host: testnav-pensjon-testdata-facade-proxy.dev-fss-pub.nais.io - host: testnav-sigrunstub-proxy.dev-fss-pub.nais.io diff --git a/apps/dolly-frontend/config.test.yml b/apps/dolly-frontend/config.test.yml index e7f3b52b0be..04c162a3877 100644 --- a/apps/dolly-frontend/config.test.yml +++ b/apps/dolly-frontend/config.test.yml @@ -18,6 +18,7 @@ spec: autoLoginIgnorePaths: - /login - /assets/* + - / application: allowAllUsers: true enabled: true @@ -29,30 +30,35 @@ spec: accessPolicy: outbound: rules: + - application: dolly-backend-dev + - application: dolly-dev-redis-session + - application: generer-navn-service - application: testnav-adresse-service + - application: testnav-amelding-service - application: testnav-arbeidsplassencv-proxy + - application: testnav-bruker-service-dev + - application: testnav-generer-synt-amelding-service + - application: testnav-helsepersonell-service + - application: testnav-joark-dokument-service + - application: testnav-kodeverk-service - application: testnav-miljoer-service - - application: testnav-organisasjon-service - - application: testnav-organisasjon-forvalter - - application: testnorge-profil-api-dev - - application: testnav-organisasjon-tilgang-service - application: testnav-oppsummeringsdokument-service - - application: testnav-joark-dokument-service - application: testnav-organisasjon-faste-data-service - - application: testnav-tps-messaging-service - - application: testnav-varslinger-service-dev - - application: dolly-dev-redis-session - - application: testnav-person-organisasjon-tilgang-service-dev + - application: testnav-organisasjon-forvalter + - application: testnav-organisasjon-service + - application: testnav-organisasjon-tilgang-service - application: testnav-pdl-forvalter-dev - - application: testnav-bruker-service-dev + - application: testnav-person-faste-data-service + - application: testnav-person-organisasjon-tilgang-service-dev - application: testnav-person-search-service - - application: testnav-helsepersonell-service - - application: testnorge-tilbakemelding-api - - application: dolly-backend-dev - application: testnav-person-service - - application: generer-navn-service - - application: testnav-kodeverk-service + - application: testnav-sykemelding-api - application: testnav-tenor-search-service + - application: testnav-tps-messaging-service + - application: testnav-varslinger-service + - application: testnav-varslinger-service-dev + - application: testnorge-profil-api-dev + - application: testnorge-tilbakemelding-api external: - host: testnav-pensjon-testdata-facade-proxy.dev-fss-pub.nais.io - host: testnav-sigrunstub-proxy.dev-fss-pub.nais.io diff --git a/apps/dolly-frontend/config.unstable.yml b/apps/dolly-frontend/config.unstable.yml index cc533152a36..59a1ad3f7ee 100644 --- a/apps/dolly-frontend/config.unstable.yml +++ b/apps/dolly-frontend/config.unstable.yml @@ -18,6 +18,7 @@ spec: autoLoginIgnorePaths: - /login - /assets/* + - / application: allowAllUsers: true enabled: true @@ -29,30 +30,30 @@ spec: accessPolicy: outbound: rules: - - application: testnav-arbeidsplassencv-proxy - - application: generer-navn-service - - application: testnav-person-service - application: dolly-backend-dev - - application: testnav-helsepersonell-service - - application: testnav-person-search-service - - application: testnav-bruker-service-dev - - application: testnav-pdl-forvalter-dev - - application: testnav-person-organisasjon-tilgang-service-dev - application: dolly-dev-redis-session - - application: testnav-varslinger-service-dev - - application: testnav-tps-messaging-service - - application: testnav-organisasjon-faste-data-service + - application: generer-navn-service + - application: testnav-adresse-service + - application: testnav-arbeidsplassencv-proxy + - application: testnav-bruker-service-dev + - application: testnav-helsepersonell-service - application: testnav-joark-dokument-service + - application: testnav-kodeverk-service + - application: testnav-miljoer-service - application: testnav-oppsummeringsdokument-service - - application: testnav-organisasjon-tilgang-service - - application: testnorge-profil-api-dev + - application: testnav-organisasjon-faste-data-service - application: testnav-organisasjon-forvalter - application: testnav-organisasjon-service - - application: testnav-miljoer-service - - application: testnav-adresse-service - - application: testnorge-tilbakemelding-api - - application: testnav-kodeverk-service + - application: testnav-organisasjon-tilgang-service + - application: testnav-pdl-forvalter-dev + - application: testnav-person-organisasjon-tilgang-service-dev + - application: testnav-person-search-service + - application: testnav-person-service - application: testnav-tenor-search-service + - application: testnav-tps-messaging-service + - application: testnav-varslinger-service-dev + - application: testnorge-profil-api-dev + - application: testnorge-tilbakemelding-api external: - host: testnav-pensjon-testdata-facade-proxy.dev-fss-pub.nais.io - host: testnav-sigrunstub-proxy.dev-fss-pub.nais.io diff --git a/apps/dolly-frontend/config.yml b/apps/dolly-frontend/config.yml index e059401e4fe..9307d463c81 100644 --- a/apps/dolly-frontend/config.yml +++ b/apps/dolly-frontend/config.yml @@ -18,6 +18,7 @@ spec: autoLoginIgnorePaths: - /login - /assets/* + - / application: allowAllUsers: true enabled: true @@ -34,30 +35,35 @@ spec: accessPolicy: outbound: rules: - - application: testnav-arbeidsplassencv-proxy - - application: generer-navn-service - - application: testnav-person-service - application: dolly-backend - - application: testnav-helsepersonell-service - - application: testnav-person-search-service + - application: dolly-redis-session + - application: generer-navn-service + - application: testnav-adresse-service + - application: testnav-amelding-service + - application: testnav-arbeidsplassencv-proxy - application: testnav-bruker-service + - application: testnav-generer-synt-amelding-service + - application: testnav-helsepersonell-service + - application: testnav-joark-dokument-service + - application: testnav-kodeverk-service + - application: testnav-miljoer-service + - application: testnav-oppsummeringsdokument-service + - application: testnav-organisasjon-faste-data-service + - application: testnav-organisasjon-forvalter + - application: testnav-organisasjon-service + - application: testnav-organisasjon-tilgang-service - application: testnav-pdl-forvalter + - application: testnav-person-faste-data-service - application: testnav-person-organisasjon-tilgang-service - - application: dolly-redis-session - - application: testnav-varslinger-service + - application: testnav-person-search-service + - application: testnav-person-service + - application: testnav-skattekort-service + - application: testnav-sykemelding-api + - application: testnav-tenor-search-service - application: testnav-tps-messaging-service - - application: testnav-organisasjon-faste-data-service - - application: testnav-joark-dokument-service - - application: testnav-organisasjon-tilgang-service + - application: testnav-varslinger-service - application: testnorge-profil-api - - application: testnav-organisasjon-forvalter - - application: testnav-oppsummeringsdokument-service - - application: testnav-organisasjon-service - - application: testnav-miljoer-service - - application: testnav-adresse-service - application: testnorge-tilbakemelding-api - - application: testnav-kodeverk-service - - application: testnav-tenor-search-service external: - host: testnav-pensjon-testdata-facade-proxy.dev-fss-pub.nais.io - host: testnav-sigrunstub-proxy.dev-fss-pub.nais.io diff --git a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java index 06c00ec7121..1250d63cceb 100644 --- a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java +++ b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java @@ -131,4 +131,4 @@ private Function> createRoute(String segment, St .filters(filter, addUserJwtHeaderFilter()) ).uri(host); } -} \ No newline at end of file +} diff --git a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/LocalVaultConfig.java b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/LocalVaultConfig.java index db8513cfdb5..9d48992a2e6 100644 --- a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/LocalVaultConfig.java +++ b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/LocalVaultConfig.java @@ -2,6 +2,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.lang.NonNull; import org.springframework.vault.annotation.VaultPropertySource; import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.TokenAuthentication; @@ -12,18 +13,19 @@ @Configuration @Profile("local") -@VaultPropertySource(value = "secret/.common/tokenx/dev/app-1", ignoreSecretNotFound = false) @VaultPropertySource(value = "secret/dolly/lokal", 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")); diff --git a/apps/dolly-frontend/src/main/js/cypress/e2e/Minside.cy.ts b/apps/dolly-frontend/src/main/js/cypress/e2e/Minside.cy.ts index 4b15e3bb817..e91e36559b3 100644 --- a/apps/dolly-frontend/src/main/js/cypress/e2e/Minside.cy.ts +++ b/apps/dolly-frontend/src/main/js/cypress/e2e/Minside.cy.ts @@ -1,7 +1,7 @@ import { CypressSelector } from '../mocks/Selectors' import { brukerMalerEndretMock } from '../mocks/BasicMocks' -const brukerMaler = new RegExp(/dolly-backend\/api\/v1\/bestilling\/malbestilling\?brukerId/) +const brukerMaler = new RegExp(/dolly-backend\/api\/v1\/malbestilling\?brukerId/) describe('Minside mal testing', () => { it('passes', () => { diff --git a/apps/dolly-frontend/src/main/js/cypress/support/e2e.ts b/apps/dolly-frontend/src/main/js/cypress/support/e2e.ts index eab8ae75428..99d64061da0 100644 --- a/apps/dolly-frontend/src/main/js/cypress/support/e2e.ts +++ b/apps/dolly-frontend/src/main/js/cypress/support/e2e.ts @@ -81,8 +81,8 @@ const udistub = new RegExp(/testnav-udistub-proxy\/api\/v1/) const brregstub = new RegExp(/testnav-brregstub/) const medl = new RegExp(/testnav-medl-proxy/) const sigrunstub = new RegExp(/testnav-sigrunstub-proxy\/api\/v1\/lignetinntekt/) -const alleMaler = new RegExp(/dolly-backend\/api\/v1\/bestilling\/malbestilling$/) -const brukerMaler = new RegExp(/dolly-backend\/api\/v1\/bestilling\/malbestilling\?brukerId/) +const alleMaler = new RegExp(/dolly-backend\/api\/v1\/malbestilling$/) +const brukerMaler = new RegExp(/dolly-backend\/api\/v1\/malbestilling\?brukerId/) const oppsummeringsdokService = new RegExp( /oppsummeringsdokument-service\/api\/v1\/oppsummeringsdokumenter/, ) diff --git a/apps/dolly-frontend/src/main/js/src/components/bestilling/detaljer/BestillingDetaljer.tsx b/apps/dolly-frontend/src/main/js/src/components/bestilling/detaljer/BestillingDetaljer.tsx index d9e1b06ba86..1d66ae3213a 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestilling/detaljer/BestillingDetaljer.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestilling/detaljer/BestillingDetaljer.tsx @@ -4,7 +4,7 @@ import BestillingSammendrag from '@/components/bestilling/sammendrag/BestillingS import GjenopprettConnector from '@/components/bestilling/gjenopprett/GjenopprettBestillingConnector' import './BestillingDetaljer.less' -import { MalModal } from '@/pages/minSide/maler/MalModal' +import { MalModal, malTyper } from '@/pages/minSide/maler/MalModal' import _ from 'lodash' import { SlettButton } from '@/components/ui/button/SlettButton/SlettButton' import React from 'react' @@ -65,7 +65,7 @@ export default function BestillingDetaljer({ bestilling, iLaastGruppe, brukerId, kind={'maler'} className="svg-icon-blue" > - OPPRETT NY MAL + OPPRETT MAL )} )} @@ -109,7 +109,11 @@ export default function BestillingDetaljer({ bestilling, iLaastGruppe, brukerId, )} {isMalModalOpen && ( - + )} ) diff --git a/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/BestillingSammendrag.tsx b/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/BestillingSammendrag.tsx index b3c22eff2e4..7680d9e6523 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/BestillingSammendrag.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/BestillingSammendrag.tsx @@ -19,8 +19,8 @@ export default function BestillingSammendrag({ bestilling }) { sistOppdatert: bestilling.sistOppdatert, opprettetFraId: bestilling.opprettetFraId, opprettetFraGruppeId: bestilling.opprettetFraGruppeId, - navSyntetiskIdent: bestilling.bestilling.pdldata?.opprettNyPerson?.syntetisk, - beskrivelse: bestilling.bestilling.beskrivelse, + navSyntetiskIdent: bestilling?.bestilling?.pdldata?.opprettNyPerson?.syntetisk, + beskrivelse: bestilling?.bestilling?.beskrivelse, }} header="Bestillingskriterier" /> diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsforholdForm.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsforholdForm.tsx index aa8ad5257dd..6b1daa1491f 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsforholdForm.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/aareg/form/partials/arbeidsforholdForm.tsx @@ -68,7 +68,7 @@ export const ArbeidsforholdForm = ({ const aaregBestillinger = bestillinger ?.filter((bestilling) => bestilling?.data?.aareg) - ?.flatMap((bestilling) => bestilling.data.aareg) + ?.flatMap((bestilling) => bestilling.data?.aareg) ?.filter((bestilling) => _.isEmpty(bestilling?.amelding)) return _.uniqWith( diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/arena/form/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/arena/form/validation.tsx index 0357ec35917..7e55fc61c88 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/arena/form/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/arena/form/validation.tsx @@ -159,10 +159,10 @@ const ingenOverlappFraTildato = (tildato, values) => { if (values.tidligereBestillinger) { const arenaBestillinger = values.tidligereBestillinger.filter((bestilling) => - bestilling.data.hasOwnProperty('arenaforvalter'), + bestilling.data?.hasOwnProperty('arenaforvalter'), ) for (let bestilling of arenaBestillinger) { - let arenaInfo = bestilling.data.arenaforvalter + let arenaInfo = bestilling.data?.arenaforvalter for (let key of ikkeOverlappendeVedtak) { if (arenaInfo[key]?.length > 0) { const fraDatoBestilling = arenaInfo[key]?.[0]?.fraDato diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/inntektsmelding/visning/Visning.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/inntektsmelding/visning/Visning.tsx index 2db03364728..48a48a48889 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/inntektsmelding/visning/Visning.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/inntektsmelding/visning/Visning.tsx @@ -130,8 +130,8 @@ InntektsmeldingVisning.filterValues = (bestillinger: Array, ident: s return bestillinger.filter( (bestilling: any) => - bestilling.data.inntektsmelding && - !tomBestilling(bestilling.data.inntektsmelding.inntekter) && + bestilling.data?.inntektsmelding && + !tomBestilling(bestilling.data?.inntektsmelding.inntekter) && erGyldig(bestilling.id, 'INNTKMELD', ident), ) } diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx index 438bdfcac9e..afbe274543c 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx @@ -114,6 +114,6 @@ SykemeldingVisning.filterValues = (bestillinger: Array, ident: stri return bestillinger.filter( (bestilling: any) => - bestilling.data.sykemelding && erGyldig(bestilling.id, 'SYKEMELDING', ident), + bestilling.data?.sykemelding && erGyldig(bestilling.id, 'SYKEMELDING', ident), ) } diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/udistub/form/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/udistub/form/validation.tsx index 9c868f32eba..689165b6bcd 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/udistub/form/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/udistub/form/validation.tsx @@ -88,7 +88,7 @@ export const validation = { Yup.object({ aliaser: ifPresent('$udistub.aliaser', aliaser), arbeidsadgang: ifPresent('$udistub.arbeidsadgang', arbeidsadgang), - flyktning: requiredBoolean, + flyktning: ifPresent('$udistub.flyktning', requiredBoolean), oppholdStatus: ifPresent('$udistub.oppholdStatus', oppholdStatus), soeknadOmBeskyttelseUnderBehandling: ifPresent( '$udistub.soeknadOmBeskyttelseUnderBehandling', diff --git a/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx b/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx index 987613e8892..3ec10eeb204 100644 --- a/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx +++ b/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx @@ -86,6 +86,8 @@ import { import { usePensjonEnvironments } from '@/utils/hooks/useEnvironments' import { SigrunstubPensjonsgivendeVisning } from '@/components/fagsystem/sigrunstubPensjonsgivende/visning/Visning' import { useUdistub } from '@/utils/hooks/useUdistub' +import useBoolean from '@/utils/hooks/useBoolean' +import { MalModal, malTyper } from '@/pages/minSide/maler/MalModal' import { useTenorOversikt } from '@/utils/hooks/useTenorSoek' import { SkatteetatenVisning } from '@/components/fagsystem/skatteetaten/visning/SkatteetatenVisning' @@ -114,6 +116,8 @@ export default ({ }) => { const { gruppeId } = ident + const [isMalModalOpen, openMalModal, closeMalModal] = useBoolean(false) + const { organisasjonTilgang } = useOrganisasjonTilgang() const tilgjengeligMiljoe = organisasjonTilgang?.miljoe @@ -397,6 +401,11 @@ export default ({ master={ident?.master} /> )} + {bestillingIdListe?.length > 0 && ( + + )} {!iLaastGruppe && ident.master !== 'PDL' && ( @@ -508,7 +517,7 @@ export default ({ + {isMalModalOpen && ( + + )} ) diff --git a/apps/dolly-frontend/src/main/js/src/pages/minSide/maler/MalModal.tsx b/apps/dolly-frontend/src/main/js/src/pages/minSide/maler/MalModal.tsx index 7587f2ca1ba..06c879586eb 100644 --- a/apps/dolly-frontend/src/main/js/src/pages/minSide/maler/MalModal.tsx +++ b/apps/dolly-frontend/src/main/js/src/pages/minSide/maler/MalModal.tsx @@ -7,25 +7,59 @@ import { Label } from '@/components/ui/form/inputs/label/Label' import { DollyApi } from '@/service/Api' import { REGEX_BACKEND_BESTILLINGER, + REGEX_BACKEND_GRUPPER, REGEX_BACKEND_ORGANISASJONER, useMatchMutate, } from '@/utils/hooks/useMutate' import { FormProvider, useForm } from 'react-hook-form' import { CypressSelector } from '../../../../cypress/mocks/Selectors' -export const MalModal = ({ id, erOrganisasjon, closeModal }) => { +export const malTyper = { + ORGANISASJON: 'ORGANISASJON', + BESTILLING: 'BESTILLING', + PERSON: 'PERSON', +} + +export const MalModal = ({ id, malType, closeModal }) => { const [nyttMalnavn, setMalnavn] = useState('') const matchMutate = useMatchMutate() const formMethods = useForm() + const lagreMal = () => { - erOrganisasjon - ? DollyApi.lagreOrganisasjonMalFraBestillingId(id, nyttMalnavn).then(() => + switch (malType) { + case malTyper.ORGANISASJON: + DollyApi.lagreOrganisasjonMalFraBestillingId(id, nyttMalnavn).then(() => matchMutate(REGEX_BACKEND_ORGANISASJONER), ) - : DollyApi.lagreMalFraBestillingId(id, nyttMalnavn).then(() => + closeModal() + break + case malTyper.BESTILLING: + DollyApi.lagreMalFraBestillingId(id, nyttMalnavn).then(() => matchMutate(REGEX_BACKEND_BESTILLINGER), ) - closeModal() + closeModal() + break + case malTyper.PERSON: + DollyApi.opprettMalFraPerson(id, nyttMalnavn).then(() => matchMutate(REGEX_BACKEND_GRUPPER)) + closeModal() + break + default: + closeModal() + break + } + } + + let topic + switch (malType) { + case malTyper.ORGANISASJON: + topic = 'organisasjon' + break + case malTyper.BESTILLING: + topic = 'bestilling' + break + case malTyper.PERSON: + topic = 'person' + break } return ( @@ -33,7 +67,7 @@ export const MalModal = ({ id, erOrganisasjon, closeModal }) => {
-

Opprett ny mal

+

Opprett mal fra {topic}