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); } }
//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); }