diff --git a/apps/onboarding-functions/pom.xml b/apps/onboarding-functions/pom.xml index 2bad72c43..ccffb9988 100644 --- a/apps/onboarding-functions/pom.xml +++ b/apps/onboarding-functions/pom.xml @@ -22,7 +22,7 @@ true 3.1.2 1.5.5.Final - 0.6.1 + 0.6.2 diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java index d37a802f7..09347feef 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java @@ -11,12 +11,18 @@ import java.util.Optional; import static it.pagopa.selfcare.onboarding.entity.OnboardingWorkflowType.INSTITUTION; +import static it.pagopa.selfcare.onboarding.functions.utils.ActivityName.*; +import static it.pagopa.selfcare.onboarding.utils.Utils.getOnboardingWorkflowString; -public record WorkflowExecutorConfirmation(ObjectMapper objectMapper, TaskOptions optionsRetry) implements WorkflowExecutor { +public record WorkflowExecutorConfirmation(ObjectMapper objectMapper, + TaskOptions optionsRetry) implements WorkflowExecutor { @Override public Optional executeRequestState(TaskOrchestrationContext ctx, OnboardingWorkflow onboardingWorkflow) { - return Optional.empty(); + String onboardingWorkflowString = getOnboardingWorkflowString(objectMapper, onboardingWorkflow); + ctx.callActivity(BUILD_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString, optionsRetry, String.class).await(); + ctx.callActivity(SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString, optionsRetry, String.class).await(); + return Optional.of(OnboardingStatus.PENDING); } @Override diff --git a/apps/onboarding-ms/pom.xml b/apps/onboarding-ms/pom.xml index cf7afd881..2583a590b 100644 --- a/apps/onboarding-ms/pom.xml +++ b/apps/onboarding-ms/pom.xml @@ -24,7 +24,7 @@ true 3.1.2 2.4.1 - 0.6.1 + 0.6.2 diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index 1387421d4..eb0b0527c 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -502,24 +502,9 @@ "operationId" : "onboardingCompletion", "requestBody" : { "content" : { - "multipart/form-data" : { + "application/json" : { "schema" : { - "required" : [ "contract" ], - "type" : "object", - "properties" : { - "onboardingRequest" : { - "$ref" : "#/components/schemas/OnboardingDefaultRequest" - }, - "contract" : { - "format" : "binary", - "type" : "string" - } - } - }, - "encoding" : { - "onboardingRequest" : { - "contentType" : "application/json" - } + "$ref" : "#/components/schemas/OnboardingDefaultRequest" } } } @@ -695,24 +680,9 @@ "operationId" : "onboardingPaCompletion", "requestBody" : { "content" : { - "multipart/form-data" : { + "application/json" : { "schema" : { - "required" : [ "contract" ], - "type" : "object", - "properties" : { - "onboardingRequest" : { - "$ref" : "#/components/schemas/OnboardingPaRequest" - }, - "contract" : { - "format" : "binary", - "type" : "string" - } - } - }, - "encoding" : { - "onboardingRequest" : { - "contentType" : "application/json" - } + "$ref" : "#/components/schemas/OnboardingPaRequest" } } } @@ -862,24 +832,9 @@ "operationId" : "onboardingPspCompletion", "requestBody" : { "content" : { - "multipart/form-data" : { + "application/json" : { "schema" : { - "required" : [ "contract" ], - "type" : "object", - "properties" : { - "onboardingRequest" : { - "$ref" : "#/components/schemas/OnboardingPspRequest" - }, - "contract" : { - "format" : "binary", - "type" : "string" - } - } - }, - "encoding" : { - "onboardingRequest" : { - "contentType" : "application/json" - } + "$ref" : "#/components/schemas/OnboardingPspRequest" } } } @@ -1979,6 +1934,9 @@ "legalRegisterName" : { "type" : "string" }, + "longTermPayments" : { + "type" : "boolean" + }, "manager" : { "type" : "boolean" }, @@ -2746,6 +2704,9 @@ "legalRegisterName" : { "type" : "string" }, + "longTermPayments" : { + "type" : "boolean" + }, "abiCode" : { "type" : "string" }, diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index 03d83ad04..7abdadd95 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -367,20 +367,9 @@ paths: operationId: onboardingCompletion requestBody: content: - multipart/form-data: + application/json: schema: - required: - - contract - type: object - properties: - onboardingRequest: - $ref: "#/components/schemas/OnboardingDefaultRequest" - contract: - format: binary - type: string - encoding: - onboardingRequest: - contentType: application/json + $ref: "#/components/schemas/OnboardingDefaultRequest" responses: "200": description: OK @@ -511,20 +500,9 @@ paths: operationId: onboardingPaCompletion requestBody: content: - multipart/form-data: + application/json: schema: - required: - - contract - type: object - properties: - onboardingRequest: - $ref: "#/components/schemas/OnboardingPaRequest" - contract: - format: binary - type: string - encoding: - onboardingRequest: - contentType: application/json + $ref: "#/components/schemas/OnboardingPaRequest" responses: "200": description: OK @@ -631,20 +609,9 @@ paths: operationId: onboardingPspCompletion requestBody: content: - multipart/form-data: + application/json: schema: - required: - - contract - type: object - properties: - onboardingRequest: - $ref: "#/components/schemas/OnboardingPspRequest" - contract: - format: binary - type: string - encoding: - onboardingRequest: - contentType: application/json + $ref: "#/components/schemas/OnboardingPspRequest" responses: "200": description: OK @@ -1438,6 +1405,8 @@ components: type: string legalRegisterName: type: string + longTermPayments: + type: boolean manager: type: boolean managerAuthorized: @@ -2027,6 +1996,8 @@ components: type: string legalRegisterName: type: string + longTermPayments: + type: boolean abiCode: type: string vatNumberGroup: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java index 7fed09fb1..9817b6dbe 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java @@ -33,7 +33,6 @@ import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.extensions.Extension; import org.eclipse.microprofile.openapi.annotations.tags.Tag; -import org.jboss.resteasy.reactive.PartType; import org.jboss.resteasy.reactive.RestForm; import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext; @@ -172,21 +171,12 @@ public Uni onboardingPsp(@Valid OnboardingPspRequest onboard @POST @Tag(name = "Onboarding Controller") @Tag(name = "internal-v1") - @Consumes(MediaType.MULTIPART_FORM_DATA) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Uni onboardingCompletion( - @NotNull @RestForm("contract") File file, - @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingDefaultRequest onboardingRequest, - @Context ResteasyReactiveRequestContext ctx, - @Context SecurityContext securityContext) { - - return readUserIdFromToken(securityContext) - .onItem() - .transformToUni( - userId -> onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file))); + public Uni onboardingCompletion(@Valid OnboardingDefaultRequest onboardingRequest, @Context SecurityContext ctx) { + return readUserIdFromToken(ctx) + .onItem().transformToUni(userId -> onboardingService + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( @@ -197,21 +187,12 @@ public Uni onboardingCompletion( @Path("/pa/completion") @Tag(name = "Onboarding Controller") @Tag(name = "internal-v1") - @Consumes(MediaType.MULTIPART_FORM_DATA) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Uni onboardingPaCompletion( - @NotNull @RestForm("contract") File file, - @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingPaRequest onboardingRequest, - @Context ResteasyReactiveRequestContext ctx, - @Context SecurityContext securityContext) { - - return readUserIdFromToken(securityContext) - .onItem() - .transformToUni( - userId -> onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file))); + public Uni onboardingPaCompletion(@Valid OnboardingPaRequest onboardingRequest, @Context SecurityContext ctx) { + return readUserIdFromToken(ctx) + .onItem().transformToUni(userId -> onboardingService + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( @@ -250,21 +231,12 @@ public Uni onboardingPspImport(@Valid OnboardingImportPspReq @Path("/psp/completion") @Tag(name = "Onboarding Controller") @Tag(name = "internal-v1") - @Consumes(MediaType.MULTIPART_FORM_DATA) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Uni onboardingPspCompletion( - @NotNull @RestForm("contract") File file, - @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingPspRequest onboardingRequest, - @Context ResteasyReactiveRequestContext ctx, - @Context SecurityContext securityContext) { - - return readUserIdFromToken(securityContext) - .onItem() - .transformToUni( - userId -> onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file))); + public Uni onboardingPspCompletion(@Valid OnboardingPspRequest onboardingRequest, @Context SecurityContext ctx) { + return readUserIdFromToken(ctx) + .onItem().transformToUni(userId -> onboardingService + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( @@ -280,7 +252,7 @@ public Uni onboardingPspCompletion( public Uni onboardingPgCompletion(@Valid OnboardingPgRequest onboardingRequest, @Context SecurityContext ctx) { return readUserIdFromToken(ctx) .onItem().transformToUni(userId -> onboardingService - .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers(), null)); + .onboardingPgCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java index 25f6add6b..2e3d16a8f 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java @@ -9,5 +9,6 @@ public class BusinessData { private String businessRegisterNumber; private String legalRegisterNumber; private String legalRegisterName; + private boolean longTermPayments; } \ No newline at end of file diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java index 918790ac4..d0d6a4603 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java @@ -20,6 +20,7 @@ public Uni customValidation(Product product) { onboarding.getInstitution().getTaxCode(), onboarding.getProductId()), DEFAULT_ERROR.getCode()); } - return Uni.createFrom().item(onboarding); + + return super.customValidation(product); } } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java index fada31e9e..b2878474e 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java @@ -1,7 +1,10 @@ package it.pagopa.selfcare.onboarding.entity.registry; import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.common.Origin; +import it.pagopa.selfcare.onboarding.common.WorkflowType; import it.pagopa.selfcare.onboarding.entity.Onboarding; +import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.product.entity.Product; public class RegistryManagerSELC extends BaseRegistryManager { @@ -11,12 +14,28 @@ public RegistryManagerSELC(Onboarding onboarding) { } public Object retrieveInstitution() { - return Uni.createFrom().item(new Object()); + setDefaultOriginAndOriginId(); + return Uni.createFrom().item(new Object()); + } + + private void setDefaultOriginAndOriginId() { + onboarding.getInstitution().setOriginId(onboarding.getInstitution().getTaxCode()); + onboarding.getInstitution().setOrigin(Origin.SELC); } @Override public Uni customValidation(Product product) { - return Uni.createFrom().item(onboarding); + if (isWorkflowTypeAllowed(onboarding.getWorkflowType())) { + return Uni.createFrom().item(onboarding); + } + + return Uni.createFrom().failure(new InvalidRequestException("Invalid workflow type for origin SELC")); + } + + protected boolean isWorkflowTypeAllowed(WorkflowType workflowType) { + return workflowType == WorkflowType.FOR_APPROVE || + workflowType == WorkflowType.IMPORT || + workflowType == WorkflowType.FOR_APPROVE_PT; } @Override diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java index 29fdd61e1..488be2e3a 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java @@ -35,7 +35,10 @@ Uni onboardingImport( boolean forceImport); Uni onboardingCompletion( - Onboarding onboarding, List userRequests, FormItem formItem); + Onboarding onboarding, List userRequests); + + Uni onboardingPgCompletion( + Onboarding onboarding, List userRequests); Uni onboardingAggregationCompletion( Onboarding onboarding, 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 5dd543902..f0325855a 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 @@ -4,12 +4,8 @@ import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_PAGOPA; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; import static it.pagopa.selfcare.onboarding.util.ErrorMessage.*; -import static it.pagopa.selfcare.onboarding.util.Utils.CONTRACT_FILENAME_FUNC; import static it.pagopa.selfcare.product.utils.ProductUtils.validRoles; -import eu.europa.esig.dss.enumerations.DigestAlgorithm; -import eu.europa.esig.dss.model.DSSDocument; -import eu.europa.esig.dss.model.FileDocument; import io.quarkus.logging.Log; import io.quarkus.mongodb.panache.common.reactive.Panache; import io.quarkus.mongodb.panache.reactive.ReactivePanacheQuery; @@ -54,7 +50,7 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; -import java.io.File; + import java.io.IOException; import java.nio.file.Files; import java.time.LocalDateTime; @@ -63,6 +59,7 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.bson.Document; @@ -241,12 +238,22 @@ public Uni onboardingUsers( */ @Override public Uni onboardingCompletion( - Onboarding onboarding, List userRequests, FormItem formItem) { + Onboarding onboarding, List userRequests) { + onboarding.setWorkflowType(WorkflowType.CONFIRMATION); + onboarding.setStatus(OnboardingStatus.REQUEST); + + return fillUsersAndOnboarding( + onboarding, userRequests, null, TIMEOUT_ORCHESTRATION_RESPONSE, false); + } + + @Override + public Uni onboardingPgCompletion( + Onboarding onboarding, List userRequests) { onboarding.setWorkflowType(WorkflowType.CONFIRMATION); onboarding.setStatus(OnboardingStatus.PENDING); - return fillUsersAndOnboardingCompletion( - onboarding, userRequests, TIMEOUT_ORCHESTRATION_RESPONSE, formItem); + return fillUsersAndOnboarding( + onboarding, userRequests, null, TIMEOUT_ORCHESTRATION_RESPONSE, false); } @Override @@ -290,21 +297,9 @@ private Uni fillUsersAndOnboarding( return verifyExistingOnboarding(onboarding, isAggregatesIncrement) .onItem() - .transformToUni(product -> handleOnboarding(onboarding, userRequests, aggregates, timeout, product, null)); + .transformToUni(product -> handleOnboarding(onboarding, userRequests, aggregates, timeout, product)); } - private Uni fillUsersAndOnboardingCompletion( - Onboarding onboarding, - List userRequests, - String timeout, - FormItem formItem) { - - onboarding.setCreatedAt(LocalDateTime.now()); - - return verifyExistingOnboarding(onboarding, false) - .onItem() - .transformToUni(product -> handleOnboarding(onboarding, userRequests, null, timeout, product, formItem)); - } private Uni verifyExistingOnboarding(Onboarding onboarding, boolean isAggregatesIncrement) { return getProductByOnboarding(onboarding) @@ -323,8 +318,7 @@ private Uni handleOnboarding( List userRequests, List aggregates, String timeout, - Product product, - FormItem formItem) { + Product product) { return Uni.createFrom() .item(registryResourceFactory.create(onboarding)) @@ -332,7 +326,7 @@ private Uni handleOnboarding( .invoke(registryManager -> registryManager.setResource(registryManager.retrieveInstitution())) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .onItem() - .transformToUni(registryManager -> validateAndPersistOnboarding(registryManager, onboarding, userRequests, aggregates, product, formItem, timeout)); + .transformToUni(registryManager -> validateAndPersistOnboarding(registryManager, onboarding, userRequests, aggregates, product, timeout)); } private Uni validateAndPersistOnboarding( @@ -341,7 +335,6 @@ private Uni validateAndPersistOnboarding( List userRequests, List aggregates, Product product, - FormItem formItem, String timeout) { return registryManager.isValid() @@ -352,21 +345,12 @@ private Uni validateAndPersistOnboarding( .onItem() .transformToUni(current -> persistOnboarding(onboarding, userRequests, product, aggregates)) .onItem() - .transformToUni(persistedOnboarding -> handleSignedContractAndToken(persistedOnboarding, formItem)) - .onItem() .transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, orchestrationApi.apiStartOnboardingOrchestrationGet(currentOnboarding.getId(), timeout))) .onItem() .transform(onboardingMapper::toResponse); } - private Uni handleSignedContractAndToken(Onboarding persistedOnboarding, FormItem formItem) { - return Optional.ofNullable(formItem) - .map(item -> uploadSignedContractAndUpdateToken(persistedOnboarding, item) - .map(ignore -> persistedOnboarding)) - .orElse(Uni.createFrom().item(persistedOnboarding)); - } - /** * This method checks whether the product and any parent have already been onboarded for the * provided institution. In the case where we are in the aggregate increment flow, the product on @@ -1252,23 +1236,10 @@ private Uni uploadSignedContractAndUpdateToken(Onboarding onboarding, Fo String onboardingId = onboarding.getId(); return retrieveToken(onboardingId) - .onFailure() - .recoverWithUni(() -> createToken(onboarding, onboardingId, formItem)) - .onItem() - .call(this::persistToken) .onItem() .transformToUni(token -> processAndUploadFile(token, onboardingId, formItem)); } - private Uni createToken(Onboarding onboarding, String onboardingId, FormItem formItem) { - return Uni.createFrom() - .item(() -> createToken(onboarding, onboardingId, formItem.getFile())); - } - - private Uni persistToken(Token tokenPersisted) { - return Panache.withTransaction(() -> Token.persist(tokenPersisted)); - } - private Uni processAndUploadFile(Token token, String onboardingId, FormItem formItem) { return Uni.createFrom() .item(Unchecked.supplier(() -> uploadFileToAzure(token, onboardingId, formItem))) @@ -1303,37 +1274,6 @@ private Uni updateTokenWithFilePath(String filepath, Token token) { .replaceWith(filepath); } - private Token createToken(Onboarding onboarding, String onboardingId, File file) { - Product product = productService.getProduct(onboarding.getProductId()); - final String filename = CONTRACT_FILENAME_FUNC.apply(PDF_FORMAT_FILENAME, product.getTitle()); - DSSDocument document = new FileDocument(file); - String digest = document.getDigest(DigestAlgorithm.SHA256); - Token token = new Token(); - token.setCreatedAt(LocalDateTime.now()); - token.setOnboardingId(onboardingId); - token.setId(onboardingId); - token.setProductId(onboarding.getProductId()); - token.setUpdatedAt(LocalDateTime.now()); - token.setActivatedAt(LocalDateTime.now()); - token.setContractFilename(filename); - token.setContractTemplate(getContractTemplatePath(product, onboarding)); - token.setContractVersion(getContractTemplateVersion(product, onboarding)); - token.setChecksum(digest); - token.setType(TokenType.INSTITUTION); - return token; - } - - private String getContractTemplatePath(Product product, Onboarding onboarding) { - return product - .getInstitutionContractTemplate(InstitutionUtils.getCurrentInstitutionType(onboarding)) - .getContractTemplatePath(); - } - - private String getContractTemplateVersion(Product product, Onboarding onboarding) { - return product - .getInstitutionContractTemplate(InstitutionUtils.getCurrentInstitutionType(onboarding)) - .getContractTemplateVersion(); - } private String getFileExtension(String name) { String[] parts = name.split("\\."); diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java index 949a727f2..93aef5a9a 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java @@ -576,77 +576,96 @@ void approve() { @Test @TestSecurity(user = "userJwt") - void onboardingCompletionMultipart() { + void onboardingCompletion() { - // Mock della risposta del servizio - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) - .thenReturn(Uni.createFrom().item(new OnboardingResponse())); + OnboardingDefaultRequest onboardingDefaultRequest = dummyOnboardingDefaultRequest(); - // Creazione di un file fittizio per il test - File testFile = new File("src/test/resources/application.properties"); + Mockito.when(onboardingService.onboardingCompletion(any(), any())) + .thenReturn(Uni.createFrom().item(new OnboardingResponse())); - // Esecuzione della richiesta simulata given() - .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", new OnboardingDefaultRequest()) // Aggiunta del JSON come stringa - .contentType("multipart/form-data") .when() + .body(onboardingDefaultRequest) + .contentType(ContentType.JSON) .post("/completion") .then() - .statusCode(200); // Verifica del codice di stato + .statusCode(200); - // Verifica che il servizio sia stato chiamato correttamente - Mockito.verify(onboardingService, times(1)).onboardingCompletion(any(), any(), any()); + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + assertEquals(InstitutionType.PRV, captor.getValue().getInstitution().getInstitutionType()); + } + + private static OnboardingDefaultRequest dummyOnboardingDefaultRequest() { + OnboardingDefaultRequest onboardingDefaultRequest = new OnboardingDefaultRequest(); + InstitutionBaseRequest institution = new InstitutionBaseRequest(); + onboardingDefaultRequest.setProductId("productId"); + onboardingDefaultRequest.setUsers(List.of(userDTO)); + institution.setTaxCode("taxCode"); + institution.setDigitalAddress("digital@address.it"); + institution.setOrigin(Origin.SELC); + institution.setInstitutionType(InstitutionType.PRV); + onboardingDefaultRequest.setInstitution(institution); + return onboardingDefaultRequest; } @Test @TestSecurity(user = "userJwt") - void onboardingPaCompletionMultipart() { + void onboardingPaCompletion() { - // Mock della risposta del servizio - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) - .thenReturn(Uni.createFrom().item(new OnboardingResponse())); + OnboardingPaRequest onboardingPaRequest = dummyOnboardingPa(); - // Creazione di un file fittizio per il test - File testFile = new File("src/test/resources/application.properties"); + Mockito.when(onboardingService.onboardingCompletion(any(), any())) + .thenReturn(Uni.createFrom().item(new OnboardingResponse())); - // Esecuzione della richiesta simulata given() - .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", new OnboardingPaRequest()) // Aggiunta del JSON come stringa - .contentType("multipart/form-data") .when() + .body(onboardingPaRequest) + .contentType(ContentType.JSON) .post("/pa/completion") .then() - .statusCode(200); // Verifica del codice di stato + .statusCode(200); - // Verifica che il servizio sia stato chiamato correttamente - Mockito.verify(onboardingService, times(1)).onboardingCompletion(any(), any(), any()); + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + assertEquals(InstitutionType.PA, captor.getValue().getInstitution().getInstitutionType()); } @Test @TestSecurity(user = "userJwt") - void onboardingPspCompletionMultipart() { + void onboardingPspCompletion() { - // Mock della risposta del servizio - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) - .thenReturn(Uni.createFrom().item(new OnboardingResponse())); + OnboardingPspRequest onboardingPspRequest = getOnboardingPspRequest(); - // Creazione di un file fittizio per il test - File testFile = new File("src/test/resources/application.properties"); + Mockito.when(onboardingService.onboardingCompletion(any(), any())) + .thenReturn(Uni.createFrom().item(new OnboardingResponse())); - // Esecuzione della richiesta simulata given() - .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", new OnboardingPspRequest()) // Aggiunta del JSON come stringa - .contentType("multipart/form-data") .when() + .body(onboardingPspRequest) + .contentType(ContentType.JSON) .post("/psp/completion") .then() - .statusCode(200); // Verifica del codice di stato + .statusCode(200); - // Verifica che il servizio sia stato chiamato correttamente - Mockito.verify(onboardingService, times(1)).onboardingCompletion(any(), any(), any()); + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + assertEquals(InstitutionType.PSP, captor.getValue().getInstitution().getInstitutionType()); + } + + private static OnboardingPspRequest getOnboardingPspRequest() { + OnboardingPspRequest onboardingPspRequest = new OnboardingPspRequest(); + InstitutionPspRequest institution = new InstitutionPspRequest(); + onboardingPspRequest.setProductId("productId"); + onboardingPspRequest.setUsers(List.of(userDTO)); + institution.setTaxCode("taxCode"); + institution.setDigitalAddress("digital@address.it"); + institution.setOrigin(Origin.SELC); + institution.setInstitutionType(InstitutionType.PSP); + institution.setPaymentServiceProvider(new PaymentServiceProviderRequest()); + institution.setDataProtectionOfficer(new DataProtectionOfficerRequest()); + onboardingPspRequest.setInstitution(institution); + return onboardingPspRequest; } @Test @@ -660,7 +679,7 @@ void onboardingCompletePg() { onboardingPgRequest.setDigitalAddress("digital@address.it"); onboardingPgRequest.setOrigin(Origin.INFOCAMERE); - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) + Mockito.when(onboardingService.onboardingPgCompletion(any(), any())) .thenReturn(Uni.createFrom().item(new OnboardingResponse())); given() @@ -672,7 +691,7 @@ void onboardingCompletePg() { .statusCode(200); ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); - Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any(), any()); + Mockito.verify(onboardingService, times(1)).onboardingPgCompletion(captor.capture(), any()); assertEquals(InstitutionType.PG, captor.getValue().getInstitution().getInstitutionType()); } @@ -1014,6 +1033,8 @@ private OnboardingPaRequest dummyOnboardingPa() { billingPaRequest.setRecipientCode("code"); billingPaRequest.setVatNumber("vat"); + institution.setInstitutionType(InstitutionType.PA); + onboardingPaValid.setUsers(List.of(userDTO)); onboardingPaValid.setInstitution(institution); onboardingPaValid.setBilling(billingPaRequest); diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java new file mode 100644 index 000000000..6295545f6 --- /dev/null +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java @@ -0,0 +1,66 @@ +package it.pagopa.selfcare.onboarding.entity.registry; + +import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.common.Origin; +import it.pagopa.selfcare.onboarding.common.WorkflowType; +import it.pagopa.selfcare.onboarding.entity.Institution; +import it.pagopa.selfcare.onboarding.entity.Onboarding; +import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; +import it.pagopa.selfcare.product.entity.Product; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class RegistryManagerSELCTest { + + private Onboarding onboarding; + private RegistryManagerSELC registryManagerSELC; + + @BeforeEach + void setUp() { + onboarding = mock(Onboarding.class); + registryManagerSELC = new RegistryManagerSELC(onboarding); + } + + @Test + void retrieveInstitution_shouldSetDefaultOriginAndOriginId() { + var institution = mock(Institution.class); + when(onboarding.getInstitution()).thenReturn(institution); + when(institution.getTaxCode()).thenReturn("123456"); + + registryManagerSELC.retrieveInstitution(); + + verify(institution).setOriginId("123456"); + verify(institution).setOrigin(Origin.SELC); + } + + @ParameterizedTest + @EnumSource(value = WorkflowType.class, names = {"FOR_APPROVE", "IMPORT", "FOR_APPROVE_PT"}) + void customValidation_shouldReturnOnboarding_whenWorkflowTypeAllowed(WorkflowType workflowType) { + when(onboarding.getWorkflowType()).thenReturn(workflowType); + + Uni result = registryManagerSELC.customValidation(mock(Product.class)); + + assertEquals(onboarding, result.await().indefinitely()); + } + + @Test + void customValidation_shouldThrowInvalidRequestException_whenWorkflowTypeNotAllowed() { + when(onboarding.getWorkflowType()).thenReturn(WorkflowType.CONFIRMATION); + + Uni result = registryManagerSELC.customValidation(mock(Product.class)); + + assertThrows(InvalidRequestException.class, () -> result.await().indefinitely()); + } + + @Test + void isValid_shouldReturnTrue() { + Uni result = registryManagerSELC.isValid(); + + assertTrue(result.await().indefinitely()); + } +} \ No newline at end of file diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java index f7bca1f99..fcf5eeafb 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java @@ -277,6 +277,9 @@ void onboardingIncrement_Ok(UniAsserter asserter) { institutionBaseRequest.setInstitutionType(InstitutionType.PA); institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setOriginId("originId"); + institutionBaseRequest.setOrigin(Origin.IPA); + institutionBaseRequest.setDescription(DESCRIPTION_FIELD); + institutionBaseRequest.setDigitalAddress(DIGITAL_ADDRESS_FIELD); onboardingRequest.setInstitution(institutionBaseRequest); Billing billing = new Billing(); billing.setRecipientCode("recCode"); @@ -294,6 +297,12 @@ void onboardingIncrement_Ok(UniAsserter asserter) { mockVerifyAllowedMap(onboardingRequest.getInstitution().getTaxCode(), onboardingRequest.getProductId(), asserter); mockVerifyOnboardingNotEmpty(asserter); + InstitutionResource institutionResource = new InstitutionResource(); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institutionResource.setDescription(DESCRIPTION_FIELD); + when(institutionRegistryProxyApi.findInstitutionUsingGET(any(), any(), any())).thenReturn(Uni.createFrom().item(institutionResource)); + + UOResource uoResource = new UOResource(); uoResource.setCodiceFiscaleSfe("codSfe"); uoResource.setCodiceIpa("originId"); @@ -317,6 +326,9 @@ private static OnboardingResponse getOnboardingResponse() { institution.setInstitutionType("PA"); institution.setOriginId("originId"); institution.setTaxCode("taxCode"); + institution.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institution.setDescription(DESCRIPTION_FIELD); + institution.setOrigin(Origin.IPA); onboardingResponse.setInstitution(institution); UserOnboardingResponse userOnboardingResponse = new UserOnboardingResponse(); @@ -485,6 +497,7 @@ void onboarding_Onboarding_addParentDescriptionForAooOrUo_Aoo(UniAsserter assert institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setSubunitType(InstitutionPaSubunitType.AOO); institutionBaseRequest.setSubunitCode("SubunitCode"); + institutionBaseRequest.setOrigin(Origin.IPA); request.setInstitution(institutionBaseRequest); mockPersistOnboarding(asserter); @@ -594,6 +607,7 @@ void onboarding_Onboarding_addParentDescriptionForAooOrUo_Uo(UniAsserter asserte institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setSubunitType(InstitutionPaSubunitType.UO); institutionBaseRequest.setSubunitCode("SubunitCode"); + institutionBaseRequest.setOrigin(Origin.IPA); request.setInstitution(institutionBaseRequest); mockPersistOnboarding(asserter); @@ -781,6 +795,33 @@ void onboarding_PRV(UniAsserter asserter) { }); } + @Test + @RunOnVertxContext + void onboarding_SELC_Forbidden_WorkflowType(UniAsserter asserter) { + Onboarding request = new Onboarding(); + List users = List.of(manager); + request.setProductId(PROD_PAGOPA.getValue()); + Institution institutionBaseRequest = new Institution(); + institutionBaseRequest.setDescription("name"); + institutionBaseRequest.setDigitalAddress("pec"); + institutionBaseRequest.setInstitutionType(InstitutionType.GSP); + institutionBaseRequest.setTaxCode("taxCode"); + request.setInstitution(institutionBaseRequest); + mockPersistOnboarding(asserter); + + asserter.execute(() -> when(userRegistryApi.updateUsingPATCH(any(), any())) + .thenReturn(Uni.createFrom().item(Response.noContent().build()))); + + + mockSimpleSearchPOSTAndPersist(asserter); + mockSimpleProductValidAssert(request.getProductId(), false, asserter); + mockVerifyOnboardingNotFound(); + mockVerifyAllowedMap(request.getInstitution().getTaxCode(), request.getProductId(), asserter); + + // onboardingCompletion will set the workflowType to COMPLETION, which is not allowed for GSP + asserter.assertFailedWith(() -> onboardingService.onboardingCompletion(request, users), InvalidRequestException.class); + } + @Test @RunOnVertxContext void onboarding_PRV_Bad_Request(UniAsserter asserter) { @@ -1143,7 +1184,7 @@ void onboardingPsp_whenUserFoundedAndWillNotUpdateAndProductHasParent(UniAsserte Institution dummyInstitution() { Institution institution = new Institution(); - institution.setInstitutionType(InstitutionType.SA); + institution.setInstitutionType(InstitutionType.GSP); return institution; } @@ -1250,7 +1291,7 @@ void onboarding_whenUserFoundAndWillNotUpdate(UniAsserter asserter) { Onboarding request = new Onboarding(); List users = List.of(wrongManager); - request.setProductId(PROD_INTEROP.getValue()); + request.setProductId(PROD_PAGOPA.getValue()); Institution institutionPspRequest = new Institution(); institutionPspRequest.setInstitutionType(InstitutionType.GSP); request.setInstitution(institutionPspRequest); @@ -1291,7 +1332,7 @@ void onboarding_whenUserFoundedAndWillUpdateMailUuid(UniAsserter asserter) { Onboarding request = new Onboarding(); List users = List.of(newManager); - request.setProductId(PROD_INTEROP.getValue()); + request.setProductId(PROD_IO.getValue()); Institution institutionPspRequest = new Institution(); institutionPspRequest.setInstitutionType(InstitutionType.GSP); request.setInstitution(institutionPspRequest); @@ -1349,6 +1390,12 @@ void onboarding_whenUserNotFoundedAndWillSave(UniAsserter asserter) { mockVerifyOnboardingNotFound(); mockVerifyAllowedMap(request.getInstitution().getTaxCode(), request.getProductId(), asserter); + InstitutionResource institutionResource = new InstitutionResource(); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institutionResource.setDescription(DESCRIPTION_FIELD); + when(institutionRegistryProxyApi.findInstitutionUsingGET(any(), any(), any())).thenReturn(Uni.createFrom().item(institutionResource)); + + asserter.execute(() -> when(Onboarding.persistOrUpdate(any(List.class))) .thenAnswer(arg -> { List onboardings = (List) arg.getArguments()[0]; @@ -1371,8 +1418,10 @@ void onboarding_whenUserNotFoundedAndWillSave(UniAsserter asserter) { @RunOnVertxContext void onboarding_shouldThrowExceptionIfUserRegistryFails(UniAsserter asserter) { Onboarding onboardingDefaultRequest = new Onboarding(); - onboardingDefaultRequest.setInstitution(dummyInstitution()); - onboardingDefaultRequest.setProductId(PROD_INTEROP.getValue()); + Institution institution = new Institution(); + institution.setInstitutionType(InstitutionType.GSP); + onboardingDefaultRequest.setInstitution(institution); + onboardingDefaultRequest.setProductId(PROD_PAGOPA.getValue()); List users = List.of(manager); mockPersistOnboarding(asserter); @@ -2010,11 +2059,17 @@ void onboarding_Onboarding_importPSP(UniAsserter asserter) { void onboarding_aggregationCompletion(UniAsserter asserter) { Onboarding request = new Onboarding(); List users = List.of(manager); - request.setProductId(PROD_IO.getValue()); + request.setProductId(PROD_INTEROP.getValue()); Institution institutionBaseRequest = new Institution(); institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setInstitutionType(InstitutionType.SA); + institutionBaseRequest.setOrigin(Origin.IPA); + institutionBaseRequest.setDescription(DESCRIPTION_FIELD); + institutionBaseRequest.setDigitalAddress(DIGITAL_ADDRESS_FIELD); request.setInstitution(institutionBaseRequest); + Billing billing = new Billing(); + billing.setRecipientCode("recipientCode"); + request.setBilling(billing); mockPersistOnboarding(asserter); mockPersistToken(asserter); @@ -2029,6 +2084,8 @@ void onboarding_aggregationCompletion(UniAsserter asserter) { InstitutionResource institutionResource = new InstitutionResource(); institutionResource.setCategory("L37"); + institutionResource.setDescription(DESCRIPTION_FIELD); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) .thenReturn(Uni.createFrom().item(institutionResource))); @@ -2046,12 +2103,15 @@ void onboarding_aggregationCompletion(UniAsserter asserter) { @RunOnVertxContext void onboardingCompletion(UniAsserter asserter) { Onboarding request = new Onboarding(); - Product product = createDummyProduct(PROD_IO.getValue(), false); + Product product = createDummyProduct(PROD_INTEROP.getValue(), false); List users = List.of(manager); - request.setProductId(PROD_IO.getValue()); + request.setProductId(PROD_INTEROP.getValue()); Institution institutionBaseRequest = new Institution(); institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setInstitutionType(InstitutionType.SA); + institutionBaseRequest.setOrigin(Origin.IPA); + institutionBaseRequest.setDescription(DESCRIPTION_FIELD); + institutionBaseRequest.setDigitalAddress(DIGITAL_ADDRESS_FIELD); request.setInstitution(institutionBaseRequest); mockPersistOnboarding(asserter); @@ -2069,14 +2129,53 @@ void onboardingCompletion(UniAsserter asserter) { InstitutionResource institutionResource = new InstitutionResource(); institutionResource.setCategory("L37"); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institutionResource.setDescription(DESCRIPTION_FIELD); asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) .thenReturn(Uni.createFrom().item(institutionResource))); - final String filepath = "upload-file-path"; - when(azureBlobClient.uploadFile(any(), any(), any())).thenReturn(filepath); - mockUpdateToken(asserter, filepath); + asserter.assertThat(() -> onboardingService.onboardingCompletion(request, users), Assertions::assertNotNull); + + asserter.execute(() -> { + PanacheMock.verify(Onboarding.class).persist(any(Onboarding.class), any()); + PanacheMock.verify(Onboarding.class).persistOrUpdate(any(List.class)); + PanacheMock.verify(Onboarding.class).find(any(Document.class)); + PanacheMock.verifyNoMoreInteractions(Onboarding.class); + }); + } + + @Test + @RunOnVertxContext + void onboardingPgCompletion(UniAsserter asserter) { + Onboarding request = new Onboarding(); + Product product = createDummyProduct(PROD_PN.getValue(), false); + List users = List.of(manager); + request.setProductId(PROD_PN.getValue()); + Institution institutionBaseRequest = new Institution(); + institutionBaseRequest.setTaxCode("taxCode"); + institutionBaseRequest.setInstitutionType(InstitutionType.PG); + institutionBaseRequest.setOrigin(Origin.INFOCAMERE); + request.setInstitution(institutionBaseRequest); + + mockPersistOnboarding(asserter); + mockPersistToken(asserter); + + mockSimpleSearchPOSTAndPersist(asserter); + mockSimpleProductValidAssert(request.getProductId(), false, asserter); + mockVerifyOnboardingNotFound(); + mockVerifyAllowedMap(request.getInstitution().getTaxCode(), request.getProductId(), asserter); + + asserter.execute(() -> when(productService.getProduct(any())).thenReturn(product)); + + asserter.execute(() -> when(userRegistryApi.updateUsingPATCH(any(), any())) + .thenReturn(Uni.createFrom().item(Response.noContent().build()))); + + InstitutionResource institutionResource = new InstitutionResource(); + institutionResource.setCategory("L37"); + asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) + .thenReturn(Uni.createFrom().item(institutionResource))); - asserter.assertThat(() -> onboardingService.onboardingCompletion(request, users, TEST_FORM_ITEM), Assertions::assertNotNull); + asserter.assertThat(() -> onboardingService.onboardingPgCompletion(request, users), Assertions::assertNotNull); asserter.execute(() -> { PanacheMock.verify(Onboarding.class).persist(any(Onboarding.class), any()); diff --git a/apps/pom.xml b/apps/pom.xml index c2ee77de7..da50b1918 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -13,7 +13,7 @@ pom - 0.6.1 + 0.6.2 diff --git a/libs/onboarding-sdk-azure-storage/pom.xml b/libs/onboarding-sdk-azure-storage/pom.xml index 3f411ab4f..38519a1ba 100644 --- a/libs/onboarding-sdk-azure-storage/pom.xml +++ b/libs/onboarding-sdk-azure-storage/pom.xml @@ -6,7 +6,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java index 738dde5f1..c4c307179 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java @@ -18,5 +18,7 @@ public interface AzureBlobClient { BlobProperties getProperties(String filePath); + List getFiles(); + List getFiles(String path); } diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java index 2bb33696e..33fa207a8 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java @@ -33,8 +33,8 @@ public AzureBlobClientDefault(String connectionString, String containerName) { log.trace("it.pagopa.selfcare.azurestorage.AzureBlobClient.it.pagopa.selfcare.azurestorage.AzureBlobClient"); this.containerName = containerName; this.blobClient = new BlobServiceClientBuilder() - .connectionString(connectionString) - .buildClient(); + .connectionString(connectionString) + .buildClient(); } @Override @@ -155,21 +155,34 @@ public BlobProperties getProperties(String filePath) { } } + @Override + public List getFiles() { + log.debug("START - getFiles"); + List listOfResource = new ArrayList<>(); + + final BlobContainerClient blobContainer = blobClient.getBlobContainerClient(containerName); + blobContainer.listBlobs().forEach(blob -> listOfResource.add(blob.getName())); + + log.debug("Results: {}", listOfResource.size()); + log.debug("END - getFiles"); + return listOfResource; + } + @Override public List getFiles(String path) { - log.debug("START - getFiles by given path: {}", path); - String sanitizePath = StringUtils.replace(path, "\n", StringUtils.EMPTY).replace("\r", StringUtils.EMPTY); + log.debug("START - getFiles"); List listOfResource = new ArrayList<>(); final BlobContainerClient blobContainer = blobClient.getBlobContainerClient(containerName); - if (StringUtils.isNotEmpty(sanitizePath)) { + if (StringUtils.isNotEmpty(path)) { + String sanitizePath = StringUtils.replace(path, "\n", StringUtils.EMPTY).replace("\r", StringUtils.EMPTY); + log.debug("getFiles by given path: {}", sanitizePath); ListBlobsOptions options = new ListBlobsOptions() .setPrefix(sanitizePath) .setDetails(new BlobListDetails() .setRetrieveDeletedBlobs(true) .setRetrieveSnapshots(true)); - blobContainer.listBlobs(options, null).forEach(blob -> listOfResource.add(blob.getName())); } diff --git a/libs/onboarding-sdk-common/pom.xml b/libs/onboarding-sdk-common/pom.xml index 87f5bee73..60028f5ab 100644 --- a/libs/onboarding-sdk-common/pom.xml +++ b/libs/onboarding-sdk-common/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom onboarding-sdk-common diff --git a/libs/onboarding-sdk-crypto/pom.xml b/libs/onboarding-sdk-crypto/pom.xml index 54f64ab77..8d5108755 100644 --- a/libs/onboarding-sdk-crypto/pom.xml +++ b/libs/onboarding-sdk-crypto/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom onboarding-sdk-crypto diff --git a/libs/onboarding-sdk-pom/pom.xml b/libs/onboarding-sdk-pom/pom.xml index 4e9d12358..c227d2d50 100644 --- a/libs/onboarding-sdk-pom/pom.xml +++ b/libs/onboarding-sdk-pom/pom.xml @@ -5,7 +5,7 @@ onboarding-sdk-pom pom onboarding-sdk-pom - 0.6.1 + 0.6.2 17 diff --git a/libs/onboarding-sdk-product/pom.xml b/libs/onboarding-sdk-product/pom.xml index dc8dcfd9d..058a35163 100644 --- a/libs/onboarding-sdk-product/pom.xml +++ b/libs/onboarding-sdk-product/pom.xml @@ -4,12 +4,12 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom onboarding-sdk-product onboarding-sdk-product - 0.6.1 + 0.6.2 2.15.2 diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 395c29a94..02db09fe6 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -19,7 +19,7 @@ **/utils/**, **/*Constant*, **/*Config.java, **/error/**, **/filter/**, org/** https://sonarcloud.io - 0.6.1 + 0.6.2