public async Task <IEnumerable <CandlePeriodModel> > GetAvailableCandlePeriodsAsync(string tradingPair) { var availableCandlePeriods = await _candleDbRepository.GetCandlesAsync(tradingPair); var candlePeriods = new List <CandlePeriodModel>(); foreach (var availableCandlePeriod in availableCandlePeriods) { var orderedCandles = availableCandlePeriod.Value.OrderBy(o => o.StartDateTime); candlePeriods.Add(new CandlePeriodModel { ScanId = availableCandlePeriod.Key, PeriodStart = orderedCandles.First().StartDateTime, PeriodEnd = orderedCandles.Last().StartDateTime, Candles = Mapper.Map <IEnumerable <CandleModel> >(orderedCandles) }); } return(candlePeriods); }
public async Task PingPongProcessingAsync(string channelName, BaseMessage <CandleListnerParameters> pingPongParameters) { try { var frame = pingPongParameters.Content.Period; var pairName = pingPongParameters.Content.ChannelName; var candleDT = DateTimeOffset.UtcNow.AddMinutes(-2000 * frame).DateTime; var candles = await _candleRepository.GetCandlesAsync(pairName, frame, candleDT.AddSeconds(-candleDT.Second).AddMilliseconds(-candleDT.Millisecond)); var indicators = await _indicatorsRepositiry.GetIndicatorsAsync(pairName, frame); if (candles.IsSuccess && indicators.IsSuccess) { var indicatorsPack = new IndicatorServicePack { Candles = candles.Result, Indicators = indicators.Result }; var indicatorsResult = await _indicatorBuilder.GetIndicatorsByCandleAsync(indicatorsPack); var tasksForSave = indicatorsResult.Select(r => _indicatorsValueRepository.AddIndicatorsAsync(pairName, frame, r)); await Task.WhenAll(tasksForSave); await _publisher.PublishAsync("indicators_value", pingPongParameters.Content, Models.Enums.BusMessageType.Indicators); } else { _logger.LogError($"Операция построения индикаторов не удалась, по причине {candles.ErrorMessage}, {indicators.ErrorMessage} или список индикаторов был пуст"); } } catch (Exception ex) { _logger.LogError(ex, $"В процессе обработки операции ping pong {JsonConvert.SerializeObject(pingPongParameters.Content)} произошла обшика"); } }