public async Task <IActionResult> GetAvailableAssetPairsHistoryDepth()
        {
            try
            {
                var assetPairs = await _assetPairsManager.GetAllAsync();

                // Now we do select new history depth items in parallel  style for each asset pair,
                // but the depth item constructor itself executes 4 awaitable queries non-parallel.
                // I.e., if we have 10 asset pairs, we get here 10 parallel tasks with 4 sequential
                // data queries in each, but not 10 * 4 parallel tasks.
                var result = await Task.WhenAll(
                    assetPairs
                    .Where(p => _candleHistoryAssetConnections.ContainsKey(p.Id))
                    .Select(async p => new CandlesHistoryDepthResponseModel
                {
                    AssetPairId           = p.Id,
                    OldestAskTimestamp    = (await _candlesManager.TryGetOldestCandleAsync(p.Id, CandlePriceType.Ask, CandleTimeInterval.Sec))?.Timestamp,
                    OldestBidTimestamp    = (await _candlesManager.TryGetOldestCandleAsync(p.Id, CandlePriceType.Bid, CandleTimeInterval.Sec))?.Timestamp,
                    OldestMidTimestamp    = (await _candlesManager.TryGetOldestCandleAsync(p.Id, CandlePriceType.Mid, CandleTimeInterval.Sec))?.Timestamp,
                    OldestTradesTimestamp = (await _candlesManager.TryGetOldestCandleAsync(p.Id, CandlePriceType.Trades, CandleTimeInterval.Sec))?.Timestamp
                })
                    );

                return(Ok(result));
            }
            catch (Exception ex)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, ErrorResponse.Create("Internal", ex.Message)));
            }
        }