public static MarketOrder Map(MarketOrders.MarketOrder source, MarketOrder target) { target.OrderId = source.OrderId; target.ApiKeyEntityId = (int)source.CharacterId; target.StationId = source.StationId; target.VolumeEntered = source.VolumeEntered; target.VolumeRemaining = source.VolumeRemaining; target.MinVolume = source.MinVolume; target.OrderState = (OrderState)source.OrderState; target.TypeId = source.TypeId; target.Range = source.Range; target.AccountKey = source.AccountKey; target.Duration = source.Duration; target.Escrow = source.Escrow; target.Price = source.Price; target.Bid = source.Bid != 0; target.Issued = source.IssuedDate; return(target); }
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)); } }