private async Task <List <INotification> > ProcessNotifications(CancelTradeItemResponse response) { var results = new List <INotification>(); if (!response.CanceledOrders.IsNullOrEmpty()) { foreach (var canceledOrder in response.CanceledOrders) { results.Add(new NotificationModel { Type = NotificationLevelType.Info, Header = $"Canceled Order", Notification = $"Canceled {canceledOrder.Type} Order #{canceledOrder.Id}, {canceledOrder.Remaining:F8} @ {canceledOrder.Rate:F8}", UserId = canceledOrder.UserId }); } using (var context = DataContextFactory.CreateContext()) { if (!results.IsNullOrEmpty()) { foreach (var notification in results) { context.Notifications.Add(new Entity.UserNotification { Title = notification.Header, Notification = notification.Notification, Type = notification.Type.ToString(), UserId = notification.UserId.ToString(), Timestamp = DateTime.UtcNow }); } } await context.SaveChangesAsync().ConfigureAwait(false); } } return(results); }
private async Task <List <ITradeDataUpdate> > ProcessDataUpdates(CancelTradeItemResponse response) { var cacheUsers = new HashSet <Guid>(); var cacheTradePairs = new HashSet <int>(); var results = new List <ITradeDataUpdate>(); if (!response.CanceledOrders.IsNullOrEmpty()) { foreach (var order in response.CanceledOrders) { results.Add(new TradeOrderBookUpdate { Amount = order.Amount, Rate = order.Rate, Total = order.Amount * order.Rate, Type = order.Type, TradePairId = order.TradePairId, Action = TradeUpdateAction.Cancel }); results.Add(new TradeOpenOrderUpdate { OrderId = order.Id, UserId = order.UserId, Amount = order.Amount, Rate = order.Rate, Total = order.Amount * order.Rate, Type = order.Type, TradePairId = order.TradePairId, Remaining = order.Remaining, Status = order.Status, Action = TradeUpdateAction.Cancel }); cacheUsers.Add(order.UserId); cacheTradePairs.Add(order.TradePairId); } } // Clear caches if (cacheTradePairs.Any()) { foreach (var tradepair in cacheTradePairs) { await ClearCache(tradepair); if (cacheUsers.Any()) { foreach (var user in cacheUsers) { await ClearCache(tradepair, user); results.Add(new TradeBalanceUpdate { TradePairId = tradepair, UserId = user }); } } } } return(results); }