示例#1
0
        private async Task <List <WooCommerceProduct> > CollectProductsFromAllPagesAsync(Dictionary <string, string> productFilters, int pageSize)
        {
            var products = new List <WooCommerceProduct>();

            for (var page = 1; ; page++)
            {
                var pageFilter         = EndpointsBuilder.CreateGetPageAndLimitFilter(new WooCommerceCommandConfig(page, pageSize));
                var combinedFilters    = productFilters.Concat(pageFilter).ToDictionary(f => f.Key, f => f.Value);
                var productsWithinPage = await GetNextProductPageAsync(combinedFilters);

                if (!productsWithinPage.Any())
                {
                    break;
                }

                foreach (var productWithinPage in productsWithinPage)
                {
                    if (productWithinPage.HasVariations && productWithinPage.Id.HasValue)
                    {
                        productWithinPage.Variations = await CollectVariationsByProductFromAllPagesAsync(productWithinPage.Id.Value, pageSize);
                    }
                    else
                    {
                        productWithinPage.Variations = new List <WooCommerceVariation>();
                    }
                }

                products.AddRange(productsWithinPage);
            }

            return(products);
        }
示例#2
0
        public static async Task <List <QuantityUpdate> > GetProductsToUpdateAsync(GetProductsAsyncDelegate getNextProductPageAsync, Dictionary <string, int> skusQuantities, int pageSize)
        {
            var productsToUpdate = new List <QuantityUpdate>();

            for (var page = 1; ; page++)
            {
                var pageFilter         = EndpointsBuilder.CreateGetPageAndLimitFilter(new WooCommerceCommandConfig(page, pageSize));
                var productsWithinPage = await getNextProductPageAsync(pageFilter);

                if (!productsWithinPage.Any())
                {
                    break;
                }
                foreach (var product in productsWithinPage.Where(p => p.Id != null))
                {
                    GetProductToUpdate(skusQuantities, product, productsToUpdate);
                }
            }
            return(productsToUpdate);
        }
示例#3
0
        public async Task <IEnumerable <WooCommerceVariation> > CollectVariationsByProductFromAllPagesAsync(int productId, int pageSize)
        {
            var variations = new List <WooCommerceVariation>();

            for (var page = 1; ; page++)
            {
                var pageFilter            = EndpointsBuilder.CreateGetPageAndLimitFilter(new WooCommerceCommandConfig(page, pageSize));
                var wooCommerceVariations = (await this._wcObjectApiV3.Product.Variations.GetAll(productId, pageFilter).ConfigureAwait(false));
                var variationsWithinPage  = wooCommerceVariations.Select(v => v.ToSvVariation()).ToList();

                if (!variationsWithinPage.Any())
                {
                    break;
                }

                variations.AddRange(variationsWithinPage);
            }

            return(variations);
        }
示例#4
0
        public static async Task GetProductsAndVariationsToUpdateAsync(GetProductsAsyncDelegate getNextProductPageAsync, Func <int, Task <IEnumerable <WooCommerceVariation> > > getVariationsAsync, Dictionary <string, int> skusQuantities, int pageSize, List <QuantityUpdate> productsToUpdate, Dictionary <ProductId, IEnumerable <QuantityUpdate> > variationsToUpdate)
        {
            for (var page = 1; ; page++)
            {
                var pageFilter         = EndpointsBuilder.CreateGetPageAndLimitFilter(new WooCommerceCommandConfig(page, pageSize));
                var productsWithinPage = await getNextProductPageAsync(pageFilter);

                if (!productsWithinPage.Any())
                {
                    break;
                }
                foreach (var product in productsWithinPage.Where(p => p.Id != null))
                {
                    GetProductToUpdate(skusQuantities, product, productsToUpdate);

                    if (product.HasVariations)
                    {
                        GetVariationsToUpdate(skusQuantities, await getVariationsAsync(product.Id.Value), product.Id.Value, variationsToUpdate);
                    }
                }
            }
        }