public virtual PlayerAchievementDetails GetCurrentPlayerAchievementDetails(AchievementId achievementId, ApplicationUser currentUser)
        {
            var achievement = _achievementRetriever.GetAchievement(achievementId);

            var result = new PlayerAchievementDetails
            {
                AchievementId   = achievementId,
                Description     = achievement.Description,
                IconClass       = achievement.IconClass,
                AchievementName = achievement.Name,
                LevelThresholds = achievement.LevelThresholds
            };

            result.NumberOfPlayersWithThisAchievement = _dataContext.GetQueryable <PlayerAchievement>().Count(y => y.AchievementId == achievementId);

            if (currentUser.UserName == AnonymousApplicationUser.USER_NAME_ANONYMOUS)
            {
                return(result);
            }

            var playerForCurrentUser = _playerRetriever.GetPlayerForCurrentUser(currentUser.Id, currentUser.CurrentGamingGroupId);

            if (playerForCurrentUser != null)
            {
                result.PlayerId   = playerForCurrentUser.Id;
                result.PlayerName = playerForCurrentUser.Name;

                var achievementAwarded = achievement.IsAwardedForThisPlayer(playerForCurrentUser.Id);

                result.AchievementLevel = achievementAwarded.LevelAwarded;
                result.PlayerProgress   = achievementAwarded.PlayerProgress;

                SetRelatedEntities(achievement.Group, result, achievementAwarded.RelatedEntities);
            }

            var playerAchievement = _dataContext
                                    .GetQueryable <PlayerAchievement>()
                                    .FirstOrDefault(x => x.AchievementId == achievementId && x.Player.ApplicationUserId == currentUser.Id);

            if (playerAchievement == null)
            {
                return(result);
            }

            result.DateCreated     = playerAchievement.DateCreated;
            result.LastUpdatedDate = playerAchievement.LastUpdatedDate;

            return(result);
        }
예제 #2
0
        public virtual PlayerAchievementDetails GetPlayerAchievement(PlayerAchievementQuery playerAchievementQuery)
        {
            var achievementId = playerAchievementQuery.AchievementId;
            var achievement   = _achievementRetriever.GetAchievement(achievementId);

            var result = new PlayerAchievementDetails
            {
                AchievementId   = achievementId,
                Description     = achievement.Description,
                IconClass       = achievement.IconClass,
                AchievementName = achievement.Name,
                LevelThresholds = achievement.LevelThresholds
            };

            result.NumberOfPlayersWithThisAchievement = _dataContext.GetQueryable <PlayerAchievement>().Count(y => y.AchievementId == achievementId);


            Player player;

            if (playerAchievementQuery.PlayerId.HasValue)
            {
                player = _dataContext.FindById <Player>(playerAchievementQuery.PlayerId);
            }
            else
            {
                player = _playerRetriever.GetPlayerForCurrentUser(playerAchievementQuery.ApplicationUserId, playerAchievementQuery.GamingGroupId.Value);
            }

            if (player != null)
            {
                result.PlayerId   = player.Id;
                result.PlayerName = player.Name;

                var achievementAwarded = achievement.IsAwardedForThisPlayer(player.Id);

                result.AchievementLevel = achievementAwarded.LevelAwarded;
                result.PlayerProgress   = achievementAwarded.PlayerProgress;

                SetRelatedEntities(achievement.Group, result, achievementAwarded.RelatedEntities);
            }

            var playerAchievement = _dataContext
                                    .GetQueryable <PlayerAchievement>()
                                    .FirstOrDefault(x => x.AchievementId == achievementId && x.PlayerId == playerAchievementQuery.PlayerId);

            if (playerAchievement == null)
            {
                return(result);
            }

            result.DateCreated     = playerAchievement.DateCreated;
            result.LastUpdatedDate = playerAchievement.LastUpdatedDate;

            return(result);
        }
예제 #3
0
        public virtual ActionResult Details(AchievementId achievementId, ApplicationUser currentUser)
        {
            if (currentUser != null && currentUser.CurrentGamingGroupId > 0)
            {
                return(DetailsForCurrentUser(achievementId, currentUser));
            }

            var achievement = _achievementRetriever.GetAchievement(achievementId);

            var viewModel = _transformer.Transform <PlayerAchievementViewModel>(achievement);

            return(View(MVC.Achievement.Views.Details, viewModel));
        }
예제 #4
0
        public IPagedList <PlayerAchievementWinner> GetResults(GetRecentPlayerAchievementsUnlockedQuery query)
        {
            var playerAchievementWinnersQueryable =
                _dataContext.GetQueryable <PlayerAchievement>()
                .Where(x => query.PlayerId == null || x.PlayerId == query.PlayerId.Value)
                .Select(x => new PlayerAchievementWinner
            {
                AchievementId             = x.AchievementId,
                AchievementLastUpdateDate = x.LastUpdatedDate,
                AchievementLevel          = x.AchievementLevel,
                GamingGroupId             = x.Player.GamingGroupId,
                GamingGroupName           = x.Player.GamingGroup.Name,
                PlayerId        = x.PlayerId,
                PlayerName      = x.Player.Name,
                UserId          = x.Player.ApplicationUserId,
                DateCreated     = x.DateCreated,
                LastUpdatedDate = x.LastUpdatedDate
            })
                .OrderByDescending(p => p.AchievementLastUpdateDate);

            var pagedList = playerAchievementWinnersQueryable.ToPagedList(query.Page, query.PageSize);

            var distinctAchievements = pagedList.GroupBy(x => x.AchievementId).ToDictionary(x => x.Key, y => _achievementRetriever.GetAchievement(y.Key));

            foreach (var playerAchievementWinner in pagedList)
            {
                var achievement = distinctAchievements[playerAchievementWinner.AchievementId];
                playerAchievementWinner.IconClass       = achievement.IconClass;
                playerAchievementWinner.AchievementName = achievement.Name;
                playerAchievementWinner.Description     = achievement.Description;
            }

            return(pagedList);
        }