示例#1
0
        public void TestDayNameUnique()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.RestSeconds  = 60;
            plan.Name         = "name";
            plan.Author       = "author";
            plan.TrainingType = TrainingType.Split;
            var day1 = new TrainingPlanDay();

            day1.Name = "Day 1";
            plan.AddDay(day1);
            TrainingPlanEntry entry = new TrainingPlanEntry();

            entry.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("9934E9E3-50DC-4B34-8B67-092084894740")
            };
            day1.AddEntry(entry);
            entry.Sets.Add(new TrainingPlanSerie(10));
            var day2 = new TrainingPlanDay();

            day2.Name = "Day 1";
            plan.AddDay(day2);
            entry          = new TrainingPlanEntry();
            entry.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("9934E9E3-50DC-4B34-8B67-092084894740")
            };
            day2.AddEntry(entry);
            entry.Sets.Add(new TrainingPlanSerie(10));

            checkSingle(plan, day2, TrainingPlanCheckItemStatus.Error, "TrainingPlan_DaysName_Unique");
        }
示例#2
0
        public void TestIsolationExerciseBeforeCompoud()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.RestSeconds  = 60;
            plan.Name         = "name";
            plan.Author       = "author";
            plan.TrainingType = TrainingType.Split;
            var day = new TrainingPlanDay();

            day.Name = "day1";
            plan.AddDay(day);
            TrainingPlanEntry entryIsolated = new TrainingPlanEntry();

            entryIsolated.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("01C796E2-0119-4F95-9A9A-79F2890DF658")
            };
            day.AddEntry(entryIsolated);
            entryIsolated.Sets.Add(new TrainingPlanSerie(10));
            TrainingPlanEntry entryCompoud = new TrainingPlanEntry();

            entryCompoud.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("9934E9E3-50DC-4B34-8B67-092084894740")
            };
            day.AddEntry(entryCompoud);
            entryCompoud.Sets.Add(new TrainingPlanSerie(10));

            checkSingle(plan, entryIsolated, TrainingPlanCheckItemStatus.Information, "Split_IsolationExerciseBeforeCompoud");
        }
示例#3
0
        //public void DeleteExercise(Token token, ExerciseDTO dto)
        //{
        //    var securityInfo = SecurityManager.EnsureAuthentication(token);
        //    Log.WriteWarning("DeleteExercise:Username={0},exerciseId={1}", securityInfo.SessionData.Profile.UserName, dto.GlobalId);


        //    //var dbPlan = Mapper.Map<WorkoutPlanDTO, BodyArchitect.Model.TrainingPlan>(dto);
        //    var session = Session;
        //    using (var tx = session.BeginTransaction())
        //    {
        //        ExerciseOperation.DeleteExercise(session, dto.GlobalId, securityInfo.SessionData.Profile.Id,Configuration.TimerService);
        //        tx.Commit();
        //    }
        //}

        //public void DeleteWorkoutPlan(Token token, TrainingPlanInfo dto)
        //{
        //    var securityInfo = SecurityManager.EnsureAuthentication(token);
        //    WorkoutPlanService service = new WorkoutPlanService(Session, securityInfo, Configuration);
        //    service.DeleteWorkoutPlan(dto);
        //}

        public TrainingPlan SaveWorkoutPlan(Token token, TrainingPlan dto)
        {
            var securityInfo           = SecurityManager.EnsureAuthentication(token);
            WorkoutPlanService service = new WorkoutPlanService(Session, securityInfo, Configuration);

            return(service.SaveWorkoutPlan(dto));
        }
示例#4
0
        public void TestFBW_15_10_5Plan()
        {
            Exercise exercise = new Exercise(Guid.NewGuid());

            exercise.Name     = "exercise 2";
            exercise.Shortcut = "E2";

            TrainingPlan plan = new TrainingPlan();

            plan.Comment      = "15-10-5";
            plan.TrainingType = TrainingType.FBW;
            TrainingPlanDay dayA = new TrainingPlanDay();

            plan.AddDay(dayA);
            TrainingPlanEntry entry = new TrainingPlanEntry();

            entry.Exercise = exercise.Map <ExerciseLightDTO>();
            dayA.Entries.Add(entry);

            TrainingPlanDay dayB = new TrainingPlanDay();

            plan.AddDay(dayB);
            TrainingPlanEntry entry1 = new TrainingPlanEntry();

            entry1.Exercise = exercise.Map <ExerciseLightDTO>();
            dayA.Entries.Add(entry1);
        }
