private void AddDbSneaker(DbRoot db, Listing listing, RootParsingObject shop, Shop shopCatalogItem) { log += "Add Sneaker. sku:" + listing.sku + " Title:" + listing.title + br; var sneaker = new DbSneaker(); sneaker.Id = db.Sneakers.Count + 1; sneaker.Brand = listing.brand; sneaker.Sku = listing.sku; sneaker.Titles.Add(listing.title); sneaker.Color = listing.colorbrand; sneaker.Category = listing.category; sneaker.Links.Add(listing.url); if (listing.images.Count > 0) { var imageCollection = new DbImageCollection(); imageCollection.ShopName = shop.market_info.name; foreach (var image in listing.images) { var dbimg = new DbImage(); dbimg.SiteUrl = image; imageCollection.Images.Add(dbimg); } //imageCollection.Images = listing.images; //todo менять ссылки из магазины на ссылки с нашего сервака //todo качать фотки в момент парсинга sneaker.ImageCollectionList.Add(imageCollection); } foreach (var size in listing.sizes) { var dbSize = GetDbSize(sneaker, size, listing, shop, shopCatalogItem); sneaker.Sizes.Add(dbSize); } db.Sneakers.Add(sneaker); }
private void UpdateDbSneaker(DbRoot db, DbSneaker sneaker, Listing listing, RootParsingObject shop, Shop shopCatalogItem) { log += "Update Sneaker. sku:" + sneaker.Sku + " title: " + sneaker.Titles[0] + br; /* логика: * проверяем заголовок, если длиннее, берем его * проверяем остальные элементы, если они не нул, а были нул то берем их * сравниваем категорию листинга и кроссовка, если не совпадают то отклоняем этот листинг (но по идее такого быть не должно */ //title var title = sneaker.Titles.Find(x => x.ToLower() == listing.title.ToLower()); if (title == null) { sneaker.Titles.Add(listing.title); sneaker.Titles = sneaker.Titles.OrderByDescending(x => x.Length).ToList(); } //color if (!string.IsNullOrWhiteSpace(listing.colorbrand)) { if (listing.colorbrand.Length > sneaker.Color.Length) { sneaker.Color = listing.colorbrand; } } //category //если пустая то добавляем if (string.IsNullOrWhiteSpace(sneaker.Category) && !string.IsNullOrWhiteSpace(listing.category)) { sneaker.Category = listing.category; } //если обе непустые сраванием else if (!string.IsNullOrWhiteSpace(sneaker.Category) && !string.IsNullOrWhiteSpace(listing.category)) { if (sneaker.Category != listing.category) { log += "Warn! Other categories. sku: " + sneaker.Sku + " sneaker.Category:" + sneaker.Category + " listing.category:" + listing.category + " listing.url: " + listing.url + br; } } //если обе пустые то else if (string.IsNullOrWhiteSpace(sneaker.Category) && string.IsNullOrWhiteSpace(listing.category)) { log += "Warn: category is empty" + br; } //links sneaker.Links.Add(listing.url); //images var imgCol = new DbImageCollection(); imgCol.ShopName = shopCatalogItem.name; foreach (var lImage in listing.images) { var dbImg = new DbImage(); dbImg.SiteUrl = lImage; imgCol.Images.Add(dbImg); } sneaker.ImageCollectionList.Add(imgCol); //sizes foreach (var lSize in listing.sizes) { //find size var snSize = new DbSize(); if (!string.IsNullOrWhiteSpace(lSize.us)) { snSize = sneaker.Sizes.Find(x => x.Us == lSize.us); //если размера нет, создаем if (snSize == null) { var dbSize = GetDbSize(sneaker, lSize, listing, shop, shopCatalogItem); sneaker.Sizes.Add(dbSize); } //если есть создаем только оффер else { var offer = CreateDbOffer(sneaker, lSize, listing, shop, shopCatalogItem); snSize.Offers.Add(offer); snSize.Offers = snSize.Offers.OrderBy(x => x.price_usd_with_delivery_to_usa_and_minus_vat) .ToList(); } } else { //если юс размера нет, то надо добисать будет код (например для асфальтгольда) throw new Exception("size us is null. Cannot update db sneaker."); } } }