Skip to content

Commit

Permalink
[SELC-3573] feat: Added function to reject outdated onboardings (#502)
Browse files Browse the repository at this point in the history
Co-authored-by: pierpaolo.didato@emeal.nttdata.com <Aiap1955?^@#>
Co-authored-by: Giampiero Ferrara <giampiero.ferrara@emeal.nttdata.com>
  • Loading branch information
3 people authored Oct 4, 2024
1 parent 76c7c21 commit 8fc4798
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public HttpResponseMessage startOrchestration(

DurableTaskClient client = durableContext.getClient();
String instanceId = client.scheduleNewOrchestrationInstance("Onboardings", onboardingId);
context.getLogger().info(String.format("%s %s", CREATED_NEW_ONBOARDING_ORCHESTRATION_WITH_INSTANCE_ID_MSG, instanceId));
context.getLogger().info(() -> String.format("%s %s", CREATED_NEW_ONBOARDING_ORCHESTRATION_WITH_INSTANCE_ID_MSG, instanceId));

try {

Expand Down Expand Up @@ -161,7 +161,10 @@ public void onboardingsOrchestrator(
}

Optional<OnboardingStatus> optNextStatus = workflowExecutor.execute(ctx, onboarding);
optNextStatus.ifPresent(onboardingStatus -> service.updateOnboardingStatus(onboardingId, onboardingStatus));
optNextStatus.ifPresent(onboardingStatus -> {
service.updateOnboardingStatus(onboardingId, onboardingStatus);
workflowExecutor.postProcessor(ctx, onboarding, onboardingStatus);
});
} catch (TaskFailedException ex) {
functionContext.getLogger().warning("Error during workflowExecutor execute, msg: " + ex.getMessage());
service.updateOnboardingStatusAndInstanceId(onboardingId, OnboardingStatus.FAILED, ctx.getInstanceId());
Expand All @@ -178,7 +181,7 @@ public void onboardingsOrchestrator(
*/
@FunctionName(BUILD_CONTRACT_ACTIVITY_NAME)
public void buildContract(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, BUILD_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, BUILD_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString));
service.createContract(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString));
}

Expand All @@ -187,7 +190,7 @@ public void buildContract(@DurableActivityTrigger(name = "onboardingString") Str
*/
@FunctionName(SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME)
public void saveToken(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString));
service.saveTokenWithContract(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString));
}

Expand All @@ -196,90 +199,97 @@ public void saveToken(@DurableActivityTrigger(name = "onboardingString") String
*/
@FunctionName(SEND_MAIL_REGISTRATION_FOR_CONTRACT)
public void sendMailRegistrationForContract(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT, onboardingWorkflowString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT, onboardingWorkflowString));
service.sendMailRegistrationForContract(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString));
}

@FunctionName(SEND_MAIL_REGISTRATION_FOR_CONTRACT_WHEN_APPROVE_ACTIVITY)
public void sendMailRegistrationForContractWhenApprove(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT_WHEN_APPROVE_ACTIVITY, onboardingWorkflowString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_FOR_CONTRACT_WHEN_APPROVE_ACTIVITY, onboardingWorkflowString));
service.sendMailRegistrationForContractWhenApprove(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString));
}

