public async Task <ShoppingCartDto> Handle(GetCartQuery request, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); Domain.Entities.ShoppingCart?shoppingCart = await applicationDataContext .ShoppingCarts .AsQueryable() .Include(sc => sc.Discounts) .FirstAsync(); System.Collections.Generic.IEnumerable <Domain.Entities.ShoppingCartItem>?shoppingCartItems = applicationDataContext.ShoppingCartItems .Include(sci => sci.Product) .Include(sci => sci.ProductVariant) .AsEnumerable(); decimal total = 0; foreach (Domain.Entities.ShoppingCartItem?item in shoppingCartItems) { if (item.ProductVariant != null) { total += await priceService.GetProductPriceAsync(shoppingCart.Discounts, item.ProductVariant) * item.Quantity; } else { total += await priceService.GetProductPriceAsync(shoppingCart.Discounts, item.Product) * item.Quantity; } } return(new ShoppingCartDto() { Items = mapper.ProjectTo <ShoppingCartItemDto>(shoppingCartItems.AsQueryable()), Total = total }); }
/// <summary> /// Applies the cursor pagination algorithm to the <paramref name="enumerable"/>. /// </summary> /// <param name="enumerable"> /// The enumerable on which the the cursor pagination algorithm shall be applied to. /// </param> /// <param name="context"> /// The field resolver context. /// </param> /// <param name="defaultPageSize"> /// The default page size if no boundaries are set. /// </param> /// <param name="totalCount"> /// The total count if already known. /// </param> /// <param name="cancellationToken"> /// The cancellation token. /// </param> /// <typeparam name="TEntity"> /// The entity type. /// </typeparam> /// <returns> /// Returns a connection instance that represents the result of applying the /// cursor paging algorithm to the provided <paramref name="enumerable"/>. /// </returns> public static ValueTask <Connection <TEntity> > ApplyCursorPaginationAsync <TEntity>( this System.Collections.Generic.IEnumerable <TEntity> enumerable, IResolverContext context, int?defaultPageSize = null, int?totalCount = null, CancellationToken cancellationToken = default) => ApplyCursorPaginationAsync( enumerable.AsQueryable(), context, defaultPageSize, totalCount, cancellationToken);