public async Task <RevenueForecasts> StartCalculationAsync(FullUserInfo fullUserInfo) { var existingForecast = await _cachingService.GetRevenueForecastAsync(fullUserInfo); if (existingForecast != null) { return(existingForecast); } var draftForecast = await _databaseAccessService.CreateForecastAsync(fullUserInfo.ForecastType); var messageToModel = PrepareMessageToModel(fullUserInfo, draftForecast); _modelMessagingService.ResponseProcessor = ModelResponseProcessor; var rpcParams = _rabbitMqConfiguration.ForecastRpcConfiguration; await _modelMessagingService.SendAsync(rpcParams, messageToModel); return(draftForecast); }