Example #1
0
        public async Task <IActionResult> Index(string systemName)
        {
            // Get items with prices
            Constants.Systems systemId;
            Enum.TryParse(systemName, out systemId);
            TradeHub   tradeHub    = Constants.TradeHubs.First(th => th.SystemID == (int)systemId);
            List <int> categoryIds = new List <int>()
            {
                (int)Constants.Categories.PlanetaryCommodities, (int)Constants.Categories.PlanetaryResources
            };
            List <Category> categories = _context.Categories.Where(c => categoryIds.Contains(c.ID)).ToList();
            List <Group>    groups     = _context.Groups.Where(g => categoryIds.Contains(g.CategoryID)).ToList();
            List <Item>     items      = _context.Items.Where(i => groups.Any(g => g.ID == i.GroupID)).ToList();
            List <ItemVM>   itemVMs    = new List <ItemVM>();

            try
            {
                itemVMs = await GetItemMarketData(items, tradeHub);
            }
            catch (Exception ex)
            {
                //TODO: show custom error screen
                throw ex;
            }

            foreach (var item in itemVMs)
            {
                var group    = groups.First(g => g.ID == item.GroupID);
                var category = categories.First(c => c.ID == group.CategoryID);

                item.GroupName    = group.Name;
                item.CategoryID   = category.ID;
                item.CategoryName = category.Name;
            }

            List <SchematicVM> schematics = GetSchematicVMs(itemVMs).ToList();

            ViewBag.TradeHub    = tradeHub;
            ViewBag.PlanetTypes = GetPlanetTypes(items).OrderBy(pt => pt.Name).ToList();
            ViewBag.RawMats     = itemVMs.Where(i => groups.Any(g => g.CategoryID == (int)Constants.Categories.PlanetaryResources && g.ID == i.GroupID)).OrderBy(m => m.Name).ToList();

            return(View(schematics.OrderBy(s => s.Output.Volume).ThenBy(s => s.Name).ToList()));
        }
Example #2
0
        /// <summary>
        /// Get market data for the given items in the given region
        /// </summary>
        /// <param name="items">Items to get market data for</param>
        /// <param name="tradeHub">Trade hub to get market data</param>
        /// <returns>Collection of Item view models</returns>
        public async Task <List <ItemVM> > GetItemMarketData(IEnumerable <Item> items, TradeHub tradeHub)
        {
            List <ItemVM> viewModels = new List <ItemVM>();
            //var request = new HttpRequestMessage();
            //var response = new HttpResponseMessage();

            int          i              = 1;
            List <Order> orders         = new List <Order>();
            List <Order> responseOrders = new List <Order>();

            // get all orders
            do
            {
                List <string> urls = new List <string>();
                foreach (var item in items)
                {
                    urls.Add("https://esi.evetech.net/v1/markets/" + tradeHub.RegionID + "/orders/?datasource=tranquility&order_type=sell&page=" + i + "&type_id=" + item.ID);
                }

                var responses = await MakeEsiRequest(urls);

                //response = await MakeEsiRequest(request);

                foreach (var response in responses)
                {
                    if (response.IsSuccessStatusCode)
                    {
                        responseOrders = await response.Content.ReadAsAsync <List <Order> >();

                        orders.AddRange(responseOrders);
                    }
                    else
                    {
                        throw new Exception($"Failed to get all Orders for page '{i}'");
                    }
                }

                i++;
            } while (responseOrders.Count >= 1000);

            // add the viewmodel
            foreach (var item in items)
            {
                ItemVM itemVM     = new ItemVM(item);
                var    itemOrders = orders.Where(o => o.SystemID == tradeHub.SystemID && o.TypeID == item.ID).ToList();
                itemVM.Price = itemOrders.Count > 0 ? Convert.ToDecimal(itemOrders.Min(o => o.Price)) : 0;
                viewModels.Add(itemVM);
            }

            return(viewModels);
        }