Skip to content

Instantly share code, notes, and snippets.

@allenmichael
Created October 23, 2015 18:56
Show Gist options
  • Save allenmichael/1286ce312223d7bbf281 to your computer and use it in GitHub Desktop.
Save allenmichael/1286ce312223d7bbf281 to your computer and use it in GitHub Desktop.
A Mozu extension method for ProductResource to retrieve all products from a master catalog
namespace MozuExtensions
{
public static class MozuExtensions
{
/// <summary>
/// Retrieves all products from the master catalog using the tenant that was supplied when Mozu.Api.Resources.Commerce.Catalog.Admin.ProductResource was created.
/// <para />
/// Accepts an optional pageSize parameter -- pageSize is set to 200 by default.
/// </summary>
/// <param name="productResource"></param>
/// <param name="pageSize"></param>
/// <returns>
/// A Task that completes to a List with members of type Mozu.Api.Contracts.ProductAdmin.Product
/// </returns>
public async static Task<List<Mozu.Api.Contracts.ProductAdmin.Product>> GetAllProducts(this Mozu.Api.Resources.Commerce.Catalog.Admin.ProductResource productResource, int pageSize = 200)
{
var productCollectionsTaskList = new List<Task<Mozu.Api.Contracts.ProductAdmin.ProductCollection>>();
var productsList = new List<Mozu.Api.Contracts.ProductAdmin.Product>();
var totalProductCount = 0;
var startIndex = 0;
var productCollection = await productResource.GetProductsAsync(pageSize: pageSize, startIndex: startIndex);
totalProductCount = productCollection.TotalCount;
startIndex += pageSize;
productsList.AddRange(productCollection.Items);
while (totalProductCount > startIndex)
{
productCollectionsTaskList.Add(productResource.GetProductsAsync(pageSize: pageSize, startIndex: startIndex));
startIndex += pageSize;
}
while(productCollectionsTaskList.Count > 0)
{
var finishedTask = await Task.WhenAny(productCollectionsTaskList);
productCollectionsTaskList.Remove(finishedTask);
productsList.AddRange((await finishedTask).Items);
}
return productsList;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment