public async Task <List <MarketOrder> > GetMarketOrdersAsync() { using (EveProfiteerRepository db = CreateDb()) { List <MarketOrder> list = await db.MyMarketOrders() .AsNoTracking() .Include(e => e.Station) .Include(e => e.InvType.Orders) .ToListAsync() .ConfigureAwait(false); list.Where(e => e.OrderState == OrderState.Open) .Apply( o => o.InvType.Orders = o.InvType.Orders.Where( f => f.ApiKeyEntity_Id == ApplicationHelper.ActiveEntity.Id && o.Bid ? f.IsBuyOrder : f.IsSellOrder).ToList()); return(list); } }
public async Task <int> UpdateMarketOrdersAsync() { MarketOrders result = await _eveApiService.GetMarketOrdersAsync(ApplicationHelper.ActiveEntity.ApiKeys.First(), ApplicationHelper.ActiveEntity) .ConfigureAwait(false); long minOrderId = result.Orders.Any() ? result.Orders.MinBy(order => order.OrderId).OrderId : 0; using (EveProfiteerRepository db = CreateDb()) { db.Context.Configuration.ValidateOnSaveEnabled = false; db.Context.Configuration.AutoDetectChangesEnabled = false; List <MarketOrders.MarketOrder> newOrders = result.Orders.ToList(); List <MarketOrder> orders = await db.MyMarketOrders() .Where(order => order.OrderId >= minOrderId || order.OrderState == OrderState.Open) .ToListAsync() .ConfigureAwait(false); ILookup <long, MarketOrders.MarketOrder> resultLookup = result.Orders.ToLookup(f => f.OrderId); foreach (MarketOrder order in orders) { MarketOrders.MarketOrder marketOrder = resultLookup[order.OrderId].SingleOrDefault(); if (marketOrder != null) { ApiEntityMapper.Map(marketOrder, order); newOrders.Remove(marketOrder); } else if (order.OrderState == OrderState.Open) { order.Escrow = 0; if (order.Duration < DateTime.UtcNow.Subtract(order.Issued).Days) { order.OrderState = OrderState.Expired; } else { order.OrderState = OrderState.Closed; } } } foreach (MarketOrders.MarketOrder marketOrder in newOrders) { MarketOrder order = db.Context.MarketOrders.Create(); ApiEntityMapper.Map(marketOrder, order); db.Context.MarketOrders.Add(order); } List <Asset> assets = await db.Context.Assets.ToListAsync().ConfigureAwait(false); foreach (Asset asset in assets) { List <MarketOrders.MarketOrder> order = result.Orders.Where( e => e.TypeId == asset.InvTypes_TypeId && e.StationId == asset.StationId && e.OrderState == 0 && e.Bid == 0 && e.VolumeRemaining != 0) .ToList(); asset.MarketQuantity = order.Any() ? order.Sum(e => e.VolumeRemaining) : 0; } db.Context.ChangeTracker.DetectChanges(); return(await db.Context.SaveChangesAsync().ConfigureAwait(false)); } }