From 580b251d4e38a430aa6a77ca38722d863b73f91e Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Thu, 29 Aug 2024 12:29:32 +0200 Subject: [PATCH 1/9] Update --- .../selfcare/onboarding/entity/Onboarding.java | 3 +++ .../service/OnboardingServiceDefault.java | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java index 77e88421b..625bdf05d 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java @@ -40,6 +40,9 @@ public class Onboarding extends ReactivePanacheMongoEntityBase { private AdditionalInformations additionalInformations; private String reasonForReject; private Boolean isAggregator; + private String city; + private String country; + private String county; private String referenceOnboardingId; private String previousManagerId; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index d255de464..ad6368980 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -207,6 +207,7 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) .onItem().transformToUni(this::addParentDescriptionForAooOrUo) + //.onItem().transformToUni(this::addLocationData) .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) /* Update onboarding data with users and start orchestration */ .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, @@ -321,6 +322,18 @@ private Uni addReferencedOnboardingId(Onboarding onboarding) { }).replaceWith(onboarding); } + private Uni addLocationData(Onboarding onboarding) { + + if (InstitutionType.PA == onboarding.getInstitution().getInstitutionType()) { + if (InstitutionPaSubunitType.AOO == onboarding.getInstitution().getSubunitType()) { + return addParentDescriptionForAOO(onboarding); + } else if (InstitutionPaSubunitType.UO == onboarding.getInstitution().getSubunitType()) { + return addParentDescriptionForUO(onboarding); + } + } + return Uni.createFrom().item(onboarding); + } + private Multi getOnboardingByFilters(String taxCode, String subunitCode, String origin, String originId, String productId) { final Map queryParameter = QueryUtils.createMapForInstitutionOnboardingsQueryParameter( From 47a73ad53ae9a483ac8a2d7bfdd49b0056a17400 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Tue, 3 Sep 2024 14:53:43 +0200 Subject: [PATCH 2/9] Added logic to value istatCode --- apps/onboarding-ms/src/main/docs/openapi.json | 3 + apps/onboarding-ms/src/main/docs/openapi.yaml | 2 + .../onboarding/entity/Institution.java | 1 + .../onboarding/entity/Onboarding.java | 3 - .../service/OnboardingServiceDefault.java | 101 +++++++++++++----- .../service/util/OnboardingUtils.java | 47 ++++---- .../service/util/OnboardingUtilsTest.java | 72 +++++++++++-- 7 files changed, 171 insertions(+), 58 deletions(-) diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index 7047f045f..c38864323 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -1419,6 +1419,9 @@ "county" : { "type" : "string" }, + "istatCode" : { + "type" : "string" + }, "description" : { "type" : "string" }, diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index be41357e2..96d92c0bf 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -998,6 +998,8 @@ components: type: string county: type: string + istatCode: + type: string description: type: string digitalAddress: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java index 7fc08fb8d..a71252aff 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java @@ -22,6 +22,7 @@ public class Institution { private String city; private String country; private String county; + private String istatCode; private String description; private String digitalAddress; private String address; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java index 625bdf05d..77e88421b 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Onboarding.java @@ -40,9 +40,6 @@ public class Onboarding extends ReactivePanacheMongoEntityBase { private AdditionalInformations additionalInformations; private String reasonForReject; private Boolean isAggregator; - private String city; - private String country; - private String county; private String referenceOnboardingId; private String previousManagerId; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index e9efdd78d..0bd790625 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -50,6 +50,8 @@ import org.openapi.quarkus.onboarding_functions_json.model.OrchestrationResponse; import org.openapi.quarkus.party_registry_proxy_json.api.AooApi; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; +import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource; +import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; import org.openapi.quarkus.user_registry_json.api.UserApi; import org.openapi.quarkus.user_registry_json.model.*; @@ -63,6 +65,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.*; import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_INTEROP; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; import static it.pagopa.selfcare.onboarding.util.GenericError.*; @@ -203,11 +206,12 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li return getProductByOnboarding(onboarding) .onItem().transformToUni(product -> verifyAlreadyOnboardingForProductAndProductParent(onboarding.getInstitution(), product.getId(), product.getParentId()) .replaceWith(product)) - .onItem().transformToUni(product -> onboardingUtils.customValidationOnboardingData(onboarding, product) + .onItem().transformToUni(product -> getRegistryResource(onboarding) + .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) + .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource))) /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ - .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) + .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())).onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) .onItem().transformToUni(this::addParentDescriptionForAooOrUo) - //.onItem().transformToUni(this::addLocationData) .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) /* Update onboarding data with users and start orchestration */ .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, @@ -243,17 +247,50 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li return getProductByOnboarding(onboarding) .onItem().transformToUni(product -> verifyAlreadyOnboardingForProductAndProductParent(onboarding.getInstitution(), product.getId(), product.getParentId()) .replaceWith(product)) - .onItem().transformToUni(product -> onboardingUtils.customValidationOnboardingData(onboarding, product) - /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ - .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) - .onItem().transformToUni(this::addParentDescriptionForAooOrUo) - .onItem().transformToUni(this::setInstitutionTypeAndBillingData) - .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) - .onItem().call(onboardingPersisted -> Panache.withTransaction(() -> Token.persist(getToken(onboardingPersisted, product, contractImported)))) - /* Update onboarding data with users and start orchestration */ - .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, - orchestrationApi.apiStartOnboardingOrchestrationGet(currentOnboarding.getId(), timeout))) - .onItem().transform(onboardingMapper::toResponse)); + .onItem().transformToUni(product -> getRegistryResource(onboarding) + .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) + .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource))) + /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ + .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) + .onItem().transformToUni(this::addParentDescriptionForAooOrUo) + .onItem().transformToUni(this::setInstitutionTypeAndBillingData) + .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) + .onItem().call(onboardingPersisted -> Panache.withTransaction(() -> Token.persist(getToken(onboardingPersisted, product, contractImported)))) + /* Update onboarding data with users and start orchestration */ + .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, + orchestrationApi.apiStartOnboardingOrchestrationGet(currentOnboarding.getId(), timeout))) + .onItem().transform(onboardingMapper::toResponse)); + } + + private Uni getRegistryResource(Onboarding onboarding) { + + switch ((onboarding.getInstitution().getSubunitType() != null) ? onboarding.getInstitution().getSubunitType() : EC ) { + case AOO -> { + return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) + .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) + : Uni.createFrom().failure(ex)) + .onItem().transformToUni(aooResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .resource(aooResource) + .type(AOO) + .build())); + } + case UO -> { + return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) + .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(UO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) + : Uni.createFrom().failure(ex)) + .onItem().transformToUni(uoResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .resource(uoResource) + .type(UO) + .build())); + } + default -> { + return Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .type(EC) + .build()); + } + } } private Uni persistOnboarding(Onboarding onboarding, List userRequests, Product product) { @@ -281,6 +318,22 @@ private Uni addParentDescriptionForAooOrUo(Onboarding onboarding) { return Uni.createFrom().item(onboarding); } + private Uni setIstatCode(Onboarding onboarding, OnboardingUtils.ProxyResource proxyResource) { + return switch (proxyResource.getType()) { + case AOO -> Uni.createFrom().item(() -> { + AOOResource resource = (AOOResource) proxyResource.getResource(); + onboarding.getInstitution().setIstatCode(resource.getCodiceComuneISTAT()); + return onboarding; + }); + case UO -> Uni.createFrom().item(() -> { + UOResource resource = (UOResource) proxyResource.getResource(); + onboarding.getInstitution().setIstatCode(resource.getCodiceComuneISTAT()); + return onboarding; + }); + default -> Uni.createFrom().item(onboarding); + }; + } + private Uni addParentDescriptionForUO(Onboarding onboarding) { return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) .onItem().invoke(uoResource -> LOG.infof("Founded parent %s for UO institution with subunitCode %s", uoResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode())) @@ -315,11 +368,11 @@ private Uni addReferencedOnboardingId(Onboarding onboarding) { .invoke(previousOnboarding -> onboarding.setReferenceOnboardingId(previousOnboarding.getId())); return current.onItem().transformToUni(ignored -> onboardings.collect().first()).onItem() .invoke(lastOnboarding -> { - String previousManagerId = lastOnboarding.getUsers().stream() - .filter(user -> user.getRole().equals(PartyRole.MANAGER)) - .map(User::getId).findFirst().orElse(null); - onboarding.setPreviousManagerId(previousManagerId); - }).replaceWith(onboarding); + String previousManagerId = lastOnboarding.getUsers().stream() + .filter(user -> user.getRole().equals(PartyRole.MANAGER)) + .map(User::getId).findFirst().orElse(null); + onboarding.setPreviousManagerId(previousManagerId); + }).replaceWith(onboarding); } private Uni addLocationData(Onboarding onboarding) { @@ -1050,8 +1103,8 @@ public Uni updateOnboarding(String onboardingId, Onboarding onboarding) { return Onboarding.findById(onboardingId) .onItem().transform(Onboarding.class::cast) .onItem().transformToUni(onboardingGet -> Objects.isNull(onboardingGet) - ? Uni.createFrom().failure(new InvalidRequestException(String.format("Onboarding with id %s is not present!", onboardingId))) - : Uni.createFrom().item(onboardingGet)) + ? Uni.createFrom().failure(new InvalidRequestException(String.format("Onboarding with id %s is not present!", onboardingId))) + : Uni.createFrom().item(onboardingGet)) .onItem().transformToUni(id -> updateOnboardingValues(onboardingId, onboarding)); } @@ -1093,9 +1146,9 @@ public Uni checkManager(OnboardingUserRequest onboardingUserRequest) { } public Uni checkRecipientCode(String recipientCode, String originId) { - return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem() - .transformToUni(uoResource -> - onboardingUtils.getValidationRecipientCodeError(originId, uoResource)); + return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem() + .transformToUni(uoResource -> + onboardingUtils.getValidationRecipientCodeError(originId, uoResource)); } private static Uni updateOnboardingValues(String onboardingId, Onboarding onboarding) { diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java index 675bc7ffb..424228dc8 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java @@ -13,15 +13,17 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; +import lombok.Builder; +import lombok.Data; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.openapi.quarkus.party_registry_proxy_json.api.AooApi; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; +import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource; import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; import java.util.Objects; -import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.EC; -import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.UO; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.*; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; @ApplicationScoped @@ -41,21 +43,21 @@ public class OnboardingUtils { private static final String PARENT_TAX_CODE_IS_INVALID = "The tax code of the parent entity of the request does not match the tax code of the parent entity retrieved by IPA"; private static final String TAX_CODE_INVOICING_IS_INVALID = "The tax code invoicing of the request does not match any tax code of institutions' hierarchy"; - public Uni customValidationOnboardingData(Onboarding onboarding, Product product) { - if (isUO(onboarding)) { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .flatMap(uoResource -> checkParentTaxCode(onboarding, uoResource)) - .onItem().transformToUni(o -> checkTaxCodeInvoicing(onboarding, product)); - } - return checkRecipientCode(onboarding) - .replaceWith(additionalChecksForProduct(onboarding, product)); + public Uni customValidationOnboardingData(Onboarding onboarding, Product product, ProxyResource proxyResource) { + if (isUOWithSfe(onboarding)) { + return checkParentTaxCode(onboarding, ((UOResource) proxyResource.getResource()).getCodiceFiscaleEnte()) + .onItem().transformToUni(o -> checkTaxCodeInvoicing(onboarding, product)); + } else { + return checkRecipientCode(onboarding, proxyResource) + .replaceWith(additionalChecksForProduct(onboarding, product)); + } } - private Uni checkRecipientCode(Onboarding onboarding) { + private Uni checkRecipientCode(Onboarding onboarding, ProxyResource proxyResource) { if (isInvoiceablePA(onboarding)) { final String recipientCode = onboarding.getBilling().getRecipientCode(); return getUoFromRecipientCode(recipientCode) - .onItem().transformToUni(uoResource -> validationRecipientCode(onboarding, uoResource)) + .onItem().transformToUni(uoResource -> validationRecipientCode(onboarding, proxyResource, uoResource)) .onItem().transformToUni(customError -> { if (Objects.nonNull(customError)) { return Uni.createFrom().failure(new InvalidRequestException(customError.getMessage())); @@ -66,16 +68,14 @@ private Uni checkRecipientCode(Onboarding onboarding) { return Uni.createFrom().nullItem(); } - private Uni validationRecipientCode(Onboarding onboarding, UOResource uoResource) { + private Uni validationRecipientCode(Onboarding onboarding, ProxyResource proxyResource, UOResource uoResource) { switch ((onboarding.getInstitution().getSubunitType() != null) ? onboarding.getInstitution().getSubunitType() : EC ) { case AOO -> { - return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) - .onItem().transformToUni(aooResource -> getValidationRecipientCodeError(aooResource.getCodiceIpa(), uoResource)); + return getValidationRecipientCodeError(((AOOResource) proxyResource.getResource()).getCodiceIpa(), uoResource); } case UO -> { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .onItem().transformToUni(innerUoResource -> getValidationRecipientCodeError(innerUoResource.getCodiceIpa(), uoResource)); + return getValidationRecipientCodeError(((UOResource) proxyResource.getResource()).getCodiceIpa(), uoResource); } default -> { return getValidationRecipientCodeError(onboarding.getInstitution().getOriginId(), uoResource); @@ -104,9 +104,9 @@ public Uni getValidationRecipientCodeError(String originIdEC, UORes return Uni.createFrom().nullItem(); } - private Uni checkParentTaxCode(Onboarding onboarding, UOResource uoResource) { + private Uni checkParentTaxCode(Onboarding onboarding, String childTaxCode) { /* if parent tax code is different from child tax code, throw an exception */ - if (!onboarding.getInstitution().getTaxCode().equals(uoResource.getCodiceFiscaleEnte())) { + if (!onboarding.getInstitution().getTaxCode().equals(childTaxCode)) { return Uni.createFrom().failure(new InvalidRequestException(PARENT_TAX_CODE_IS_INVALID)); } return Uni.createFrom().voidItem(); @@ -154,7 +154,7 @@ private Uni additionalChecksForProduct(Onboarding onboarding, Produc return Uni.createFrom().item(onboarding); } - private boolean isUO(Onboarding onboarding) { + private boolean isUOWithSfe(Onboarding onboarding) { return Objects.nonNull(onboarding.getInstitution().getSubunitCode()) && UO.equals(onboarding.getInstitution().getSubunitType()) && Objects.nonNull(onboarding.getBilling()) @@ -168,4 +168,11 @@ private boolean isInvoiceablePA(Onboarding onboarding) { && Objects.nonNull(onboarding.getBilling()) && Objects.nonNull(onboarding.getBilling().getRecipientCode()); } + + @Data + @Builder + public static class ProxyResource { + private InstitutionPaSubunitType type; + private T resource; + } } diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java index 9f578b527..bb6a6a74b 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java @@ -58,8 +58,12 @@ void shouldOnboardingInstitutionWithAdditionalInfo(String type) { onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); onboarding.setAdditionalInformations(createSimpleAdditionalInformations(type)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -79,8 +83,12 @@ void shouldOnboardingInstitutionWithAdditionalInfoRequiredException() { onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); onboarding.setAdditionalInformations(createSimpleAdditionalInformations("other")); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -99,8 +107,12 @@ void shouldOnboardingInstitutionWithOtherNoteRequiredException() { onboarding.setInstitution(institution); onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -120,8 +132,12 @@ void shouldOnboardingInstitutionWithBillingRequiredException() { billing.setTaxCodeInvoicing("taxCodeInvoicing"); onboarding.setBilling(billing); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -140,8 +156,12 @@ void shouldOnboardingInstitutionWithRecipientCodeRequiredException() { onboarding.setBilling(billing); onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -166,11 +186,16 @@ void shouldOnboardingInstitutionWithParentTaxCodeException() { billing.setTaxCodeInvoicing("taxCodeInvoicing"); onboarding.setBilling(billing); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.UO) + .resource(uoResource) + .build(); + when(uoApi.findByUnicodeUsingGET1(any(), any())) .thenReturn(Uni.createFrom().item(uoResource)); UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -209,8 +234,14 @@ void shouldOnboardingInstitutionWithTaxCodeInvoicingException() { when(uoApi.findAllUsingGET1(any(), any(), any())) .thenReturn(Uni.createFrom().item(uOsResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.UO) + .resource(uoResource) + .build(); + + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -250,8 +281,13 @@ void checkRecipientCodeNoBilling() { AOOsResource uOsResource = new AOOsResource(); uOsResource.setItems(List.of(resource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.AOO) + .resource(resource) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -284,8 +320,13 @@ void checkRecipientCodeUONoBilling() { when(uoApi.findByUnicodeUsingGET1(any(), any())) .thenReturn(Uni.createFrom().item(uoResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.UO) + .resource(uoResource) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -326,8 +367,13 @@ void checkRecipientCodeNoAssociation() { AOOsResource uOsResource = new AOOsResource(); uOsResource.setItems(List.of(aooResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.AOO) + .resource(aooResource) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -360,8 +406,12 @@ void checkRecipientCodeSuccess() { UOsResource uOsResource = new UOsResource(); uOsResource.setItems(List.of(uoResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); From 232691d4216409787a70140b731bd02e52da0702 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Tue, 3 Sep 2024 15:55:16 +0200 Subject: [PATCH 3/9] Removed unused method --- .../onboarding/service/OnboardingServiceDefault.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index 0bd790625..aede3b07f 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -375,18 +375,6 @@ private Uni addReferencedOnboardingId(Onboarding onboarding) { }).replaceWith(onboarding); } - private Uni addLocationData(Onboarding onboarding) { - - if (InstitutionType.PA == onboarding.getInstitution().getInstitutionType()) { - if (InstitutionPaSubunitType.AOO == onboarding.getInstitution().getSubunitType()) { - return addParentDescriptionForAOO(onboarding); - } else if (InstitutionPaSubunitType.UO == onboarding.getInstitution().getSubunitType()) { - return addParentDescriptionForUO(onboarding); - } - } - return Uni.createFrom().item(onboarding); - } - private Multi getOnboardingByFilters(String taxCode, String subunitCode, String origin, String originId, String productId) { final Map queryParameter = QueryUtils.createMapForInstitutionOnboardingsQueryParameter( From 7de341e109e0e5061b0d305056ae45961b7d8fbc Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Tue, 3 Sep 2024 16:01:27 +0200 Subject: [PATCH 4/9] Removed unused getter and setter for ProxyResource object --- .../selfcare/onboarding/service/util/OnboardingUtils.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java index 424228dc8..011de9afd 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java @@ -14,7 +14,6 @@ import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; import lombok.Builder; -import lombok.Data; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.openapi.quarkus.party_registry_proxy_json.api.AooApi; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; @@ -23,7 +22,8 @@ import java.util.Objects; -import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.*; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.EC; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.UO; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; @ApplicationScoped @@ -169,7 +169,6 @@ private boolean isInvoiceablePA(Onboarding onboarding) { && Objects.nonNull(onboarding.getBilling().getRecipientCode()); } - @Data @Builder public static class ProxyResource { private InstitutionPaSubunitType type; From 140d2e471cdb078f0836a65f637e4d476d7b2d34 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Tue, 3 Sep 2024 16:21:07 +0200 Subject: [PATCH 5/9] Refactor method parent description for AOO/UO --- .../service/OnboardingServiceDefault.java | 49 +++++++++---------- .../service/util/OnboardingUtils.java | 2 + 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index aede3b07f..945562c2e 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -208,10 +208,10 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li .replaceWith(product)) .onItem().transformToUni(product -> getRegistryResource(onboarding) .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) - .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource))) + .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource) + .onItem().transformToUni(innerOnboarding -> addParentDescriptionForAooOrUo(onboarding, proxyResource)))) /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())).onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) - .onItem().transformToUni(this::addParentDescriptionForAooOrUo) .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) /* Update onboarding data with users and start orchestration */ .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, @@ -249,10 +249,10 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li .replaceWith(product)) .onItem().transformToUni(product -> getRegistryResource(onboarding) .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) - .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource))) + .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource) + .onItem().transformToUni(innerOnboarding -> addParentDescriptionForAooOrUo(onboarding, proxyResource)))) /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) - .onItem().transformToUni(this::addParentDescriptionForAooOrUo) .onItem().transformToUni(this::setInstitutionTypeAndBillingData) .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) .onItem().call(onboardingPersisted -> Panache.withTransaction(() -> Token.persist(getToken(onboardingPersisted, product, contractImported)))) @@ -301,7 +301,7 @@ private Uni persistOnboarding(Onboarding onboarding, List addParentDescriptionForAooOrUo(Onboarding onboarding) { + private Uni addParentDescriptionForAooOrUo(Onboarding onboarding, OnboardingUtils.ProxyResource proxyResource) { Log.infof("Adding parent description AOO/UOO for: taxCode %s, subunitCode %s, type %s", onboarding.getInstitution().getTaxCode(), @@ -309,10 +309,12 @@ private Uni addParentDescriptionForAooOrUo(Onboarding onboarding) { onboarding.getInstitution().getInstitutionType()); if (InstitutionType.PA == onboarding.getInstitution().getInstitutionType()) { - if (InstitutionPaSubunitType.AOO == onboarding.getInstitution().getSubunitType()) { - return addParentDescriptionForAOO(onboarding); - } else if (InstitutionPaSubunitType.UO == onboarding.getInstitution().getSubunitType()) { - return addParentDescriptionForUO(onboarding); + if (AOO == proxyResource.getType()) { + AOOResource resource = (AOOResource) proxyResource.getResource(); + return addParentDescriptionForAOO(onboarding, resource); + } else if (UO == onboarding.getInstitution().getSubunitType()) { + UOResource resource = (UOResource) proxyResource.getResource(); + return addParentDescriptionForUO(onboarding, resource); } } return Uni.createFrom().item(onboarding); @@ -334,25 +336,20 @@ private Uni setIstatCode(Onboarding onboarding, OnboardingUtils.Prox }; } - private Uni addParentDescriptionForUO(Onboarding onboarding) { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .onItem().invoke(uoResource -> LOG.infof("Founded parent %s for UO institution with subunitCode %s", uoResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode())) - .onItem().invoke(uoResource -> onboarding.getInstitution().setParentDescription(uoResource.getDenominazioneEnte())) - .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 - ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(UO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) - : Uni.createFrom().failure(ex)) - .replaceWith(onboarding); - + private Uni addParentDescriptionForUO(Onboarding onboarding, UOResource uoResource) { + LOG.infof("Founded parent %s for UO institution with subunitCode %s", uoResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode()); + return Uni.createFrom().item(() -> { + onboarding.getInstitution().setParentDescription(uoResource.getDenominazioneEnte()); + return onboarding; + }); } - private Uni addParentDescriptionForAOO(Onboarding onboarding) { - return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) - .onItem().invoke(aooResource -> LOG.infof("Founded parent %s for AOO institution with subunitCode %s", aooResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode())) - .onItem().invoke(aooResource -> onboarding.getInstitution().setParentDescription(aooResource.getDenominazioneEnte())) - .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 - ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) - : Uni.createFrom().failure(ex)) - .replaceWith(onboarding); + private Uni addParentDescriptionForAOO(Onboarding onboarding, AOOResource aooResource) { + LOG.infof("Founded parent %s for AOO institution with subunitCode %s", aooResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode()); + return Uni.createFrom().item(() -> { + onboarding.getInstitution().setParentDescription(aooResource.getDenominazioneEnte()); + return onboarding; + }); } private Uni addReferencedOnboardingId(Onboarding onboarding) { diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java index 011de9afd..bf0cd37c7 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java @@ -14,6 +14,7 @@ import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; import lombok.Builder; +import lombok.Data; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.openapi.quarkus.party_registry_proxy_json.api.AooApi; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; @@ -169,6 +170,7 @@ private boolean isInvoiceablePA(Onboarding onboarding) { && Objects.nonNull(onboarding.getBilling().getRecipientCode()); } + @Data @Builder public static class ProxyResource { private InstitutionPaSubunitType type; From 80258b135730fdbd50fc49a8ab1b6187dac2d044 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Tue, 3 Sep 2024 16:56:19 +0200 Subject: [PATCH 6/9] Added unit tets --- .../service/util/OnboardingUtilsTest.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java index bb6a6a74b..74c6bbf3b 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java @@ -14,7 +14,10 @@ import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.product.entity.Product; import jakarta.inject.Inject; +import jakarta.ws.rs.WebApplicationException; +import org.apache.http.HttpStatus; import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.resteasy.reactive.ClientWebApplicationException; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -294,6 +297,47 @@ void checkRecipientCodeNoBilling() { subscriber.assertFailedWith(InvalidRequestException.class); } + @Test + void checkRecipientCodeFailure() { + + Onboarding onboarding = new Onboarding(); + Institution institution = new Institution(); + institution.setOriginId("ipaCode"); + institution.setSubunitCode("subunitCode"); + institution.setSubunitType(InstitutionPaSubunitType.AOO); + institution.setInstitutionType(InstitutionType.PA); + institution.setTaxCode("taxCode"); + AOOResource resource = new AOOResource(); + resource.setCodiceFiscaleEnte("taxCode"); + resource.setCodiceIpa("ipaCode"); + onboarding.setInstitution(institution); + onboarding.setProductId(ProductId.PROD_IO_SIGN.getValue()); + Billing billing = new Billing(); + billing.setTaxCodeInvoicing("taxCodeInvoicing"); + billing.setRecipientCode("recipientCode"); + onboarding.setBilling(billing); + + UOResource uoResource = new UOResource(); + uoResource.setCodiceIpa("ipaCode"); + uoResource.setCodiceFiscaleEnte("taxCode1"); + + ClientWebApplicationException exception = new ClientWebApplicationException(HttpStatus.SC_INTERNAL_SERVER_ERROR); + when(uoApi.findByUnicodeUsingGET1(any(), any())) + .thenReturn(Uni.createFrom().failure(exception)); + + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.AOO) + .resource(resource) + .build(); + + UniAssertSubscriber subscriber = onboardingUtils + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) + .subscribe() + .withSubscriber(UniAssertSubscriber.create()); + + subscriber.assertFailedWith(Exception.class); + } + @Test void checkRecipientCodeUONoBilling() { From aa17674d2a80195db858eca86fa0961ec4f541d6 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Fri, 6 Sep 2024 09:39:03 +0200 Subject: [PATCH 7/9] Update --- .../service/OnboardingServiceDefault.java | 79 ++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index 945562c2e..f28715da6 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -251,46 +251,23 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource) .onItem().transformToUni(innerOnboarding -> addParentDescriptionForAooOrUo(onboarding, proxyResource)))) - /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ - .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) - .onItem().transformToUni(this::setInstitutionTypeAndBillingData) - .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) - .onItem().call(onboardingPersisted -> Panache.withTransaction(() -> Token.persist(getToken(onboardingPersisted, product, contractImported)))) - /* Update onboarding data with users and start orchestration */ - .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, - orchestrationApi.apiStartOnboardingOrchestrationGet(currentOnboarding.getId(), timeout))) - .onItem().transform(onboardingMapper::toResponse)); + /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ + .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) + .onItem().transformToUni(this::setInstitutionTypeAndBillingData) + .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) + .onItem().call(onboardingPersisted -> Panache.withTransaction(() -> Token.persist(getToken(onboardingPersisted, product, contractImported)))) + /* Update onboarding data with users and start orchestration */ + .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, + orchestrationApi.apiStartOnboardingOrchestrationGet(currentOnboarding.getId(), timeout))) + .onItem().transform(onboardingMapper::toResponse)); } private Uni getRegistryResource(Onboarding onboarding) { - - switch ((onboarding.getInstitution().getSubunitType() != null) ? onboarding.getInstitution().getSubunitType() : EC ) { - case AOO -> { - return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) - .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 - ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) - : Uni.createFrom().failure(ex)) - .onItem().transformToUni(aooResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() - .resource(aooResource) - .type(AOO) - .build())); - } - case UO -> { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 - ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(UO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) - : Uni.createFrom().failure(ex)) - .onItem().transformToUni(uoResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() - .resource(uoResource) - .type(UO) - .build())); - } - default -> { - return Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() - .type(EC) - .build()); - } - } + return switch ((onboarding.getInstitution().getSubunitType() != null) ? onboarding.getInstitution().getSubunitType() : EC) { + case AOO -> getAOO(onboarding); + case UO -> getUO(onboarding); + default -> getEC(); + }; } private Uni persistOnboarding(Onboarding onboarding, List userRequests, Product product) { @@ -1171,4 +1148,32 @@ private List getManagerIds(List onboardings) { .map(User::getId) .findAny().orElse(null)).toList(); } + + private Uni getUO(Onboarding onboarding) { + return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) + .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(UO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) + : Uni.createFrom().failure(ex)) + .onItem().transformToUni(uoResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .resource(uoResource) + .type(UO) + .build())); + } + + private Uni getAOO(Onboarding onboarding) { + return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) + .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) + : Uni.createFrom().failure(ex)) + .onItem().transformToUni(aooResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .resource(aooResource) + .type(AOO) + .build())); + } + + private Uni getEC() { + return Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .type(EC) + .build()); + } } From e834ae79c4bc61ff71edf03fe71d33141a47b6e5 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Fri, 6 Sep 2024 09:50:13 +0200 Subject: [PATCH 8/9] Update tests --- .../selfcare/onboarding/service/OnboardingServiceDefault.java | 3 +-- .../selfcare/onboarding/service/util/OnboardingUtils.java | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index 0a76977f0..b79985675 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -210,7 +210,6 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource) .onItem().transformToUni(innerOnboarding -> addParentDescriptionForAooOrUo(onboarding, proxyResource)))) - .onItem().transformToUni(product -> onboardingUtils.customValidationOnboardingData(onboarding, product) /* if institution type is PRV or SCP, request should match data from registry proxy */ .onItem().transformToUni(ignored -> onboardingUtils.validateFields(onboarding)) /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ @@ -292,7 +291,7 @@ private Uni addParentDescriptionForAooOrUo(Onboarding onboarding, On if (AOO == proxyResource.getType()) { AOOResource resource = (AOOResource) proxyResource.getResource(); return addParentDescriptionForAOO(onboarding, resource); - } else if (UO == onboarding.getInstitution().getSubunitType()) { + } else if (UO == proxyResource.getType()) { UOResource resource = (UOResource) proxyResource.getResource(); return addParentDescriptionForUO(onboarding, resource); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java index e908248f8..8fff49efc 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java @@ -1,6 +1,7 @@ package it.pagopa.selfcare.onboarding.service.util; import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType; import it.pagopa.selfcare.onboarding.common.InstitutionType; import it.pagopa.selfcare.onboarding.common.ProductId; import it.pagopa.selfcare.onboarding.constants.CustomError; From 199b1367e3b0a3e93b77b8c46d80e3ad27ef7e02 Mon Sep 17 00:00:00 2001 From: "pierpaolo.didato@emeal.nttdata.com" Date: Fri, 6 Sep 2024 10:07:24 +0200 Subject: [PATCH 9/9] Removed lombok annotations for sonar suggestion --- .../selfcare/onboarding/service/util/OnboardingUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java index 8fff49efc..fbdad942e 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java @@ -203,11 +203,14 @@ private boolean isInvoiceablePA(Onboarding onboarding) { && Objects.nonNull(onboarding.getBilling().getRecipientCode()); } - @Data @Builder public static class ProxyResource { private InstitutionPaSubunitType type; private T resource; + public InstitutionPaSubunitType getType() { return type;} + public void setType(InstitutionPaSubunitType type) { this.type = type; } + public T getResource() { return resource; } + public void setResource(T resource) { this.resource = resource; } } private boolean originPDNDInfocamere(Onboarding onboarding, PDNDBusinessResource pdndBusinessResource) {