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); }
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); }
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); }
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); } } } }