Пример #1
0
        public LinqDataAccess(DatabaseType dt, String ConnectionString)
        {
            var f = GetConnectionFactory(dt);

            Connection = f(ConnectionString);
            dbr        = new DbRoot(Connection);
        }
Пример #2
0
        public static void SaveLocalFile(DbRoot db)
        {
            var path = Config.GetConfig().DbFolder + Config.GetConfig().DbFileName;
            var text = JsonConvert.SerializeObject(db);

            File.WriteAllText(path, text);
        }
Пример #3
0
        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);
        }
Пример #4
0
 private static void DeleteOffers(DbRoot db)
 {
     foreach (var sneaker in db.Sneakers)
     {
         foreach (var size in sneaker.Sizes)
         {
             size.Offers.Clear();
         }
     }
 }
Пример #5
0
        private void AddShopsInfo(DbRoot db)
        {
            var shopCatalog = ShopCatalog;
            var shops       = ShopCatalogController.GetShopsValidated();

            foreach (var shop in shops)
            {
                var shopCatalogItem = shopCatalog.markets.Find(x => x.name == shop.market_info.name);
                AddShopInfo(db, shop, shopCatalogItem);
            }
        }
Пример #6
0
 public void Dispose()
 {
     if (dbr != null)
     {
         dbr.Dispose();
         dbr = null;
     }
     if (Connection != null)
     {
         Connection.Dispose();
         Connection = null;
     }
 }
Пример #7
0
        public void Create()
        {
            var db = new DbRoot();

            db.UpdateTime = DateTime.Now;

            AddShopsInfo(db);

            db.Sneakers = db.Sneakers.FindAll(x => x.Category != "kids");
            _logger.Info("Delete kids sneakers");

            SaveLocalFile(db);
            SaveLog();
        }
        public static void Validate(DbRoot db)
        {
            _logger.Info("Validate Db");

            //images
            var sneakersWithoutImages = db.Sneakers.FindAll(x => x.ImageCollectionList.Count == 0);

            foreach (var sneaker in sneakersWithoutImages)
            {
                _logger.Warn("sneaker without images. sku: " + sneaker.Sku);
            }
            db.Sneakers.RemoveAll(x => x.ImageCollectionList.Count == 0);

            _logger.Info("db validate is finished");
        }
Пример #9
0
 public void Complete()
 {
     if (dbr != null)
     {
         dbr.Dispose();
         dbr = null;
     }
     if (Connection != null)
     {
         Connection.Dispose();
         Connection = null;
     }
     else
     {
         throw new InvalidOperationException();
     }
 }
Пример #10
0
 public async Task Save()
 {
     DbRoot.Refresh();
     if (!DbRoot.Exists)
     {
         DbRoot.Create();
         DbRoot.Refresh();
     }
     {
         var fileinfo = new FileInfo(Path.Join(DbRoot.FullName, "config.json"));
         using var fs = fileinfo.Open(FileMode.Create, FileAccess.Write);
         await JsonSerializer.SerializeAsync(fs, Configuration);
     }
     {
         var fileinfo = new FileInfo(Path.Join(DbRoot.FullName, "history.json"));
         using var fs = fileinfo.Open(FileMode.Create, FileAccess.Write);
         await JsonSerializer.SerializeAsync(fs, History);
     }
 }
Пример #11
0
        private void AddShopInfo(DbRoot db, RootParsingObject shop, Shop shopCatalogItem)
        {
            foreach (var listing in shop.listings)
            {
                var sneaker = db.Sneakers.Find(x => x.Sku == listing.sku);
                if (sneaker == null)
                {
                    AddDbSneaker(db, listing, shop, shopCatalogItem);
                }
                else
                {
                    //db.Sneakers.RemoveAll(x => x.Sku == listing.sku);
                    //AddDbSneaker(db, listing, shop, shopCatalogItem);

                    UpdateDbSneaker(db, sneaker, listing, shop, shopCatalogItem);
                    //todo запилить этот метод
                }
            }
        }
Пример #12
0
 public static object Test000()
 {
     using (DClsszDataContext context = new DClsszDataContext())
     {
         DbRoot root = Queryable.First <DbRoot>(context.DbRoots);
         for (int i = 0; i < root.CTyps.Count; i++)
         {
             CTyp typ = Enumerable.First <CTyp>(Enumerable.Skip <CTyp>(root.CTyps, i));
             for (int j = 0; j < typ.FTyps.Count; j++)
             {
                 FTyp typ2 = Enumerable.First <FTyp>(Enumerable.Skip <FTyp>(typ.FTyps, j));
                 for (int k = 0; k < typ2.Itms.Count; k++)
                 {
                     Itm itm = Enumerable.First <Itm>(Enumerable.Skip <Itm>(typ2.Itms, k));
                     for (int m = 0; m < itm.Parts.Count; m++)
                     {
                         Enumerable.First <Part>(Enumerable.Skip <Part>(itm.Parts, m));
                     }
                 }
             }
         }
     }
     return(null);
 }
 public BonanzaExporterAllBrands()
 {
     Db = DbController.LoadLocalFile();
     Validator.Validate(Db);
 }
Пример #14
0
        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.");
                }
            }
        }