public async Task <IActionResult> GetMultiSetPriceByParts( [FromQuery(Name = "sets")] string setNumberString, [FromQuery(Name = "state")] StateType stateType, [FromQuery(Name = "price")] PriceFormationType priceFormationType ) { return(Ok()); }
public static PriceGuideType GetPriceGuide(PriceFormationType type) { switch (type) { case PriceFormationType.AverageRecentlySoldLimited: return(PriceGuideType.SoldItems); case PriceFormationType.AverageInStockLimited: return(PriceGuideType.StockItems); default: throw new NotImplementedException(); } }
public async Task <IActionResult> GetSetPriceByParts( [FromRoute] string setNumber, [FromQuery(Name = "state")] StateType stateType, [FromQuery(Name = "price")] PriceFormationType priceFormationType ) { var set = await setRepository.UpdateAndGetByNumber(setNumber); #region Process Set Parts var timer = new Stopwatch(); timer.Start(); var partsOfSet = await partOfSetRepository.UpdateAndGetSetParts(set); var parallelPartsTime = timer.Elapsed; timer.Stop(); decimal sum = 0; var priceList = new List <(string Number, Color Color, decimal Price)>(); timer.Restart(); var selectedParts = partsOfSet.Where(p => !p.IsCounterpart && !p.IsAlternate); var parallelTasks = selectedParts.Select(p => ProcessPartPrice(p, stateType, priceFormationType)); var taskResults = (await Task.WhenAll(parallelTasks)) .Where(i => i.Item2 != default) .ToArray(); priceList.AddRange(taskResults.Select(r => r.Item2)); sum = taskResults.Sum(i => i.Item1); var parallelPricesTime = timer.Elapsed; timer.Stop(); #endregion return(Ok(new { SetNumber = setNumber, PriceFormation = priceFormationType.ToString(), Sum = sum, Detailed = priceList .OrderByDescending(item => item.Price) .Select(p => new { p.Number, p.Color, Price = Math.Round(p.Price, 4) }) .ToArray() })); }
public async Task UpdatePartPrices(Part part, PriceFormationType priceFormation) { throw new NotImplementedException(); /* * // ToDo: think about deleting old data * * var guide = BrickLinkUtils.GetPriceGuide(priceFormation); * * * switch (priceFormation) * { * case PriceFormationType.AverageRecentlySoldLimited: * * var soldUsedData = await ExecutePartPriceRequest<PriceSoldDetail>(part, StateType.Used, guide); * var soldNewData = await ExecutePartPriceRequest<PriceSoldDetail>(part, StateType.New, guide); * * var usedOrderPriceData = soldUsedData.Data.PriceDetail * .OrderByDescending(data => data.DateOrdered) * .Take(10) * .Select(data => new OrderPriceData * { * PartId = part.Id, * State = StateType.Used, * Quantity = data.Quantity, * Price = new Price * { * Currency = soldUsedData.Data.Currency, * Value = Math.Round(data.UnitPrice, 4) * }, * Date = data.DateOrdered * }); * var newOrderPriceData = soldNewData.Data.PriceDetail * .OrderByDescending(data => data.DateOrdered) * .Take(10) * .Select(data => new OrderPriceData * { * PartId = part.Id, * State = StateType.New, * Quantity = data.Quantity, * Price = new Price * { * Currency = soldNewData.Data.Currency, * Value = Math.Round(data.UnitPrice, 4) * }, * Date = data.DateOrdered * }); * * await orderPriceDataRepository.InsertMany(usedOrderPriceData.Union(newOrderPriceData)); * * break; * * case PriceFormationType.AverageInStockLimited: * * var stockUsedData = await ExecutePartPriceRequest<PriceStockDetail>(part, StateType.Used, guide); * var stockNewData = await ExecutePartPriceRequest<PriceStockDetail>(part, StateType.New, guide); * * var usedStockPriceData = stockUsedData.Data.PriceDetail * .OrderBy(data => data.UnitPrice) * .Take(10) * .Select(data => new StockPriceData * { * PartId = part.Id, * State = StateType.Used, * Quantity = data.Quantity, * Price = new Price * { * Currency = stockUsedData.Data.Currency, * Value = Math.Round(data.UnitPrice, 4) * }, * DateCollected = DateTime.Today * }); * var newStockPriceData = stockNewData.Data.PriceDetail * .OrderBy(data => data.UnitPrice) * .Take(10) * .Select(data => new StockPriceData * { * PartId = part.Id, * State = StateType.New, * Quantity = data.Quantity, * Price = new Price * { * Currency = stockNewData.Data.Currency, * Value = Math.Round(data.UnitPrice, 4) * }, * DateCollected = DateTime.Today * }); * * * await stockPriceDataRepository.InsertMany(usedStockPriceData.Union(newStockPriceData)); * * break; * * default: * throw new NotImplementedException(priceFormation.ToString()); * }*/ }
private async Task <(decimal, (string Number, Color Color, decimal Price))> ProcessPartPrice(PartOfSet setPart, StateType stateType, PriceFormationType priceFormationType) { var part = await partRepository.Get(setPart.PartId); // Skip Used Stickers if (part.IsSticker && stateType == StateType.Used) { return(0m, default);