Example #1
0
        public HttpResponseMessage GetByDate(long date)
        {
            // Получаем смещение времени пользователя
            int timezoneOffset = RequestHelper.GetTimezoneOffset(Request);
            var zonedDateTime  = TimeHelper.ConvertFromUtc(TimeHelper.FromUnixMsToDateTime(date), timezoneOffset);
            var zonedDate      = zonedDateTime.Date;

            var workoutDiaryEntries = unitOfWork.WorkoutDiaryEntryRepository.Get(
                f => (f.CreateUserId == currentUserId &&
                      DbFunctions.DiffDays(
                          // Выбрасываем время, оставляем только дату
                          DbFunctions.TruncateTime(
                              // Добавляем смещение временной зоны пользователя, получаем время из БД в часовом формате пользователя
                              DbFunctions.AddMinutes(f.DateUTC, timezoneOffset)
                              ),
                          zonedDate) == 0),
                null,
                iE => iE.Exercise,
                iES => iES.Sets
                );

            // Преобразовываем в DTO-объект для ответа
            var workoutDiaryEntryDTO = Mapper.Map <IEnumerable <WorkoutDiaryEntryDTO> >(workoutDiaryEntries);

            return(Request.CreateResponse <IEnumerable <WorkoutDiaryEntryDTO> >(HttpStatusCode.OK, workoutDiaryEntryDTO));
        }
Example #2
0
        public HttpResponseMessage GetBurnedCalories(long date)
        {
            // Получаем смещение времени пользователя
            int timezoneOffset = RequestHelper.GetTimezoneOffset(Request);
            var zonedDateTime  = TimeHelper.ConvertFromUtc(TimeHelper.FromUnixMsToDateTime(date), timezoneOffset);
            var zonedDate      = zonedDateTime.Date;

            var workoutDiaryEntries = unitOfWork.WorkoutDiaryEntryRepository.Get(
                f => (f.CreateUserId == currentUserId &&
                      DbFunctions.DiffDays(
                          // Выбрасываем время, оставляем только дату
                          DbFunctions.TruncateTime(
                              // Добавляем смещение временной зоны пользователя, получаем время из БД в часовом формате пользователя
                              DbFunctions.AddMinutes(f.DateUTC, timezoneOffset)
                              ),
                          zonedDate) == 0),
                null,
                iE => iE.Exercise,
                iES => iES.Sets
                );

            decimal burnedCalories = 0;

            if (workoutDiaryEntries != null &&
                workoutDiaryEntries.Count() > 0)
            {
                burnedCalories = workoutDiaryEntries.Select(s => s.BurnedCalories).Sum();
            }

            return(Request.CreateResponse(HttpStatusCode.OK, Helpers.Utilities.RoundAFZ(burnedCalories)));
        }
Example #3
0
        public HttpResponseMessage GetByDate(long date)
        {
            #region _Temp_
            // Получаем идентификатор часового пояса пользователя
            //var userTzId = unitOfWork.UserProfileRepository.Get(
            //  f => f.UserId == currentUserId,
            //  null)
            //  .SingleOrDefault()
            //  .TimezoneId;
            // Структура из которой можно определить переданное время в часовом поясе пользователя
            //var zonedDateTime2 = new TimeHelper.DateTimeWithZone(date, "Russian Standard Time");
            // Получаем данные о записях из БД на переданную дату в часовом поясе полльзователя
            //var foodDiaryEntries2 = unitOfWork.FoodDiaryEntryRepository.Get(
            //  f => (f.CreateUserId == currentUserId &&
            //        EntityFunctions.DiffDays(
            //      // Выбрасываем время, оставляем только дату
            //          EntityFunctions.TruncateTime(
            //      // Добавляем смещение временной зоны пользователя, получаем время из БД в часовом формате пользователя
            //            EntityFunctions.AddMilliseconds(f.Date, zonedDateTime2.ZonedUniversalDateTime.Offset.Milliseconds)
            //         ),
            //         zonedDateTime2.LocalTime.Date) == 0),
            //  null,
            //  iF => iF.Food,
            //  iS => iS.Food.Servings
            //);
            #endregion

            // Получаем смещение времени пользователя
            int timezoneOffset = RequestHelper.GetTimezoneOffset(Request);
            var zonedDateTime  = TimeHelper.ConvertFromUtc(TimeHelper.FromUnixMsToDateTime(date), timezoneOffset);
            var zonedDate      = zonedDateTime.Date;

            var foodDiaryEntries = unitOfWork.FoodDiaryEntryRepository.Get(
                f => (f.CreateUserId == currentUserId &&
                      DbFunctions.DiffDays(
                          // Выбрасываем время, оставляем только дату
                          DbFunctions.TruncateTime(
                              // Добавляем смещение временной зоны пользователя, получаем время из БД в часовом формате пользователя
                              DbFunctions.AddMinutes(f.Date, timezoneOffset)
                              ),
                          zonedDate) == 0),
                null,
                iF => iF.Food,
                iS => iS.Food.Servings
                );

            // Преобразовываем в DTO-объект для ответа
            var foodDiaryEntryDTO = Mapper.Map <IEnumerable <FoodDiaryEntryDTO> >(foodDiaryEntries);

            return(Request.CreateResponse <IEnumerable <FoodDiaryEntryDTO> >(HttpStatusCode.OK, foodDiaryEntryDTO));
        }
