Skip to content

Commit

Permalink
Merge branch 'main' into feature/SELC-5228
Browse files Browse the repository at this point in the history
  • Loading branch information
pierpaolodidato89 authored Jul 4, 2024
2 parents 971b257 + ab77446 commit f8e9c2f
Show file tree
Hide file tree
Showing 28 changed files with 905 additions and 22 deletions.
3 changes: 2 additions & 1 deletion apps/onboarding-functions/host.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
},
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
"hubName": "JavaTestHub",
"maxConcurrentActivityFunctions": 10
}
},
"extensionBundle": {
Expand Down
2 changes: 1 addition & 1 deletion apps/onboarding-functions/src/main/docker/Dockerfile.jvm
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
# accessed directly. (example: "foo.example.com,bar.example.com")
#
###
FROM registry.access.redhat.com/ubi8/openjdk-11:1.15
FROM registry.access.redhat.com/ubi8/openjdk-11:1.15@sha256:5d3a4fbc094c2c29bf7ee0b9715e08d156d8c86a9d56f5e974439077756891f5

ENV LANGUAGE='en_US:en'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
# accessed directly. (example: "foo.example.com,bar.example.com")
#
###
FROM registry.access.redhat.com/ubi8/openjdk-11:1.15
FROM registry.access.redhat.com/ubi8/openjdk-11:1.15@sha256:5d3a4fbc094c2c29bf7ee0b9715e08d156d8c86a9d56f5e974439077756891f5

ENV LANGUAGE='en_US:en'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# docker run -i --rm -p 8080:8080 quarkus/onboarding-functions
#
###
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6@sha256:33931dce809712888d1a8061bfa676963f517daca993984afed3251bc1fb5987
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
# docker run -i --rm -p 8080:8080 quarkus/onboarding-functions
#
###
FROM quay.io/quarkus/quarkus-micro-image:2.0
FROM quay.io/quarkus/quarkus-micro-image:2.0@sha256:c6775a8521dd4f724039f9cb7659f407cc15d7dc32c509f02da2add0f4de154a
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public String emailRegistrationPath(MailTemplatePathConfig config) {

@Override
public String getEmailCompletionPath(MailTemplatePathConfig config) {
return config.completePathAggregate();
return config.completePath();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import it.pagopa.selfcare.onboarding.config.RetryPolicyConfig;
import it.pagopa.selfcare.onboarding.entity.Onboarding;
import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException;
import it.pagopa.selfcare.onboarding.mapper.OnboardingMapper;
import it.pagopa.selfcare.onboarding.service.CompletionService;
import it.pagopa.selfcare.onboarding.service.OnboardingService;
import it.pagopa.selfcare.onboarding.workflow.*;
Expand All @@ -38,14 +39,17 @@ public class OnboardingFunctions {
private final CompletionService completionService;
private final ObjectMapper objectMapper;
private final TaskOptions optionsRetry;
private final OnboardingMapper onboardingMapper;

public OnboardingFunctions(OnboardingService service,
ObjectMapper objectMapper,
RetryPolicyConfig retryPolicyConfig,
CompletionService completionService) {
CompletionService completionService,
OnboardingMapper onboardingMapper) {
this.service = service;
this.objectMapper = objectMapper;
this.completionService = completionService;
this.onboardingMapper = onboardingMapper;
final int maxAttempts = retryPolicyConfig.maxAttempts();
final Duration firstRetryInterval = Duration.ofSeconds(retryPolicyConfig.firstRetryInterval());
RetryPolicy retryPolicy = new RetryPolicy(maxAttempts, firstRetryInterval);
Expand Down Expand Up @@ -139,7 +143,7 @@ public void onboardingsOrchestrator(

switch (onboarding.getWorkflowType()) {
case CONTRACT_REGISTRATION -> workflowExecutor = new WorkflowExecutorContractRegistration(objectMapper, optionsRetry);
case CONTRACT_REGISTRATION_AGGREGATOR -> workflowExecutor = new WorkflowExecutorContractRegistrationAggregator(objectMapper, optionsRetry);
case CONTRACT_REGISTRATION_AGGREGATOR -> workflowExecutor = new WorkflowExecutorContractRegistrationAggregator(objectMapper, optionsRetry, onboardingMapper);
case FOR_APPROVE -> workflowExecutor = new WorkflowExecutorForApprove(objectMapper, optionsRetry);
case FOR_APPROVE_PT -> workflowExecutor = new WorkflowExecutorForApprovePt(objectMapper, optionsRetry);
case CONFIRMATION -> workflowExecutor = new WorkflowExecutorConfirmation(objectMapper, optionsRetry);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.pagopa.selfcare.onboarding.mapper;

import it.pagopa.selfcare.onboarding.dto.OnboardingAggregateOrchestratorInput;
import it.pagopa.selfcare.onboarding.entity.AggregateInstitution;
import it.pagopa.selfcare.onboarding.entity.Institution;
import it.pagopa.selfcare.onboarding.entity.Onboarding;
import org.mapstruct.Mapper;
Expand All @@ -18,6 +19,9 @@ public interface OnboardingMapper {
@Mapping(target = "activatedAt", ignore = true)
Onboarding mapToOnboarding(OnboardingAggregateOrchestratorInput input);

@Mapping(target = "aggregate", expression = "java(mapFromAggregateInstitution(aggregateInstitution))")
OnboardingAggregateOrchestratorInput mapToOnboardingAggregateOrchestratorInput(Onboarding onboarding, AggregateInstitution aggregateInstitution);

/**
* We need to create an explicit method to map the aggregate into the institution field of the new onboarding entity
* because the data related to institutionType and origin must be retrieved from the aggregator,
Expand All @@ -31,4 +35,6 @@ default Institution mapInstitution(Institution aggregate, Institution institutio
}
return aggregate;
}

Institution mapFromAggregateInstitution(AggregateInstitution aggregateInstitution);
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,15 @@ public static AckPayloadRequest readAckPayloadValue(ObjectMapper objectMapper, S
public static boolean isNotInstitutionOnboarding(Onboarding onboarding) {
return !ALLOWED_WORKFLOWS_FOR_INSTITUTION_NOTIFICATIONS.contains(onboarding.getWorkflowType());
}

public static String getOnboardingAggregateString(ObjectMapper objectMapper, OnboardingAggregateOrchestratorInput onboarding) {

String onboardingAggregateString;
try {
onboardingAggregateString = objectMapper.writeValueAsString(onboarding);
} catch (JsonProcessingException e) {
throw new FunctionOrchestratedException(e);
}
return onboardingAggregateString;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

import static it.pagopa.selfcare.onboarding.functions.utils.ActivityName.*;
import static it.pagopa.selfcare.onboarding.utils.Utils.*;

public interface WorkflowExecutor {

Optional<OnboardingStatus> executeRequestState(TaskOrchestrationContext ctx, OnboardingWorkflow onboardingWorkflow);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
package it.pagopa.selfcare.onboarding.workflow;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.microsoft.durabletask.Task;
import com.microsoft.durabletask.TaskOptions;
import com.microsoft.durabletask.TaskOrchestrationContext;
import it.pagopa.selfcare.onboarding.common.OnboardingStatus;
import it.pagopa.selfcare.onboarding.dto.OnboardingAggregateOrchestratorInput;
import it.pagopa.selfcare.onboarding.entity.AggregateInstitution;
import it.pagopa.selfcare.onboarding.entity.Onboarding;
import it.pagopa.selfcare.onboarding.entity.OnboardingWorkflow;
import it.pagopa.selfcare.onboarding.entity.OnboardingWorkflowAggregator;
import it.pagopa.selfcare.onboarding.mapper.OnboardingMapper;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static it.pagopa.selfcare.onboarding.entity.OnboardingWorkflowType.AGGREGATOR;
import static it.pagopa.selfcare.onboarding.functions.utils.ActivityName.*;
import static it.pagopa.selfcare.onboarding.utils.Utils.getOnboardingString;
import static it.pagopa.selfcare.onboarding.utils.Utils.getOnboardingWorkflowString;
import static it.pagopa.selfcare.onboarding.utils.Utils.*;

public record WorkflowExecutorContractRegistrationAggregator(ObjectMapper objectMapper, TaskOptions optionsRetry, OnboardingMapper onboardingMapper) implements WorkflowExecutor {

public record WorkflowExecutorContractRegistrationAggregator(ObjectMapper objectMapper, TaskOptions optionsRetry) implements WorkflowExecutor {

@Override
public Optional<OnboardingStatus> executeRequestState(TaskOrchestrationContext ctx, OnboardingWorkflow onboardingWorkflow) {
String onboardingString = getOnboardingString(objectMapper, onboardingWorkflow.getOnboarding());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@
import it.pagopa.selfcare.onboarding.HttpResponseMessageMock;
import it.pagopa.selfcare.onboarding.common.OnboardingStatus;
import it.pagopa.selfcare.onboarding.common.WorkflowType;
import it.pagopa.selfcare.onboarding.entity.AggregateInstitution;
import it.pagopa.selfcare.onboarding.entity.Institution;
import it.pagopa.selfcare.onboarding.entity.Onboarding;
import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException;
import it.pagopa.selfcare.onboarding.mapper.OnboardingMapper;
import it.pagopa.selfcare.onboarding.service.CompletionService;
import it.pagopa.selfcare.onboarding.service.NotificationEventService;
import it.pagopa.selfcare.onboarding.service.OnboardingService;
Expand Down Expand Up @@ -58,6 +60,9 @@ public class OnboardingFunctionsTest {
@InjectMock
NotificationEventService notificationEventService;

@Inject
OnboardingMapper onboardingMapper;

final String onboardinString = "{\"onboardingId\":\"onboardingId\"}";

final String onboardingWorkflowString = "{\"type\":\"INSTITUTION\",\"onboarding\":{\"id\":\"id\",\"productId\":null,\"testEnvProductIds\":null,\"workflowType\":null,\"institution\":null,\"users\":null,\"aggregates\":null,\"pricingPlan\":null,\"billing\":null,\"signContract\":null,\"expiringDate\":null,\"status\":null,\"userRequestUid\":null,\"workflowInstanceId\":null,\"createdAt\":null,\"updatedAt\":null,\"activatedAt\":null,\"deletedAt\":null,\"reasonForReject\":null,\"isAggregator\":null}}";
Expand Down Expand Up @@ -166,6 +171,44 @@ void onboardingOrchestratorContractRegistrationAggregator(){
function.onboardingsOrchestrator(orchestrationContext, executionContext);
}

@Test
void onboardingOrchestratorContractRegistrationAggregator_Pending(){
Onboarding onboarding = new Onboarding();
onboarding.setId("onboardingId");
onboarding.setStatus(OnboardingStatus.PENDING);
AggregateInstitution aggregate1 = new AggregateInstitution();
aggregate1.setTaxCode("code1");
AggregateInstitution aggregate2 = new AggregateInstitution();
aggregate1.setTaxCode("code2");
AggregateInstitution aggregate3 = new AggregateInstitution();
aggregate1.setTaxCode("code3");
onboarding.setAggregates(List.of(aggregate1, aggregate2, aggregate3));
Institution institution = new Institution();
institution.setId("id");
onboarding.setInstitution(institution);
onboarding.setWorkflowType(WorkflowType.CONTRACT_REGISTRATION_AGGREGATOR);

TaskOrchestrationContext orchestrationContext = mockTaskOrchestrationContext(onboarding);
function.onboardingsOrchestrator(orchestrationContext, executionContext);

ArgumentCaptor<String> captorActivity = ArgumentCaptor.forClass(String.class);
Mockito.verify(orchestrationContext, times(5))
.callActivity(captorActivity.capture(), any(), any(),any());
assertEquals(CREATE_INSTITUTION_ACTIVITY, captorActivity.getAllValues().get(0));
assertEquals(CREATE_ONBOARDING_ACTIVITY, captorActivity.getAllValues().get(1));
assertEquals(CREATE_USERS_ACTIVITY, captorActivity.getAllValues().get(2));
assertEquals(STORE_ONBOARDING_ACTIVATEDAT, captorActivity.getAllValues().get(3));
assertEquals(SEND_MAIL_COMPLETION_ACTIVITY, captorActivity.getAllValues().get(4));

Mockito.verify(orchestrationContext, times(3))
.callSubOrchestrator(eq(ONBOARDINGS_AGGREGATE_ORCHESTRATOR), any(), any());

Mockito.verify(service, times(1))
.updateOnboardingStatus(onboarding.getId(), OnboardingStatus.COMPLETED);

function.onboardingsOrchestrator(orchestrationContext, executionContext);
}

@Test
void onboardingsOrchestratorNewAdminRequest() {
Onboarding onboarding = new Onboarding();
Expand Down Expand Up @@ -492,6 +535,7 @@ TaskOrchestrationContext mockTaskOrchestrationContext(Onboarding onboarding) {

Task task = mock(Task.class);
when(orchestrationContext.callActivity(any(),any(),any(),any())).thenReturn(task);
when(orchestrationContext.callSubOrchestrator(any(),any())).thenReturn(task);
when(task.await()).thenReturn("example");
when(orchestrationContext.allOf(anyList())).thenReturn(task);
return orchestrationContext;
Expand Down
6 changes: 3 additions & 3 deletions apps/onboarding-ms/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1.6
FROM maven:3-eclipse-temurin-17 AS builder
# syntax=docker/dockerfile:1.6@sha256:ac85f380a63b13dfcefa89046420e1781752bab202122f8f50032edf31be0021
FROM maven:3-eclipse-temurin-17@sha256:6ca4f2d4c7a8affa4a7cdec526dd2aa5d433ddd63f8ed3337a543408136b174e AS builder

WORKDIR /src
COPY --link ./pom.xml .
Expand All @@ -20,7 +20,7 @@ COPY ./apps/onboarding-ms/src/main/ ./src/main/
WORKDIR /src
RUN mvn --projects :onboarding-ms --also-make clean package -DskipTests

FROM openjdk:17-jdk AS runtime
FROM openjdk:17-jdk@sha256:528707081fdb9562eb819128a9f85ae7fe000e2fbaeaf9f87662e7b3f38cb7d8 AS runtime

ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
Expand Down
10 changes: 5 additions & 5 deletions apps/onboarding-ms/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -236,14 +236,14 @@
<artifactId>jaxb-impl</artifactId>
<version>2.3.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
<dependency>
<groupId>it.pagopa.selfcare</groupId>
<artifactId>onboarding-sdk-common</artifactId>
<version>0.1.16</version>
<scope>compile</scope>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version>
</dependency>


</dependencies>
<build>
<plugins>
Expand Down
Loading

0 comments on commit f8e9c2f

Please sign in to comment.