示例#5
0
        public void TestDropSetInNotOnlyLastSet()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.RestSeconds  = 60;
            plan.Name         = "name";
            plan.Author       = "author";
            plan.TrainingType = TrainingType.Split;
            var day = new TrainingPlanDay();

            day.Name = "day1";
            plan.AddDay(day);
            TrainingPlanEntry entry = new TrainingPlanEntry();

            entry.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("9934E9E3-50DC-4B34-8B67-092084894740")
            };
            day.AddEntry(entry);
            entry.Sets.Add(new TrainingPlanSerie(10));
            entry.Sets.Add(new TrainingPlanSerie(10));
            var set1 = new TrainingPlanSerie(10);

            set1.DropSet = Service.V2.Model.DropSetType.IIDropSet;
            entry.Sets.Add(set1);
            var set2 = new TrainingPlanSerie(10);

            set2.DropSet = Service.V2.Model.DropSetType.IIDropSet;
            entry.Sets.Add(set2);

            checkSingle(plan, set1, TrainingPlanCheckItemStatus.Information, "TrainingPlan_DropSetInNotOnlyLastSet");
        }
示例#6
0
        public TrainingPlan WorkoutPlanOperation(WorkoutPlanOperationParam param)
        {
            Log.WriteWarning("WorkoutPlanFavoritesOperation: Username={0},userDto.GlobalId={1}", SecurityInfo.SessionData.Profile.UserName, param.Operation);

            if (!SecurityInfo.Licence.IsPremium)
            {
                throw new LicenceException("This feature is allowed for Premium account");
            }

            var          session = Session;
            TrainingPlan result  = null;

            using (var tx = session.BeginSaveTransaction())
            {
                var profileDb = session.Load <Profile>(SecurityInfo.SessionData.Profile.GlobalId);

                var workoutPlanDb = session.Get <BodyArchitect.Model.TrainingPlan>(param.WorkoutPlanId);


                if (param.Operation == SupplementsCycleDefinitionOperation.AddToFavorites)
                {
                    if (workoutPlanDb.Profile == profileDb || workoutPlanDb.Status == PublishStatus.Private)
                    {
                        throw new InvalidOperationException("Cannot add/remove your workout plan to the favorite list");
                    }
                    if (profileDb.FavoriteWorkoutPlans.Contains(workoutPlanDb))
                    {
                        throw new ObjectIsFavoriteException("Plan is in favorites list already");
                    }
                    profileDb.FavoriteWorkoutPlans.Add(workoutPlanDb);
                }
                else if (param.Operation == SupplementsCycleDefinitionOperation.RemoveFromFavorites)
                {
                    if (profileDb.FavoriteWorkoutPlans.Contains(workoutPlanDb))
                    {
                        profileDb.FavoriteWorkoutPlans.Remove(workoutPlanDb);
                    }
                    else
                    {
                        throw new ObjectIsNotFavoriteException("Plan is not in favorites list");
                    }
                }
                else if (param.Operation == SupplementsCycleDefinitionOperation.Publish)
                {
                    workoutPlanDb = publishWorkoutPlan(workoutPlanDb, profileDb);
                    result        = workoutPlanDb.Map <TrainingPlan>();
                }
                else if (param.Operation == SupplementsCycleDefinitionOperation.Delete)
                {
                    DeleteWorkoutPlan(param.WorkoutPlanId);
                }
                profileDb.DataInfo.WorkoutPlanHash = Guid.NewGuid();
                session.SaveOrUpdate(profileDb);
                tx.Commit();
                return(result);
            }
        }
示例#7
0
        public void TestGlobalRestSecondsNotSet()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.TrainingType = TrainingType.Split;
            plan.RestSeconds  = 0;
            plan.Name         = "name";
            plan.Author       = "author";
            checkSingle(plan, plan, TrainingPlanCheckItemStatus.Information, "TrainingPlan_RestSecond_Empty");
        }
示例#8
0
        public void TestTrainingPlanNameNotSet()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.TrainingType = TrainingType.Split;
            plan.Author       = "test";
            plan.RestSeconds  = 55;

            checkSingle(plan, plan, TrainingPlanCheckItemStatus.Error, "TrainingPlan_Name_Empty");
        }
