public async Task Handle(EodProcessFinishedEvent e, ICommandSender sender) { var productsResult = await _productsRepository.GetAllAsync(null, null, isStarted : false); if (productsResult.IsSuccess && productsResult.Value != null && productsResult.Value.Any()) { var products = productsResult.Value; var markets = products.Select(x => x.Market).Distinct().ToArray(); var marketInfos = await _marketDayOffService.GetMarketsInfo(markets, null); var productsToStart = productsResult.Value .Where(x => x.StartDate < marketInfos[x.Market].NextTradingDayStart.Date.AddDays(1)) .ToList(); _log.WriteInfo(nameof(StartProductsSaga), nameof(Handle), $"Found {productsToStart.Count} products that need to be started. Ids are: {string.Concat(',', productsToStart.Select(x => x.ProductId))}" ); foreach (var product in productsToStart) { sender.SendCommand(new StartProductCommand() { ProductId = product.ProductId, OperationId = e.OperationId, }, _contextNames.AssetService); } } }
public async Task <Dictionary <string, TradingDayInfoContract> > GetMarketsInfo([FromBody] string[] marketIds = null, [FromQuery] DateTime?date = null) { var allMarkets = (await _marketSettingsService.GetAllMarketSettingsAsync()).Select(x => x.Id).ToHashSet(); allMarkets.Add(_platformSettings.PlatformMarketId); allMarkets.Add(AssetPairConstants.FxMarketId); if (marketIds == null || !marketIds.Any()) { marketIds = allMarkets.ToArray(); } else { foreach (var marketId in marketIds) { if (allMarkets.Contains(marketId)) { continue; } throw new ArgumentException($"Market {marketId} does not exist", nameof(marketIds)); } } var info = await _marketDayOffService.GetMarketsInfo(marketIds, date); return(info.ToDictionary(k => k.Key, v => new TradingDayInfoContract() { IsTradingEnabled = v.Value.IsTradingEnabled, LastTradingDay = v.Value.LastTradingDay, NextTradingDayStart = v.Value.NextTradingDayStart, IsBusinessDay = v.Value.IsBusinessDay })); }