@FunctionName(SEND_MAIL_REGISTRATION_REQUEST_ACTIVITY)
public void sendMailRegistration(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_REQUEST_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_REQUEST_ACTIVITY, onboardingString));
service.sendMailRegistration(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(SEND_MAIL_REGISTRATION_APPROVE_ACTIVITY)
public void sendMailRegistrationApprove(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_APPROVE_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REGISTRATION_APPROVE_ACTIVITY, onboardingString));
service.sendMailRegistrationApprove(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(SEND_MAIL_ONBOARDING_APPROVE_ACTIVITY)
public void sendMailOnboardingApprove(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_ONBOARDING_APPROVE_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_ONBOARDING_APPROVE_ACTIVITY, onboardingString));
service.sendMailOnboardingApprove(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(CREATE_INSTITUTION_ACTIVITY)
public String createInstitutionAndPersistInstitutionId(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_INSTITUTION_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_INSTITUTION_ACTIVITY, onboardingString));
return completionService.createInstitutionAndPersistInstitutionId(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(STORE_ONBOARDING_ACTIVATEDAT)
public void storeOnboardingActivatedAt(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, STORE_ONBOARDING_ACTIVATEDAT, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, STORE_ONBOARDING_ACTIVATEDAT, onboardingString));
completionService.persistActivatedAt(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(REJECT_OUTDATED_ONBOARDINGS)
public void rejectOutdatedOnboardings(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, REJECT_OUTDATED_ONBOARDINGS, onboardingString));
completionService.rejectOutdatedOnboardings(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(CREATE_ONBOARDING_ACTIVITY)
public void createOnboarding(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_ONBOARDING_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_ONBOARDING_ACTIVITY, onboardingString));
completionService.persistOnboarding(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(SEND_MAIL_COMPLETION_ACTIVITY)
public void sendMailCompletion(@DurableActivityTrigger(name = "onboardingString") String onboardingWorkflowString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_ACTIVITY, onboardingWorkflowString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_ACTIVITY, onboardingWorkflowString));
completionService.sendCompletedEmail(readOnboardingWorkflowValue(objectMapper, onboardingWorkflowString));
}

@FunctionName(SEND_MAIL_REJECTION_ACTIVITY)
public void sendMailRejection(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REJECTION_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_REJECTION_ACTIVITY, onboardingString));
completionService.sendMailRejection(context, readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(CREATE_USERS_ACTIVITY)
public void createOnboardedUsers(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString));
completionService.persistUsers(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY)
public void sendMailCompletionAggregate(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, SEND_MAIL_COMPLETION_AGGREGATE_ACTIVITY, onboardingString));
completionService.sendCompletedEmailAggregate(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY)
public String createAggregateOnboardingRequest(@DurableActivityTrigger(name = "onboardingString") String onboardingAggregateOrchestratorInputString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY, onboardingAggregateOrchestratorInputString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY, onboardingAggregateOrchestratorInputString));
return completionService.createAggregateOnboardingRequest(readOnboardingAggregateOrchestratorInputValue(objectMapper, onboardingAggregateOrchestratorInputString));
}

@FunctionName(CREATE_DELEGATION_ACTIVITY)
public String createDelegationForAggregation(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, CREATE_USERS_ACTIVITY, onboardingString));
return completionService.createDelegation(readOnboardingValue(objectMapper, onboardingString));
}

