public List <Meal> GetMeals(MealRequest request)
        {
            IEnumerable <int> prepTimes             = request.IncludePrepTimes?.Select(prepTime => (int)prepTime);
            IEnumerable <int> cuisines              = request.IncludeCuisines?.Select(cuisine => (int)cuisine);
            IEnumerable <int> includeCarbOptions    = request.IncludeCarbs?.Select(co => (int)co);
            IEnumerable <int> excludeCarbOptions    = request.ExcludeCarbs?.Select(co => (int)co);
            IEnumerable <int> includeProteinOptions = request.IncludeProteins?.Select(po => (int)po);
            IEnumerable <int> excludeProteinOptions = request.ExcludeProteins?.Select(po => (int)po);

            var meals = from m in dataContext.Meal
                        join mco in dataContext.MealCarbohydrateOption on m.Id equals mco.MealId
                        join co in dataContext.CarbohydrateOption on mco.CarbohydrateOptionId equals co.Id
                        join mpo in dataContext.MealProteinOption on m.Id equals mpo.MealId
                        join po in dataContext.ProteinOption on mpo.ProteinOptionId equals po.Id
                        join c in dataContext.Cuisine on m.CuisineId equals c.Id
                        where (prepTimes == null || prepTimes.Count() == 0 || prepTimes.Contains(m.PreperationTimeId) == true)

                        && (cuisines == null || cuisines.Count() == 0 || cuisines.Contains(m.CuisineId) == true)

                        && (includeCarbOptions == null || includeCarbOptions.Count() == 0 || includeCarbOptions.Contains(co.Id)) &&
                        (excludeCarbOptions == null || excludeCarbOptions.Count() == 0 || !excludeCarbOptions.Contains(co.Id))

                        && (includeProteinOptions == null || includeProteinOptions.Count() == 0 || includeProteinOptions.Contains(po.Id)) &&
                        (excludeProteinOptions == null || excludeProteinOptions.Count() == 0 || !excludeProteinOptions.Contains(po.Id))

                        && (request.VegetarianOption == null || po.IsVegetarian == request.VegetarianOption) &&
                        (request.LowCarbOption == null || co.IsLowCarbOption == request.LowCarbOption)

                        select new
            {
                MealId      = m.Id,
                MealName    = m.Name,
                CarbName    = co.Name,
                ProteinName = po.Name,
                CuisineName = c.Name
            };

            var QueryResults = meals.ToList();

            List <Meal> results = new List <Meal>();

            List <int> mealIds = QueryResults.Select(m => m.MealId).Distinct().ToList();

            foreach (var mealId in mealIds)
            {
                results.Add(new Meal
                {
                    Id          = mealId,
                    Name        = QueryResults.First(m => m.MealId == mealId).MealName,
                    Cuisine     = QueryResults.First(m => m.MealId == mealId).CuisineName,
                    CarbOptions = QueryResults.Where(m => m.MealId == mealId).Select(m => m.CarbName).Distinct().ToList(),
                    Proteins    = QueryResults.Where(m => m.MealId == mealId).Select(m => m.ProteinName).Distinct().ToList(),
                });
            }

            return(results);
        }
 public MealModel Post([FromBody] MealRequest request)
 {
     if (request.MealId > 0)
     {
         _mealService.EditMeal(_loggedInUser, request);
     }
     else
     {
         request.MealId = _mealService.AddMeal(_loggedInUser, request);
     }
     return(_mealService.GetMeal(_loggedInUser, request.UserId, request.MealId));
 }
Beispiel #3
0
        public int AddMeal(LoginModel loggedInUser, MealRequest request)
        {
            ValidateObject(request, false);
            CheckPermission(loggedInUser, request.UserId, "You can't add other's meal.");

            var model = new MealModel()
            {
                Date        = request.Date,
                Description = request.Description,
                Calories    = request.Calories,
            };

            return(_mealRepository.AddMeal(request.UserId, model));
        }
