コード例 #1
0
        public void Execute()
        {
            var userCore    = new Mock <IUserCore>();
            var profile     = new Mock <IProfile>();
            var profiles    = new List <UserPublicProfile>();
            var userProfile = new UserPublicProfile()
            {
                PreferedProfile = true,
                GitHubHandle    = StringHelper.ValidString(),
            };

            profiles.Add(userProfile);

            userCore.Setup(u => u.PublicProfilesFull(It.IsAny <Application>(), true)).Returns(profiles);
            userCore.Setup(u => u.Save(It.IsAny <ProfilePage>()));
            profile.Setup(p => p.Evaluate(userProfile)).Returns(0);

            var game = new Gamification(userCore.Object, profile.Object);

            game.Execute();

            userCore.Verify(u => u.PublicProfilesFull(It.IsAny <Application>(), true), Times.Once());
            userCore.Verify(u => u.Save(It.IsAny <ProfilePage>()), Times.Once());
            profile.Verify(p => p.Evaluate(userProfile), Times.Once());
        }
コード例 #2
0
        public async Task <IActionResult> Edit(int id, [Bind("GamificationID,PointsPerComment,PointsPerEvaluation,PointsPerService,GamificationName")] Gamification gamification)
        {
            if (id != gamification.GamificationID)
            {
                return(View("/Views/Shared/NotFound.cshtml"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(gamification);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!GamificationExists(gamification.GamificationID))
                    {
                        return(View("/Views/Shared/NotFound.cshtml"));
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(gamification));
        }
コード例 #3
0
        public async Task <IActionResult> ActivateConfirmed([Bind("GamificationID,PointsPerComment,PointsPerEvaluation,PointsPerService,GamificationName")] Gamification newConfiguration)
        {
            if (_context.Gamification.Find(newConfiguration.GamificationID) == null)
            {
                return(View("/Views/Shared/NotFound.cshtml"));
            }
            //Deactivate current active configurations
            var currentConfigurations = await _context.Gamification.Where(c => c.IsActive == true).ToListAsync();

            foreach (var configuration in currentConfigurations)
            {
                configuration.IsActive = false;
                _context.Gamification.Update(configuration);
            }

            //Activate chosen configuration

            newConfiguration.IsActive = true;
            _context.Gamification.Update(newConfiguration);

            //Update Database
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Configurations)));
        }
コード例 #4
0
        public OperationResultVo FillProfileGamificationDetails(Guid currentUserId, ref ProfileViewModel vm)
        {
            try
            {
                Gamification gamification = gamificationDomainService.GetByUserId(vm.UserId);

                GamificationLevel currentLevel = gamificationDomainService.GetLevel(gamification.CurrentLevelNumber);

                if (currentLevel == null)
                {
                    currentLevel = new GamificationLevel
                    {
                        Name = "No Levels On The Database"
                    };
                }

                vm.IndieXp.LevelName          = currentLevel.Name;
                vm.IndieXp.CurrentLevelNumber = gamification.CurrentLevelNumber;
                vm.IndieXp.XpCurrentLevel     = gamification.XpCurrentLevel;
                vm.IndieXp.XpCurrentLevelMax  = gamification.XpToNextLevel + gamification.XpCurrentLevel;

                return(new OperationResultVo(true));
            }
            catch (Exception ex)
            {
                return(new OperationResultVo(ex.Message));
            }
        }