示例#9
0
        private void checkSingle(TrainingPlan plan, BAGlobalObject planItem, TrainingPlanCheckItemStatus status, string resourceKey)
        {
            //Dictionary<Guid, ExerciseDTO> exerciseDtos = ObjectsConverter.ToExerciseDTO(exercises.Values).ToDictionary(t => t.GlobalId);
            Dictionary <Guid, ExerciseDTO> exerciseDtos = exercises.Values.Map <IList <ExerciseDTO> >().ToDictionary(t => t.GlobalId);
            TrainingPlanPack pack    = TrainingPlanPack.Create(plan, exerciseDtos);
            SplitPlanChecker checker = new SplitPlanChecker(pack);
            var result = checker.Check(exerciseDtos);

            Assert.AreEqual(1, result.Results.Count);
            Assert.AreEqual(status, result.Results[0].Status);
            Assert.AreEqual(resourceKey, result.Results[0].ResourceKey);
            Assert.AreEqual(planItem.GlobalId, result.Results[0].TrainingPlanBase.GlobalId);
        }
示例#10
0
        public void TestTwoIsolationExerciseBeforeCompoud()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.RestSeconds  = 60;
            plan.Name         = "name";
            plan.Author       = "author";
            plan.TrainingType = TrainingType.Split;
            var day = new TrainingPlanDay();

            day.Name = "day1";
            plan.AddDay(day);
            TrainingPlanEntry entryIsolated = new TrainingPlanEntry();

            entryIsolated.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("01C796E2-0119-4F95-9A9A-79F2890DF658")
            };
            day.AddEntry(entryIsolated);
            entryIsolated.Sets.Add(new TrainingPlanSerie(10));
            TrainingPlanEntry secondIsolated = new TrainingPlanEntry();

            secondIsolated.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("D6562C2A-BD74-46BE-8398-57B56BD698D5")
            };
            day.AddEntry(secondIsolated);
            secondIsolated.Sets.Add(new TrainingPlanSerie(10));
            TrainingPlanEntry entryCompoud = new TrainingPlanEntry();

            entryCompoud.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("9934E9E3-50DC-4B34-8B67-092084894740")
            };
            day.AddEntry(entryCompoud);
            entryCompoud.Sets.Add(new TrainingPlanSerie(10));

            //Dictionary<Guid, ExerciseDTO> exerciseDtos = ObjectsConverter.ToExerciseDTO(exercises.Values).ToDictionary(t => t.GlobalId);
            Dictionary <Guid, ExerciseDTO> exerciseDtos = exercises.Values.Map <IList <ExerciseDTO> >().ToDictionary(t => t.GlobalId);
            TrainingPlanPack pack    = TrainingPlanPack.Create(plan, exerciseDtos);
            SplitPlanChecker checker = new SplitPlanChecker(pack);
            var result = checker.Check(exerciseDtos);

            Assert.AreEqual(2, result.Results.Count);
            Assert.AreEqual(TrainingPlanCheckItemStatus.Information, result.Results[0].Status);
            Assert.AreEqual("Split_IsolationExerciseBeforeCompoud", result.Results[0].ResourceKey);
            Assert.AreEqual(entryIsolated.GlobalId, result.Results[0].TrainingPlanBase.GlobalId);
            Assert.AreEqual(TrainingPlanCheckItemStatus.Information, result.Results[1].Status);
            Assert.AreEqual("Split_IsolationExerciseBeforeCompoud", result.Results[1].ResourceKey);
            Assert.AreEqual(secondIsolated.GlobalId, result.Results[1].TrainingPlanBase.GlobalId);
        }
示例#11
0
        public void TestEmptyDay()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.RestSeconds  = 60;
            plan.Name         = "name";
            plan.Author       = "author";
            plan.TrainingType = TrainingType.Split;
            var day = new TrainingPlanDay();

            day.Name = "day1";
            plan.AddDay(day);
            checkSingle(plan, day, TrainingPlanCheckItemStatus.Information, "TrainingPlan_EmptyDay");
        }
示例#12
0
        private void checkUniquenessDayNames(TrainingPlan plan, TrainingPlanCheckResult result)
        {
            var uniqueNamesResult = from day in plan.Days group day by day.Name into g select g;
            var moreResult        = uniqueNamesResult.Where(t => t.ToList().Count > 1);

            foreach (var item in moreResult)
            {
                var test = item.ToList();
                for (int i = 1; i < test.Count; i++)
                {
                    result.AddResult(test[i], "TrainingPlan_DaysName_Unique", TrainingPlanCheckItemStatus.Error);
                }
            }
        }
