bool SaveObservation(ItemAnalysis analysis, Item item) { var recentObs = _marketObservationRepository.GetByItemAndDate(item, DateTime.Now - ObservationSaveThreshold, DateTime.Today.AddDays(1)); if (recentObs.Any()) { return(false); } var obs = new MarketObservation(); obs.Item = item; obs.EntryTime = DateTime.Now; obs.High = analysis.Highest; obs.Low = analysis.Lowest; obs.LastSalePrice = analysis.LastPrice; obs.Price = analysis.MarketPrice; obs.TotalTrades = analysis.TotalTrades; obs.UnitsOnMarket = analysis.CurrentListings; _marketObservationRepository.Save(obs); return(true); }
public MarketObservationParser(MarketObservationParserSettings settings, ItemRepository itemRepository, string contents) { var lines = Regex.Split(contents, Environment.NewLine).Where(p => !string.IsNullOrEmpty(p)); var observations = new List <MarketObservation>(); foreach (var l in lines.Skip(settings.HasHeader ? 1 : 0)) { var fields = l.Split(','); var obs = new MarketObservation(); var itemName = fields[settings.ItemNamePosition]; var item = itemRepository.GetByName(itemName).FirstOrDefault(); if (item == null) { throw new Exception($"Could not find item {itemName}"); } obs.Item = item; obs.EntryTime = DateTime.Parse(fields[settings.EntryTimePosition]); obs.Price = int.Parse(fields[settings.PricePosition]); obs.LastSalePrice = int.Parse(fields[settings.LastSalePricePosition]); obs.High = int.Parse(fields[settings.HighPosition]); obs.Low = int.Parse(fields[settings.LowPosition]); obs.TotalTrades = int.Parse(fields[settings.TotalTradesPosition]); obs.UnitsOnMarket = int.Parse(fields[settings.UnitsOnMarketPosition]); obs.MaxPrice = int.Parse(fields[settings.MaxPricePosition]); obs.MinPrice = int.Parse(fields[settings.MinPricePosition]); observations.Add(obs); } Observations = observations; }