@FunctionName(EXISTS_DELEGATION_ACTIVITY)
public String existsDelegation(@DurableActivityTrigger(name = "onboardingString") String onboardingString, final ExecutionContext context) {
context.getLogger().info(String.format(FORMAT_LOGGER_ONBOARDING_STRING, EXISTS_DELEGATION_ACTIVITY, onboardingString));
context.getLogger().info(() -> String.format(FORMAT_LOGGER_ONBOARDING_STRING, EXISTS_DELEGATION_ACTIVITY, onboardingString));
return completionService.existsDelegation(readOnboardingAggregateOrchestratorInputValue(objectMapper, onboardingString));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class ActivityName {
public static final String SEND_MAIL_COMPLETION_ACTIVITY = "SendMailCompletion";
public static final String SEND_MAIL_REJECTION_ACTIVITY = "SendMailRejection";
public static final String STORE_ONBOARDING_ACTIVATEDAT = "StoreOnboardingActivatedAt";
public static final String REJECT_OUTDATED_ONBOARDINGS = "RejectOutdatedOnboardings";
public static final String CREATE_USERS_ACTIVITY = "CreateUsers";
public static final String SEND_ONBOARDING_NOTIFICATION = "SendOnboardingNotification";
public static final String CREATE_AGGREGATE_ONBOARDING_REQUEST_ACTIVITY = "CreateAggregateOnboardingRequest";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public interface CompletionService {

void persistActivatedAt(Onboarding onboarding);

void rejectOutdatedOnboardings(Onboarding onboarding);

void sendCompletedEmail(OnboardingWorkflow onboardingWorkflow);

void sendCompletedEmailAggregate(Onboarding onboarding);
Expand All @@ -28,4 +30,5 @@ public interface CompletionService {
void sendTestEmail(ExecutionContext context);

String existsDelegation(OnboardingAggregateOrchestratorInput onboardingAggregateOrchestratorInput);

}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import java.util.Optional;
import java.util.stream.Collectors;

import static it.pagopa.selfcare.onboarding.common.OnboardingStatus.REJECTED;
import static it.pagopa.selfcare.onboarding.common.PartyRole.MANAGER;
import static it.pagopa.selfcare.onboarding.common.WorkflowType.CONFIRMATION_AGGREGATE;
import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_FIELD_LIST;
Expand Down Expand Up @@ -217,6 +218,15 @@ public void persistActivatedAt(Onboarding onboarding) {
.where("_id", onboarding.getId());
}

@Override
public void rejectOutdatedOnboardings(Onboarding onboarding) {
LocalDateTime now = LocalDateTime.now();
onboardingRepository
.update("status = ?1 and updatedAt = ?2 ", REJECTED, now)
.where("productId = ?1 and institution.origin = ?2 and institution.originId = ?3 and status = PENDING or status = TOBEVALIDATED",
onboarding.getProductId(), onboarding.getInstitution().getOrigin(), onboarding.getInstitution().getOriginId());
}

@Override
public void sendCompletedEmailAggregate(Onboarding onboarding) {
List<String> destinationMails = getDestinationMails(onboarding);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.Objects;
import java.util.Optional;

import static it.pagopa.selfcare.onboarding.common.OnboardingStatus.COMPLETED;
import static it.pagopa.selfcare.onboarding.functions.utils.ActivityName.*;
import static it.pagopa.selfcare.onboarding.utils.Utils.*;
public interface WorkflowExecutor {
Expand Down Expand Up @@ -77,7 +78,7 @@ default Optional<OnboardingStatus> onboardingCompletionActivity(TaskOrchestratio
Onboarding onboarding = onboardingWorkflow.getOnboarding();
createInstitutionAndOnboarding(ctx, onboarding);
ctx.callActivity(SEND_MAIL_COMPLETION_ACTIVITY, getOnboardingWorkflowString(objectMapper(), onboardingWorkflow), optionsRetry(), String.class).await();
return Optional.of(OnboardingStatus.COMPLETED);
return Optional.of(COMPLETED);
}

default Optional<OnboardingStatus> onboardingCompletionUsersActivity(TaskOrchestrationContext ctx, OnboardingWorkflow onboardingWorkflow) {
Expand All @@ -86,7 +87,7 @@ default Optional<OnboardingStatus> onboardingCompletionUsersActivity(TaskOrchest
ctx.callActivity(CREATE_USERS_ACTIVITY, onboardingString, optionsRetry(), String.class).await();
ctx.callActivity(STORE_ONBOARDING_ACTIVATEDAT, onboardingString, optionsRetry(), String.class).await();
ctx.callActivity(SEND_MAIL_COMPLETION_ACTIVITY, onboardingWorkflowString, optionsRetry(), String.class).await();
return Optional.of(OnboardingStatus.COMPLETED);
return Optional.of(COMPLETED);
}

default void createInstitutionAndOnboardingAggregate(TaskOrchestrationContext ctx, Onboarding onboarding, OnboardingMapper onboardingMapper){
Expand All @@ -103,7 +104,7 @@ default void createInstitutionAndOnboardingAggregate(TaskOrchestrationContext ct

default Optional<OnboardingStatus> onboardingCompletionActivityWithoutMail(TaskOrchestrationContext ctx, Onboarding onboarding) {
createInstitutionAndOnboarding(ctx, onboarding);
return Optional.of(OnboardingStatus.COMPLETED);
return Optional.of(COMPLETED);
}

private String onboardingStringWithTestEnvProductId(String testEnvProductId, String onboardingWithInstitutionIdString) {
Expand All @@ -122,4 +123,11 @@ default Optional<OnboardingStatus> executeRejectedState(TaskOrchestrationContext
return Optional.empty();
}

default void postProcessor(TaskOrchestrationContext ctx, Onboarding onboarding, OnboardingStatus onboardingStatus) {
if (COMPLETED.equals(onboardingStatus)) {
final String onboardingString = getOnboardingString(objectMapper(), onboarding);
ctx.callActivity(REJECT_OUTDATED_ONBOARDINGS, onboardingString, optionsRetry(), String.class).await();
}
}

}
Loading

0 comments on commit 8fc4798

Please sign in to comment.