Example #4
0
        public HttpResponseMessage GetNutritionInfo(long date)
        {
            // Получаем смещение времени пользователя
            int timezoneOffset = RequestHelper.GetTimezoneOffset(Request);
            var zonedDateTime  = TimeHelper.ConvertFromUtc(TimeHelper.FromUnixMsToDateTime(date), timezoneOffset);
            var zonedDate      = zonedDateTime.Date;

            var foodDiaryEntries = unitOfWork.FoodDiaryEntryRepository.Get(
                f => (f.CreateUserId == currentUserId &&
                      DbFunctions.DiffDays(
                          // Выбрасываем время, оставляем только дату
                          DbFunctions.TruncateTime(
                              // Добавляем смещение временной зоны пользователя, получаем время из БД в часовом формате пользователя
                              DbFunctions.AddMinutes(f.Date, timezoneOffset)
                              ),
                          zonedDate) == 0),
                null,
                iF => iF.Food,
                iS => iS.Food.Servings
                );

            var consumedNInfo      = new NutritionInfoDTO();
            var plannedNInfo       = new NutritionInfoDTO();
            int plannedMealsCount  = 0;
            int consumedMealsCount = 0;

            if (foodDiaryEntries != null &&
                foodDiaryEntries.Count() > 0)
            {
                foreach (var entry in foodDiaryEntries)
                {
                    var serving = entry.Food.Servings.Where(s =>
                                                            (s.ServingId == entry.FtSelectedServingId && entry.FsSelectedServingId == 0) ||
                                                            (s.FSServingId == entry.FsSelectedServingId && entry.FtSelectedServingId == 0) ||
                                                            (s.ServingId == entry.FtSelectedServingId && entry.FsSelectedServingId != 0 && entry.FtSelectedServingId != 0)
                                                            ).SingleOrDefault();
                    if (serving != null)
                    {
                        if (entry.IsCompleted == true)
                        {
                            // Суммируем значения энергетической ценности уже потребленной еды.
                            consumedNInfo.Sum(serving, entry.FoodQty);
                            consumedMealsCount++;
                        }
                        else
                        {
                            // Суммируем значения энергетической ценности запланированной к потреблению еды.
                            plannedNInfo.Sum(serving, entry.FoodQty);
                            plannedMealsCount++;
                        }
                    }
                }

                #region __Округляем значения__
                // Consumed info.
                consumedNInfo.Round(2);
                // Planned info.
                plannedNInfo.Round(2);
                #endregion
            }

            return(Request.CreateResponse(
                       HttpStatusCode.OK,
                       new {
                consumedNInfo = consumedNInfo,
                plannedNInfo = plannedNInfo,
                plannedMealsCount = plannedMealsCount,
                consumedMealsCount = consumedMealsCount
            }));
        }