Beispiel #4
0
        public void EditMeal(LoginModel loggedInUser, MealRequest request)
        {
            ValidateObject(request, true);
            CheckPermission(loggedInUser, request.UserId, "You can't edit other's meal.");

            var model = new MealModel()
            {
                MealId      = request.MealId,
                Date        = request.Date,
                Description = request.Description,
                Calories    = request.Calories,
            };

            _mealRepository.EditMeal(request.UserId, model);
        }
        private static bool TryParse(SingleMealRequest request, out MealRequest domainRequest)
        {
            domainRequest = new MealRequest
            {
                LowCarbOption    = request.LowCarbOption,
                VegetarianOption = request.VegetarianOption
            };

            try
            {
                if (request.CuisineFilter != null && request.CuisineFilter.Length > 0)
                {
                    domainRequest.IncludeCuisines = request.CuisineFilter.Select(c => Enum.Parse <CuisineType>(c.ToString())).ToList();
                }

                if (request.PrepTimeFilter != null && request.PrepTimeFilter.Length > 0)
                {
                    domainRequest.IncludePrepTimes = request.PrepTimeFilter.Select(c => Enum.Parse <PrepTimeOptionsType>(c.ToString())).ToList();
                }

                if (request.ExcludeCarbIds != null && request.ExcludeCarbIds.Length > 0)
                {
                    domainRequest.ExcludeCarbs = request.ExcludeCarbIds.Select(c => Enum.Parse <CarbOptionsType>(c.ToString())).ToList();
                }

                if (request.IncludeCarbIds != null && request.IncludeCarbIds.Length > 0)
                {
                    domainRequest.IncludeCarbs = request.IncludeCarbIds.Select(c => Enum.Parse <CarbOptionsType>(c.ToString())).ToList();
                }

                if (request.ExcludeProteinIds != null && request.ExcludeProteinIds.Length > 0)
                {
                    domainRequest.ExcludeProteins = request.ExcludeProteinIds.Select(c => Enum.Parse <ProteinOptionsType>(c.ToString())).ToList();
                }

                if (request.IncludeProteinIds != null && request.IncludeProteinIds.Length > 0)
                {
                    domainRequest.IncludeProteins = request.IncludeProteinIds.Select(c => Enum.Parse <ProteinOptionsType>(c.ToString())).ToList();
                }

                return(true);
            }
            catch { }

            return(false);
        }
        public IActionResult Update(Guid id, [FromBody] MealRequest request)
        {
            var meal = nutritionRepository.GetMeal(id);

            if (meal.UserId != CurrentUserId)
            {
                return(Unauthorized());
            }
            AutoMapper.Mapper.Map(request, meal);
            AdjustTime(meal);
            meal = MergeBySameDefinition(meal);
            CalculateNutrients(meal);

            nutritionRepository.UpdateMeal(meal);

            var result = AutoMapper.Mapper.Map <MealDetailsResponse>(meal);

            return(Ok(result));
        }
Beispiel #7
0
 private static void ValidateObject(MealRequest request, bool existingMeal)
 {
     if (request.UserId <= 0)
     {
         throw new BadArgumentException("UserId must be provided.");
     }
     if (existingMeal && request.MealId <= 0)
     {
         throw new BadArgumentException("MealId must be provided.");
     }
     if (request.Calories < 0)
     {
         throw new BadArgumentException("Number of calories cannot be negative.");
     }
     if (request.Date == DateTime.MinValue)
     {
         throw new BadArgumentException("You must enter a valid date.");
     }
 }
        public IActionResult Create([FromBody] MealRequest request)
        {
            var meal = AutoMapper.Mapper.Map <MealDetails>(request);

            meal.UserId  = CurrentUserId;
            meal.Created = DateTimeOffset.Now;
            AdjustTime(meal);
            meal = MergeBySameDefinition(meal);
            CalculateNutrients(meal);
            if (meal.Id == Guid.Empty)
            {
                nutritionRepository.CreateMeal(meal);
            }
            else
            {
                nutritionRepository.UpdateMeal(meal);
            }

            var result = AutoMapper.Mapper.Map <MealDetailsResponse>(meal);

            return(Ok(result));
        }
Beispiel #9
0
 public List <Meal> FindMeal(MealRequest request)
 {
     return(mealRepository.GetMeals(request));
 }