private async Task <List <string> > GetAvailableAssetIds(string clientId) { var marginTradingEnabled = await _marginTradingSettingsCacheService.IsMarginTradingEnabled(clientId); var responses = await _httpRequestService.RequestIfAvailableAsync(new ClientIdBackendRequest { ClientId = clientId }, "init.availableassets", () => new List <string>(), marginTradingEnabled); return(responses.Live.Concat(responses.Demo).Distinct().ToList()); }
public async Task <InitDataLiveDemoClientResponse> InitData(string clientId) { var marginTradingEnabled = await _marginTradingSettingsCacheService.IsMarginTradingEnabled(clientId); if (!marginTradingEnabled.Demo && !marginTradingEnabled.Live) { throw new Exception("Margin trading is not available"); } var initData = new InitDataLiveDemoClientResponse(); var clientIdRequest = new ClientIdBackendRequest { ClientId = clientId }; var initDataResponses = await _httpRequestService.RequestIfAvailableAsync <InitDataBackendResponse>(clientIdRequest, "init.data", () => null, marginTradingEnabled); initData.Live = initDataResponses.Live?.ToClientContract(); initData.Demo = initDataResponses.Demo?.ToClientContract(); var initAssetsResponses = await _httpRequestService.RequestIfAvailableAsync(clientIdRequest, "init.assets", Array.Empty <AssetPairBackendContract>, marginTradingEnabled); initData.Assets = initAssetsResponses.Live.Concat(initAssetsResponses.Demo).GroupBy(a => a.Id) .Select(g => g.First().ToClientContract()).ToArray(); var initPricesResponse = await _httpRequestService.RequestWithRetriesAsync <Dictionary <string, InstrumentBidAskPairContract> >( clientIdRequest, "init.prices"); initData.Prices = initPricesResponse.ToDictionary(p => p.Key, p => p.Value.ToClientContract()); return(initData); }