Ejemplo n.º 1
0
        public async Task <EditDietaryProfile> GetAsync(int userId)
        {
            DietaryProfile profile = await _dietaryProfilesRepository.GetAsync(userId);

            var result = _mapper.Map <EditDietaryProfile>(profile);

            return(result);
        }
Ejemplo n.º 2
0
        public RecipeNutritionSummary Resolve(Recipe source, object dest, RecipeNutritionSummary destMember, ResolutionContext context)
        {
            RecipeIngredient[] validRecipeIngredients = source.RecipeIngredients
                                                        .Where(x => x.Amount.HasValue &&
                                                               ((x.Ingredient.ServingSizeIsOneUnit && x.Unit == null) || (!x.Ingredient.ServingSizeIsOneUnit && x.Unit != null)))
                                                        .ToArray();

            var nutritionSummary = new RecipeNutritionSummary();

            foreach (var recipeIngredient in validRecipeIngredients)
            {
                bool   ingredientHasNutritionData = false;
                short  servingSize          = recipeIngredient.Ingredient.ServingSize;
                bool   servingSizeIsOneUnit = recipeIngredient.Ingredient.ServingSizeIsOneUnit;
                float  amount   = recipeIngredient.Amount.Value;
                string unit     = recipeIngredient.Unit;
                byte   servings = source.Servings;

                if (recipeIngredient.Ingredient.Calories.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Calories  = AddGramsValuePerAmountAndServing(nutritionSummary.Calories, recipeIngredient.Ingredient.Calories.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Fat.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Fat       = AddGramsValuePerAmountAndServing(nutritionSummary.Fat, recipeIngredient.Ingredient.Fat.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.SaturatedFat.HasValue)
                {
                    ingredientHasNutritionData    = true;
                    nutritionSummary.SaturatedFat = AddGramsValuePerAmountAndServing(nutritionSummary.SaturatedFat, recipeIngredient.Ingredient.SaturatedFat.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Carbohydrate.HasValue)
                {
                    ingredientHasNutritionData    = true;
                    nutritionSummary.Carbohydrate = AddGramsValuePerAmountAndServing(nutritionSummary.Carbohydrate, recipeIngredient.Ingredient.Carbohydrate.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Sugars.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Sugars    = AddGramsValuePerAmountAndServing(nutritionSummary.Sugars, recipeIngredient.Ingredient.Sugars.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.AddedSugars.HasValue)
                {
                    ingredientHasNutritionData   = true;
                    nutritionSummary.AddedSugars = AddGramsValuePerAmountAndServing(nutritionSummary.AddedSugars, recipeIngredient.Ingredient.AddedSugars.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Fiber.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Fiber     = AddGramsValuePerAmountAndServing(nutritionSummary.Fiber, recipeIngredient.Ingredient.Fiber.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Protein.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Protein   = AddGramsValuePerAmountAndServing(nutritionSummary.Protein, recipeIngredient.Ingredient.Protein.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Sodium.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Sodium    = AddMilligramsValuePerAmountAndServing(nutritionSummary.Sodium, recipeIngredient.Ingredient.Sodium.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Cholesterol.HasValue)
                {
                    ingredientHasNutritionData   = true;
                    nutritionSummary.Cholesterol = AddMilligramsValuePerAmountAndServing(nutritionSummary.Cholesterol, recipeIngredient.Ingredient.Cholesterol.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.VitaminA.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.VitaminA  = AddMilligramsValuePerAmountAndServing(nutritionSummary.VitaminA, recipeIngredient.Ingredient.VitaminA.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.VitaminC.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.VitaminC  = AddMilligramsValuePerAmountAndServing(nutritionSummary.VitaminC, recipeIngredient.Ingredient.VitaminC.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.VitaminD.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.VitaminD  = AddMilligramsValuePerAmountAndServing(nutritionSummary.VitaminD, recipeIngredient.Ingredient.VitaminD.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Calcium.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Calcium   = AddMilligramsValuePerAmountAndServing(nutritionSummary.Calcium, recipeIngredient.Ingredient.Calcium.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Iron.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Iron      = AddMilligramsValuePerAmountAndServing(nutritionSummary.Iron, recipeIngredient.Ingredient.Iron.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Potassium.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Potassium = AddMilligramsValuePerAmountAndServing(nutritionSummary.Potassium, recipeIngredient.Ingredient.Potassium.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }
                if (recipeIngredient.Ingredient.Magnesium.HasValue)
                {
                    ingredientHasNutritionData = true;
                    nutritionSummary.Magnesium = AddMilligramsValuePerAmountAndServing(nutritionSummary.Magnesium, recipeIngredient.Ingredient.Magnesium.Value, servingSize, servingSizeIsOneUnit, amount, unit, servings);
                }

                if (ingredientHasNutritionData)
                {
                    nutritionSummary.IngredientIds.Add(recipeIngredient.Ingredient.Id);
                }
            }

            RecommendedIntake intake         = null;
            DietaryProfile    dietaryProfile = source.User.DietaryProfile;

            if (dietaryProfile != null)
            {
                IEnumerable <DailyIntakeAgeGroup> intakeByGender = dietaryProfile.Gender == "Male" ? _dailyIntakeRef.Male : _dailyIntakeRef.Female;
                short age = dietaryProfile.GetAge();
                intake = intakeByGender.FirstOrDefault(x => age >= x.AgeFrom && age <= x.AgeTo).RecommendedIntake;
            }

            if (nutritionSummary.Calories.HasValue)
            {
                if (intake != null && dietaryProfile.TrackCalories)
                {
                    short dailyCalories = dietaryProfile.CustomCalories ?? _dailyIntakeHelper.DeriveDailyCaloriesIntake(dietaryProfile.GetAge(), dietaryProfile.Gender,
                                                                                                                        dietaryProfile.Height.Value, dietaryProfile.Weight.Value, dietaryProfile.ActivityLevel, dietaryProfile.Goal);
                    nutritionSummary.CaloriesFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyCalories, nutritionSummary.Calories.Value);
                    nutritionSummary.CaloriesFromDailyGrade = GetDailyGrade(nutritionSummary.CaloriesFromDaily.Value, false);
                }

                nutritionSummary.Calories = (float)Math.Ceiling((double)nutritionSummary.Calories);
            }
            if (nutritionSummary.Fat.HasValue)
            {
                nutritionSummary.Fat = (float)Math.Round((double)nutritionSummary.Fat, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.SaturatedFat.HasValue)
            {
                if (intake != null && dietaryProfile.TrackSaturatedFat)
                {
                    short dailySaturatedFat = dietaryProfile.CustomSaturatedFat ?? intake.SaturatedFatMax;
                    nutritionSummary.SaturatedFatFromDaily      = GetPercentageFromRecommendedDailyIntake(dailySaturatedFat, nutritionSummary.SaturatedFat.Value);
                    nutritionSummary.SaturatedFatFromDailyGrade = GetDailyGrade(nutritionSummary.SaturatedFatFromDaily.Value, false);
                }

                nutritionSummary.SaturatedFat = (float)Math.Round((double)nutritionSummary.SaturatedFat, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Carbohydrate.HasValue)
            {
                if (intake != null && dietaryProfile.TrackCarbohydrate)
                {
                    short dailyCarbohydrate = dietaryProfile.CustomCarbohydrate ?? intake.Carbohydrate;
                    nutritionSummary.CarbohydrateFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyCarbohydrate, nutritionSummary.Carbohydrate.Value);
                    nutritionSummary.CarbohydrateFromDailyGrade = GetDailyGrade(nutritionSummary.CarbohydrateFromDaily.Value, false);
                }

                nutritionSummary.Carbohydrate = (float)Math.Round((double)nutritionSummary.Carbohydrate, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Sugars.HasValue)
            {
                nutritionSummary.Sugars = (float)Math.Round((double)nutritionSummary.Sugars, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.AddedSugars.HasValue)
            {
                if (intake != null && dietaryProfile.TrackAddedSugars)
                {
                    short dailyAddedSugars = dietaryProfile.CustomAddedSugars ?? intake.AddedSugarsMax;
                    nutritionSummary.AddedSugarsFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyAddedSugars, nutritionSummary.AddedSugars.Value);
                    nutritionSummary.AddedSugarsFromDailyGrade = GetDailyGrade(nutritionSummary.AddedSugarsFromDaily.Value, false);
                }

                nutritionSummary.AddedSugars = (float)Math.Round((double)nutritionSummary.AddedSugars, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Fiber.HasValue)
            {
                if (intake != null && dietaryProfile.TrackFiber)
                {
                    float dailyFiber = dietaryProfile.CustomFiber ?? intake.Fiber;
                    nutritionSummary.FiberFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyFiber, nutritionSummary.Fiber.Value);
                    nutritionSummary.FiberFromDailyGrade = GetDailyGrade(nutritionSummary.FiberFromDaily.Value, true);
                }

                nutritionSummary.Fiber = (float)Math.Round((double)nutritionSummary.Fiber, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Protein.HasValue)
            {
                if (intake != null && dietaryProfile.TrackProtein)
                {
                    short dailyProtein = dietaryProfile.CustomProtein ?? intake.Protein;
                    nutritionSummary.ProteinFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyProtein, nutritionSummary.Protein.Value);
                    nutritionSummary.ProteinFromDailyGrade = GetDailyGrade(nutritionSummary.ProteinFromDaily.Value, true);
                }

                nutritionSummary.Protein = (float)Math.Round((double)nutritionSummary.Protein, 2, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Sodium.HasValue)
            {
                if (intake != null && dietaryProfile.TrackSodium)
                {
                    short dailySodium = dietaryProfile.CustomSodium ?? intake.Sodium;
                    nutritionSummary.SodiumFromDaily      = GetPercentageFromRecommendedDailyIntake(dailySodium, nutritionSummary.Sodium.Value);
                    nutritionSummary.SodiumFromDailyGrade = GetDailyGrade(nutritionSummary.SodiumFromDaily.Value, false);
                }

                nutritionSummary.Sodium = (float)Math.Round((double)nutritionSummary.Sodium, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Cholesterol.HasValue)
            {
                if (intake != null && dietaryProfile.TrackCholesterol)
                {
                    short dailyCholesterol = dietaryProfile.CustomCholesterol ?? intake.CholesterolMax;
                    nutritionSummary.CholesterolFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyCholesterol, nutritionSummary.Cholesterol.Value);
                    nutritionSummary.CholesterolFromDailyGrade = GetDailyGrade(nutritionSummary.CholesterolFromDaily.Value, false);
                }

                nutritionSummary.Cholesterol = (float)Math.Round((double)nutritionSummary.Cholesterol, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.VitaminA.HasValue)
            {
                if (intake != null && dietaryProfile.TrackVitaminA)
                {
                    short dailyVitaminA = dietaryProfile.CustomVitaminA ?? intake.VitaminA;
                    nutritionSummary.VitaminAFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyVitaminA, nutritionSummary.VitaminA.Value);
                    nutritionSummary.VitaminAFromDailyGrade = GetDailyGrade(nutritionSummary.VitaminAFromDaily.Value, true);
                }

                nutritionSummary.VitaminA = (float)Math.Round((double)nutritionSummary.VitaminA, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.VitaminC.HasValue)
            {
                if (intake != null && dietaryProfile.TrackVitaminC)
                {
                    short dailyVitaminC = dietaryProfile.CustomVitaminC ?? intake.VitaminC;
                    nutritionSummary.VitaminCFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyVitaminC, nutritionSummary.VitaminC.Value);
                    nutritionSummary.VitaminCFromDailyGrade = GetDailyGrade(nutritionSummary.VitaminCFromDaily.Value, true);
                }

                nutritionSummary.VitaminC = (float)Math.Round((double)nutritionSummary.VitaminC, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.VitaminD.HasValue)
            {
                if (intake != null && dietaryProfile.TrackVitaminD)
                {
                    short dailyVitaminD = dietaryProfile.CustomVitaminD ?? intake.VitaminD;
                    nutritionSummary.VitaminDFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyVitaminD, nutritionSummary.VitaminD.Value);
                    nutritionSummary.VitaminDFromDailyGrade = GetDailyGrade(nutritionSummary.VitaminDFromDaily.Value, true);
                }

                nutritionSummary.VitaminD = (float)Math.Round((double)nutritionSummary.VitaminD, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Calcium.HasValue)
            {
                if (intake != null && dietaryProfile.TrackCalcium)
                {
                    short dailyCalcium = dietaryProfile.CustomCalcium ?? intake.Calcium;
                    nutritionSummary.CalciumFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyCalcium, nutritionSummary.Calcium.Value);
                    nutritionSummary.CalciumFromDailyGrade = GetDailyGrade(nutritionSummary.CalciumFromDaily.Value, true);
                }

                nutritionSummary.Calcium = (float)Math.Round((double)nutritionSummary.Calcium, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Iron.HasValue)
            {
                if (intake != null && dietaryProfile.TrackIron)
                {
                    short dailyIron = dietaryProfile.CustomIron ?? intake.Iron;
                    nutritionSummary.IronFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyIron, nutritionSummary.Iron.Value);
                    nutritionSummary.IronFromDailyGrade = GetDailyGrade(nutritionSummary.IronFromDaily.Value, true);
                }

                nutritionSummary.Iron = (float)Math.Round((double)nutritionSummary.Iron, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Potassium.HasValue)
            {
                if (intake != null && dietaryProfile.TrackPotassium)
                {
                    short dailyPotassium = dietaryProfile.CustomPotassium ?? intake.Potassium;
                    nutritionSummary.PotassiumFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyPotassium, nutritionSummary.Potassium.Value);
                    nutritionSummary.PotassiumFromDailyGrade = GetDailyGrade(nutritionSummary.PotassiumFromDaily.Value, true);
                }

                nutritionSummary.Potassium = (float)Math.Round((double)nutritionSummary.Potassium, 1, MidpointRounding.AwayFromZero);
            }
            if (nutritionSummary.Magnesium.HasValue)
            {
                if (intake != null && dietaryProfile.TrackMagnesium)
                {
                    short dailyMagnesium = dietaryProfile.CustomMagnesium ?? intake.Magnesium;
                    nutritionSummary.MagnesiumFromDaily      = GetPercentageFromRecommendedDailyIntake(dailyMagnesium, nutritionSummary.Magnesium.Value);
                    nutritionSummary.MagnesiumFromDailyGrade = GetDailyGrade(nutritionSummary.MagnesiumFromDaily.Value, true);
                }

                nutritionSummary.Magnesium = (float)Math.Round((double)nutritionSummary.Magnesium, 1, MidpointRounding.AwayFromZero);
            }

            nutritionSummary.IsSet = nutritionSummary.Calories.HasValue ||
                                     nutritionSummary.Fat.HasValue ||
                                     nutritionSummary.SaturatedFat.HasValue ||
                                     nutritionSummary.Carbohydrate.HasValue ||
                                     nutritionSummary.Sugars.HasValue ||
                                     nutritionSummary.AddedSugars.HasValue ||
                                     nutritionSummary.Fiber.HasValue ||
                                     nutritionSummary.Protein.HasValue ||
                                     nutritionSummary.Sodium.HasValue ||
                                     nutritionSummary.Cholesterol.HasValue ||
                                     nutritionSummary.VitaminA.HasValue ||
                                     nutritionSummary.VitaminC.HasValue ||
                                     nutritionSummary.VitaminD.HasValue ||
                                     nutritionSummary.Calcium.HasValue ||
                                     nutritionSummary.Iron.HasValue ||
                                     nutritionSummary.Potassium.HasValue ||
                                     nutritionSummary.Magnesium.HasValue;

            return(nutritionSummary);
        }