示例#1
0
 public async Task <UiFlowContextData> LoadByFlowHandler(string flowHandler)
 {
     try
     {
         var contextData = (await _store.GetAsync(flowHandler)).JsonToObject <UiFlowContextData>(true);
         return(contextData);
     }
     catch (JsonSerializationException exception)
     {
         throw new Exception(flowHandler, exception);
     }
 }
示例#2
0
        //TODO: THIS SHOULD BE THE COMMAND CONCERN AND ENCAPSULATED IN IT
        private async Task <IActionResult> RecordAndResolve(UiFlowScreenModel sourceStep)
        {
            IActionResult result = null;
            var           form   = HttpContext.Request.Form;

            if (!form.ContainsKey(FlowFormKey))
            {
                result = BadRequest();
            }
            else
            {
                var currentToken = form[FlowFormKey].ToString();

                var lastToken = await _store.GetAsync(LastProcessedTokenKey);

                if (lastToken == currentToken)
                {
                    var ctx = await _contextRepository.GetCurrentSnapshot(sourceStep.FlowHandler);

                    var uiFlowStepData = ctx.GetCurrentStepData <UiFlowScreenModel>();
                    while (uiFlowStepData == null)
                    {
                        await Task.Delay(100);

                        ctx = await _contextRepository.GetCurrentSnapshot(sourceStep.FlowHandler);

                        uiFlowStepData = ctx.GetCurrentStepData <UiFlowScreenModel>();
                    }

                    var request = new FlowResultResolverRequest <IActionResult>
                    {
                        ScreenModel = uiFlowStepData
                    };
                    AddDefaultCallbackHandlers(request);
                    result = await _resultResolver.Execute(request);
                }

                await _store.SetAsync(LastProcessedTokenKey, currentToken);
            }

            return(result);
        }