示例#13
0
        public void Test()
        {
            Exercise exercise = new Exercise(Guid.NewGuid());

            exercise.Name     = "exercise 1";
            exercise.Shortcut = "E1";
            Exercise exercise2 = new Exercise(Guid.NewGuid());

            exercise2.Name     = "exercise 2";
            exercise2.Shortcut = "E2";
            Exercise exercise3 = new Exercise(Guid.NewGuid());

            exercise3.Name     = "exercise 3";
            exercise3.Shortcut = "E3";
            Exercise exercise4 = new Exercise(Guid.NewGuid());

            exercise4.Name     = "exercise 4";
            exercise4.Shortcut = "E4";
            TrainingPlan    plan = new TrainingPlan();
            TrainingPlanDay day1 = new TrainingPlanDay();

            plan.AddDay(day1);
            TrainingPlanEntry entry = new TrainingPlanEntry();

            entry.Exercise = exercise.Map <ExerciseLightDTO>();
            entry.Sets.Add(new TrainingPlanSerie(12));
            entry.Sets.Add(new TrainingPlanSerie(10));
            entry.Sets.Add(new TrainingPlanSerie(8));
            day1.Entries.Add(entry);

            entry          = new TrainingPlanEntry();
            entry.Exercise = exercise2.Map <ExerciseLightDTO>();
            entry.Sets.Add(new TrainingPlanSerie(10));
            entry.Sets.Add(new TrainingPlanSerie(10));
            entry.Sets.Add(new TrainingPlanSerie(8));
            entry.Sets.Add(new TrainingPlanSerie(6));
            day1.Entries.Add(entry);

            TrainingPlanDay day2 = new TrainingPlanDay();

            plan.AddDay(day2);
            TrainingPlanEntry entry3 = new TrainingPlanEntry();

            day2.Entries.Add(entry3);
            entry3.Exercise = exercise3.Map <ExerciseLightDTO>();
            entry3.Sets.Add(new TrainingPlanSerie(10));
            entry3.Sets.Add(new TrainingPlanSerie(8));
        }
示例#14
0
        void check(TrainingPlan plan, TrainingPlanCheckResult result)
        {
            if (plan.RestSeconds == 0)
            {
                result.AddResult(plan, "TrainingPlan_RestSecond_Empty", TrainingPlanCheckItemStatus.Information);
            }
            if (string.IsNullOrEmpty(plan.Name))
            {
                result.AddResult(plan, "TrainingPlan_Name_Empty", TrainingPlanCheckItemStatus.Error);
            }
            //not unique names
            checkUniquenessDayNames(plan, result);

            foreach (var day in plan.Days)
            {
                check(day, result);
            }
        }
示例#15
0
        public static TrainingPlanPack Create(TrainingPlan plan, IDictionary <Guid, ExerciseDTO> exercises)
        {
            if (plan == null)
            {
                throw new ArgumentNullException("plan");
            }
            TrainingPlanPack pack = new TrainingPlanPack();

            pack.TrainingPlan = plan;
            foreach (var day in pack.TrainingPlan.Days)
            {
                foreach (var entry in day.Entries)
                {
                    if (entry.Exercise != null && exercises.ContainsKey(entry.Exercise.GlobalId) && pack.Exercises.Where(x => x.GlobalId == entry.Exercise.GlobalId).Count() == 0) //!pack.Exercises.Contains(entry.Exercise.GlobalId))
                    {
                        pack.Exercises.Add(exercises[entry.Exercise.GlobalId]);
                    }
                }
            }
            return(pack);
        }
示例#16
0
        public void TestExerciseDoesntExist()
        {
            TrainingPlan plan = new TrainingPlan();

            plan.RestSeconds  = 60;
            plan.Name         = "name";
            plan.Author       = "author";
            plan.TrainingType = TrainingType.Split;
            var day = new TrainingPlanDay();

            day.Name = "day1";
            plan.AddDay(day);
            TrainingPlanEntry entry = new TrainingPlanEntry();

            entry.Exercise = new ExerciseLightDTO()
            {
                GlobalId = new Guid("1134E9E3-50DC-4B34-8B67-092084894740")
            };
            day.AddEntry(entry);
            entry.Sets.Add(new TrainingPlanSerie(10));

            checkSingle(plan, entry, TrainingPlanCheckItemStatus.Warning, "TrainingPlan_ExerciseDoesntExist");
        }