コード例 #5
0
        public ActionResult DeleteConfirmed(Guid id)
        {
            Gamification gamification = db.Gamifications.Find(id);

            db.Gamifications.Remove(gamification);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #6
0
 public ActionResult Edit([Bind(Include = "ID,gamificationId")] Gamification gamification)
 {
     if (ModelState.IsValid)
     {
         db.Entry(gamification).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(gamification));
 }
コード例 #7
0
        public int ProcessAction(Guid userId, PlatformAction action)
        {
            int scoreValue = 5;

            GamificationAction actionToProcess = Task.Run(async() => await gamificationActionRepository.GetByAction(action)).Result;

            if (actionToProcess != null)
            {
                scoreValue = actionToProcess.ScoreValue;
            }

            Task <IEnumerable <Gamification> > userGamificationTask = gamificationRepository.GetByUserId(userId);

            userGamificationTask.Wait();

            Gamification userGamification = userGamificationTask.Result.FirstOrDefault();

            if (userGamification == null)
            {
                GamificationLevel newLevel = Task.Run(async() => await gamificationLevelRepository.GetByNumber(1)).Result;

                userGamification = GenerateNewGamification(userId);

                userGamification.XpCurrentLevel += scoreValue;
                userGamification.XpTotal        += scoreValue;
                userGamification.XpToNextLevel   = (newLevel.XpToAchieve - scoreValue);

                gamificationRepository.Add(userGamification);
            }
            else
            {
                userGamification.XpCurrentLevel += scoreValue;
                userGamification.XpTotal        += scoreValue;
                userGamification.XpToNextLevel  -= scoreValue;

                if (userGamification.XpToNextLevel <= 0)
                {
                    GamificationLevel currentLevel = Task.Run(async() => await gamificationLevelRepository.GetByNumber(userGamification.CurrentLevelNumber)).Result;
                    GamificationLevel newLevel     = Task.Run(async() => await gamificationLevelRepository.GetByNumber(userGamification.CurrentLevelNumber + 1)).Result;

                    if (newLevel != null)
                    {
                        userGamification.CurrentLevelNumber = newLevel.Number;
                        userGamification.XpCurrentLevel     = (userGamification.XpCurrentLevel - currentLevel.XpToAchieve);
                        userGamification.XpToNextLevel      = (newLevel.XpToAchieve - userGamification.XpCurrentLevel);
                    }
                }

                gamificationRepository.Update(userGamification);
            }

            return(scoreValue);
        }
コード例 #8
0
        public ActionResult Create([Bind(Include = "ID,gamificationId")] Gamification gamification)
        {
            if (ModelState.IsValid)
            {
                gamification.ID = Guid.NewGuid();
                db.Gamifications.Add(gamification);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(gamification));
        }
コード例 #9
0
        // GET: Gamifications/Delete/5
        public ActionResult Delete(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Gamification gamification = db.Gamifications.Find(id);

            if (gamification == null)
            {
                return(HttpNotFound());
            }
            return(View(gamification));
        }
コード例 #10
0
        public Gamification GetByUserId(Guid userId)
        {
            Task <IEnumerable <Gamification> > userGamificationTask = gamificationRepository.GetByUserId(userId);

            userGamificationTask.Wait();

            Gamification userGamification = userGamificationTask.Result.FirstOrDefault();

            if (userGamification == null)
            {
                userGamification = GenerateNewGamification(userId);

                gamificationRepository.Add(userGamification);
            }

            return(userGamification);
        }
コード例 #11
0
        private Gamification GenerateNewGamification(Guid userId)
        {
            Gamification userGamification;

            GamificationLevel firstLevel = Task.Run(async() => await gamificationLevelRepository.GetByNumber(1)).Result;

            userGamification = new Gamification
            {
                CurrentLevelNumber = firstLevel.Number,
                UserId             = userId,
                XpCurrentLevel     = 0,
                XpToNextLevel      = firstLevel.XpToAchieve,
                XpTotal            = 0
            };

            return(userGamification);
        }
コード例 #12
0
        public async Task <IActionResult> Create([Bind("GamificationID,PointsPerComment,PointsPerEvaluation,PointsPerService,GamificationName")] Gamification gamification)
        {
            var activeConfiguration = await _context.Gamification.Where(g => g.IsActive == true).FirstOrDefaultAsync();

            if (ModelState.IsValid)
            {
                if (activeConfiguration == null)
                {
                    gamification.IsActive = true;
                }
                else
                {
                    gamification.IsActive = false;
                }
                _context.Add(gamification);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(gamification));
        }
コード例 #13
0
        public async void Create_ReturnRedirect()
        {
            var size = Context.Gamification.Count();

            var gamification = new Gamification()
            {
                GamificationID      = 4,
                PointsPerComment    = 5,
                GamificationName    = "Teste 4",
                PointsPerEvaluation = 5,
                PointsPerService    = 5,
                IsActive            = false
            };

            Controller.ControllerContext.HttpContext = new DefaultHttpContext {
                User = ModeradorLog
            };
            var result = await Controller.Create(gamification);

            var actionResult = Assert.IsType <RedirectToActionResult>(result);

            Assert.Equal("Index", actionResult.ActionName);
            Assert.Equal(size + 1, Context.Gamification.Count());
        }
コード例 #14
0
        public bool Register(UserRegisterRequest user)
        {
            if (_userRepository.GetUserByEmail(user.Email) != null)
            {
                return(false);
            }



            var gamification = new Gamification
            {
                LevelName  = "Nivel 1",
                Experience = 0,
                WeeklyExp  = 0,
                Tokens     = 0,
            };


            Group defaultGroup = new Group
            {
                GroupName = "MyGroup",
            };


            User userCreate = new User
            {
                Email    = user.Email,
                Password = user.Password,
                FCMToken = user.FCMToken,
                Level    = gamification,
            };

            if (user.InviteCode != null)
            {
                var groupGet = _groupRepository.GetByInviteCode(user.InviteCode);

                if (groupGet != null)
                {
                    userCreate.Group   = groupGet;
                    userCreate.GroupId = groupGet.GroupId;
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                userCreate.Group = defaultGroup;
                _groupRepository.InsertGroup(defaultGroup);
            }

            _userRepository.Insert(userCreate);
            _gamificationRepository.Insert(gamification);


            if (_context.SaveChanges() > 0)
            {
                return(true);
            }

            return(false);
        }