public async Task <IEnumerable <SnackOutput> > GetAllSnacks() { var snacks = await _snackRepository.GetAllSnacks(); foreach (var snack in snacks) { snack.Ingredients = await _snackRepository.GetSnackIngredients(snack.Id); foreach (var snackIngredient in snack.Ingredients) { snackIngredient.Total(); var discount = await _discountRepository.GetByIngredientAllowedId(snackIngredient.Id); if (discount != null) { if (discount.DiscountRule == EDiscountRule.RestrictionBased) { var existsSnackNotAllowed = snack.Ingredients.Where(x => x.Id == discount.IdIngredientNotAllowed); if (existsSnackNotAllowed == null) { snackIngredient.ApplyDiscount(discount.Percent); } } else if (discount.DiscountRule == EDiscountRule.QuantityBased && snackIngredient.Quantity >= discount.Quantity) { snackIngredient.ApplyDiscount(discount.Percent); } } } snack.Total(); } return(snacks); }