示例#17
0
        public void Process(TrainingPlan plan)
        {
            foreach (TrainingPlanDay day in plan.Days)
            {
                for (int i = day.Entries.Count - 1; i >= 0; i--)
                {
                    if (day.Entries[i].Exercise == null)
                    {
                        day.RemoveEntry(day.Entries[i]);
                    }
                }

                //get all entries with GroupName (superset)
                var entries = plan.Days.SelectMany(x => x.Entries).Where(x => !string.IsNullOrEmpty(x.GroupName)).ToList();

                foreach (var trainingPlanEntry in entries)
                {
                    if (plan.Days.SelectMany(x => x.Entries).Count(x => x.GroupName == trainingPlanEntry.GroupName) < 2)
                    {
                        trainingPlanEntry.GroupName = null;
                    }
                }
            }
        }
示例#18
0
        public TrainingPlan SaveWorkoutPlan(TrainingPlan dto)
        {
            Log.WriteWarning("SaveWorkoutPlan: Username={0},planId={1}", SecurityInfo.SessionData.Profile.UserName, dto.GlobalId);

            if (!SecurityInfo.Licence.IsPremium)
            {
                throw new LicenceException("This feature is allowed for Premium account");
            }
            if (dto.Status != Model.PublishStatus.Private)
            {
                throw new InvalidOperationException("Wrong status. Only Private can be saved");
            }
            var session = Session;
            var dbPlan  = Mapper.Map <TrainingPlan, BodyArchitect.Model.TrainingPlan>(dto);

            using (var tx = session.BeginSaveTransaction())
            {
                var dbProfile = session.Get <Profile>(SecurityInfo.SessionData.Profile.GlobalId);

                dbPlan.Profile = dbProfile;
                //now we need to check if the user is publishing the workout plan
                //var planFromDb = (from p in session.Query<BodyArchitect.Model.TrainingPlan>()
                //                  where p.GlobalId == dbPlan.GlobalId
                //                  select p).SingleOrDefault();
                var planFromDb = session.Get <BodyArchitect.Model.TrainingPlan>(dbPlan.GlobalId);
                if (planFromDb != null)
                {
                    if (SecurityInfo.SessionData.Profile.GlobalId != planFromDb.Profile.GlobalId)
                    {
                        throw new CrossProfileOperationException("Cannot modify training plan for another user");
                    }
                    //we cannot modify published workout plan)
                    if (planFromDb.Status == PublishStatus.Published)
                    {
                        throw new PublishedObjectOperationException("Cannot change published workout plan");
                    }
                    if (dto.Status == Model.PublishStatus.Published && planFromDb.Status != PublishStatus.Published)
                    {
                        throw new InvalidOperationException("Cannot publish workout using SaveWorkoutPlan method. Use PublishWorkoutPlan method instead.");
                    }
                    dbPlan.Rating = planFromDb.Rating;
                }
                else
                {
                    dbPlan.CreationDate = Configuration.TimerService.UtcNow;
                }

                //XmlSerializationTrainingPlanFormatter formatter = new XmlSerializationTrainingPlanFormatter();
                //TrainingPlan plan = formatter.FromXml(dto.PlanContent,null);
                var validator = new ObjectValidator(typeof(TrainingPlan));
                var result    = validator.Validate(dto);
                if (!result.IsValid)
                {
                    throw new ValidationException(result.ToValidationResults());
                }

                dbPlan = session.Merge(dbPlan);

                //now update cache modification date
                dbProfile.DataInfo.WorkoutPlanHash = Guid.NewGuid();
                tx.Commit();
            }
            //return Mapper.Map<BodyArchitect.Model.TrainingPlan, WorkoutPlanDTO>(dbPlan);
            var param = new WorkoutPlanSearchCriteria();

            param.PlanId = dbPlan.GlobalId;
            var res = GetWorkoutPlans(param, new PartialRetrievingInfo());

            if (res.Items.Count > 0)
            {
                return(res.Items[0]);
            }
            return(null);
        }
        //public void DeleteWorkoutPlan(Token token, TrainingPlanInfo dto)
        //{
        //    exceptionHandling(token, () => InternalService.DeleteWorkoutPlan(token, dto));
        //}


        public TrainingPlan SaveWorkoutPlan(Token token, TrainingPlan dto)
        {
            return(exceptionHandling(token, () => InternalService.SaveWorkoutPlan(token, dto)));
        }
示例#20
0
        //public static TrainingPlan GetTrainingPlan(Guid planId)
        //{
        //    return exceptionHandling(delegate
        //                                 {
        //                                     return Instance.GetWorkoutPlan(Token, planId, new RetrievingInfo());
        //                                 });
        //}

        public static TrainingPlan SaveTrainingPlan(TrainingPlan dto)
        {
            return(exceptionHandling(() => Instance.SaveWorkoutPlan(Token, dto)));
        }