Esempio n. 1
0
 public async Task <ActionstepMatterValidationResult> ValidateActionstepMatter([ActivityTrigger] ValidateActionstepMatterCommand validateActionstepMatterCommand)
 {
     if (validateActionstepMatterCommand is null)
     {
         throw new ArgumentNullException(nameof(validateActionstepMatterCommand));
     }
     return(await _mediator.Send(validateActionstepMatterCommand));
 }
Esempio n. 2
0
        public async static Task <int?> ValidateActionstepMatterIdWithRetryAsync(
            this IDurableOrchestrationContext context,
            string matterReference,
            string actionstepOrgKey,
            string actionstepUserId,
            int minimumMatterIdToSync,
            Action <IDurableOrchestrationContext, MatterIdStatus, string> onInvalidResult,
            Action <IDurableOrchestrationContext, string, int> onMatterIdUpdated,
            ILogger logger)
        {
            ActionstepMatterValidationResult actionstepMatterValidationResult = null;
            var matterIdToValidate = matterReference;

            do
            {
                string exceptionMessage = null;

                try
                {
                    var validateActionstepMatterCommand = new ValidateActionstepMatterCommand()
                    {
                        ActionstepOrgKey      = actionstepOrgKey,
                        ActionstepUserId      = actionstepUserId,
                        MatterId              = matterIdToValidate,
                        MinimumMatterIdToSync = minimumMatterIdToSync,
                    };

                    actionstepMatterValidationResult = await context.CallActivityAsync <ActionstepMatterValidationResult>(
                        nameof(SharedActivities.ValidateActionstepMatter),
                        validateActionstepMatterCommand);
                }
                catch (Exception ex)
                {
                    exceptionMessage = ex.Message;
                    logger.LogError(ex, "Exception encountered while validating Actionstep Matter ID.");
                }

                if (actionstepMatterValidationResult?.MatterIdStatus != MatterIdStatus.Valid)
                {
                    var message = GetMatterInvalidReasonMessage(actionstepMatterValidationResult, matterReference, minimumMatterIdToSync, actionstepOrgKey, exceptionMessage);

                    var matterIdStatus = actionstepMatterValidationResult?.MatterIdStatus ?? MatterIdStatus.InvalidUnknownValidationError;

                    if (!(onInvalidResult is null))
                    {
                        try
                        {
                            onInvalidResult(context, matterIdStatus, message);
                        }
                        catch (Exception ex)
                        {
                            logger.LogError(ex, $"Exception encountered while running '{nameof(onInvalidResult)}' callback.");
                        }
                    }

                    // No further processing if the matter doesn't pass the minimum number filter.
                    if (matterIdStatus == MatterIdStatus.InvalidBelowMinimum)
                    {
                        return(null);
                    }

                    // Otherwise, wait for an UpdateMatterIdEvent event to fix the matter id.
                    // We expect an int, but convert it back to a string because ValidateActionstepMatterCommand expects a string.
                    var updatedMatterIdEvent = context.WaitForExternalEvent <int>(nameof(Events.UpdateMatterIdEvent));
                    var retryEvent           = context.WaitForExternalEvent(nameof(Events.RetryFailedActivityEvent));

                    var winner = await Task.WhenAny(updatedMatterIdEvent, retryEvent);

                    if (winner == updatedMatterIdEvent)
                    {
                        if (!(onMatterIdUpdated is null))
                        {
                            try
                            {
                                onMatterIdUpdated(context, matterIdToValidate, updatedMatterIdEvent.Result);
                            }
                            catch (Exception ex)
                            {
                                logger.LogError(ex, $"Exception encountered while running '{nameof(onMatterIdUpdated)}' callback.");
                            }
                        }

                        matterIdToValidate = updatedMatterIdEvent.Result.ToString(CultureInfo.InvariantCulture);
                    }

                    // If winner is retryEvent, we'll simply loop and retry with the same matter id
                }
            } while (actionstepMatterValidationResult?.MatterIdStatus != MatterIdStatus.Valid);

            return(actionstepMatterValidationResult?.MatterId);
        }