예제 #1
0
        public static bool AddToFavorites(this ExerciseDTO exercise)
        {
            if (!CanAddToFavorites(exercise))
            {
                return(false);
            }
            ServiceCommand command = new ServiceCommand(() =>
            {
                try
                {
                    ExerciseOperationParam param = new ExerciseOperationParam();
                    param.ExerciseId             = exercise.GlobalId;
                    param.Operation = FavoriteOperation.Add;
                    ServiceManager.ExerciseOperation(param);
                }
                catch (ObjectIsFavoriteException)
                {
                }
                catch
                {
                    ExercisesReposidory.Instance.Remove(exercise.GlobalId);
                    throw;
                }
            });

            ServicePool.Add(command);
            ExercisesReposidory.Instance.Add(exercise);
            return(true);
        }
예제 #2
0
        public void ExerciseOperation(Token token, ExerciseOperationParam param)
        {
            var securityInfo = SecurityManager.EnsureAuthentication(token);
            var service      = new ExerciseService(Session, securityInfo, Configuration);

            service.ExerciseOperation(param);
        }
예제 #3
0
        public void RemoveFromFavorites_Twice()
        {
            var exercise = CreateExercise(Session, profiles[1], "ex1", "ex1");

            profiles[0].FavoriteExercises.Add(exercise);
            insertToDatabase(profiles[0]);

            var         profile = (ProfileDTO)profiles[0].Tag;
            SessionData data    = CreateNewSession(profile, ClientInformation);

            RunServiceMethod(delegate(InternalBodyArchitectService service)
            {
                var param        = new ExerciseOperationParam();
                param.ExerciseId = exercise.GlobalId;
                param.Operation  = FavoriteOperation.Remove;
                service.ExerciseOperation(data.Token, param);
            });
            RunServiceMethod(delegate(InternalBodyArchitectService service)
            {
                var param        = new ExerciseOperationParam();
                param.ExerciseId = exercise.GlobalId;
                param.Operation  = FavoriteOperation.Remove;
                service.ExerciseOperation(data.Token, param);
            });
        }
예제 #4
0
        public void AddToFavorites_ExerciseFromCurrentProfile()
        {
            var exercise = CreateExercise(Session, profiles[0], "ex1", "ex1");

            var         profile = (ProfileDTO)profiles[0].Tag;
            SessionData data    = CreateNewSession(profile, ClientInformation);

            RunServiceMethod(delegate(InternalBodyArchitectService service)
            {
                var param        = new ExerciseOperationParam();
                param.ExerciseId = exercise.GlobalId;
                param.Operation  = FavoriteOperation.Add;
                service.ExerciseOperation(data.Token, param);
            });
        }
예제 #5
0
        public void ExerciseOperation(ExerciseOperationParam param)
        {
            Log.WriteWarning("ExerciseOperationParam: Username={0},userDto.GlobalId={1}, Exercise={2}", SecurityInfo.SessionData.Profile.UserName, param.Operation, param.ExerciseId);

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

            var session = Session;

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

                var exercise = session.Get <Exercise>(param.ExerciseId);

                if (exercise.Profile == profileDb)
                {
                    throw new InvalidOperationException("Cannot add/remove your exercise to the favorite list");
                }
                if (param.Operation == FavoriteOperation.Add)
                {
                    if (profileDb.FavoriteExercises.Contains(exercise))
                    {
                        throw new ObjectIsFavoriteException("Exercise is in favorites list already");
                    }
                    profileDb.FavoriteExercises.Add(exercise);
                }
                else
                {
                    if (profileDb.FavoriteExercises.Contains(exercise))
                    {
                        profileDb.FavoriteExercises.Remove(exercise);
                    }
                    else
                    {
                        throw new ObjectIsNotFavoriteException("Exercise is not in favorites list");
                    }
                }
                profileDb.DataInfo.ExerciseHash = Guid.NewGuid();
                session.SaveOrUpdate(profileDb);
                tx.Commit();
            }
        }
예제 #6
0
        public void AddToFavorites_DataInfo()
        {
            var exercise = CreateExercise(Session, profiles[1], "ex1", "ex1");

            var         profile = (ProfileDTO)profiles[0].Tag;
            SessionData data    = CreateNewSession(profile, ClientInformation);
            var         oldHash = profiles[0].DataInfo.ExerciseHash;

            RunServiceMethod(delegate(InternalBodyArchitectService service)
            {
                var param        = new ExerciseOperationParam();
                param.ExerciseId = exercise.GlobalId;
                param.Operation  = FavoriteOperation.Add;
                service.ExerciseOperation(data.Token, param);
            });
            var dbProfile = Session.Get <Profile>(profile.GlobalId);

            Assert.AreNotEqual(dbProfile.DataInfo.ExerciseHash, oldHash);
        }
예제 #7
0
        public void AddToFavorites()
        {
            var exercise = CreateExercise(Session, profiles[1], "ex1", "ex1");

            var         profile = (ProfileDTO)profiles[0].Tag;
            SessionData data    = CreateNewSession(profile, ClientInformation);

            RunServiceMethod(delegate(InternalBodyArchitectService service)
            {
                var param        = new ExerciseOperationParam();
                param.ExerciseId = exercise.GlobalId;
                param.Operation  = FavoriteOperation.Add;
                service.ExerciseOperation(data.Token, param);
            });
            var dbProfile = Session.Get <Profile>(profile.GlobalId);

            Assert.AreEqual(1, dbProfile.FavoriteExercises.Count);
            Assert.AreEqual(exercise.GlobalId, dbProfile.FavoriteExercises.ElementAt(0).GlobalId);
        }
 public void ExerciseOperation(Token token, ExerciseOperationParam param)
 {
     exceptionHandling(token, () => InternalService.ExerciseOperation(token, param));
 }