public double Handle(CalculateTrolleyQuery query) { TrolleyGuard.AgainstDuplicatePurchasedQuantities(query); var(appliedSpecials, remainingPurchasedQuantities) = SubstituteQuantitiesWithSpecials(query.Specials, query.Quantities); return(CalculateTotalPrice(query.Products, appliedSpecials, remainingPurchasedQuantities)); }
public static void AgainstDuplicatePurchasedQuantities(CalculateTrolleyQuery query) { if (query.Quantities.GroupBy(quantity => quantity.Name).Any(grouping => grouping.Count() > 1)) { throw new ArgumentException("Duplicate purchased product name not allowed"); } }