public virtual PlayerDetails GetPlayerDetails(int playerId, int numberOfRecentGamesToRetrieve)
{
var returnPlayer = dataContext.GetQueryable<Player>()
.Include(player => player.Nemesis)
.Include(player => player.Nemesis.NemesisPlayer)
.Include(player => player.PreviousNemesis)
.Include(player => player.PreviousNemesis.NemesisPlayer)
.Include(player => player.GamingGroup)
.Include(player => player.PlayerAchievements)
.SingleOrDefault(player => player.Id == playerId);
ValidatePlayerWasFound(playerId, returnPlayer);
var playerStatistics = GetPlayerStatistics(playerId);
var playerGameResults = GetPlayerGameResultsWithPlayedGameAndGameDefinition(playerId, numberOfRecentGamesToRetrieve);
var minions = GetMinions(returnPlayer.Id);
var playerGameSummaries = playerRepository.GetPlayerGameSummaries(playerId);
var championedGames = GetChampionedGames(returnPlayer.Id);
var formerChampionedGames = GetFormerChampionedGames(returnPlayer.Id);
var longestWinningStreak = playerRepository.GetLongestWinningStreak(playerId);
var playerDetails = new PlayerDetails()
{
Active = returnPlayer.Active,
ApplicationUserId = returnPlayer.ApplicationUserId,
Id = returnPlayer.Id,
Name = returnPlayer.Name,
GamingGroupId = returnPlayer.GamingGroupId,
GamingGroupName = returnPlayer.GamingGroup.Name,
PlayerGameResults = playerGameResults,
PlayerStats = playerStatistics,
CurrentNemesis = returnPlayer.Nemesis ?? new NullNemesis(),
PreviousNemesis = returnPlayer.PreviousNemesis ?? new NullNemesis(),
Minions = minions,
PlayerGameSummaries = playerGameSummaries,
ChampionedGames = championedGames,
PlayerVersusPlayersStatistics = playerRepository.GetPlayerVersusPlayersStatistics(playerId),
FormerChampionedGames = formerChampionedGames,
LongestWinningStreak = longestWinningStreak,
NemePointsSummary = playerStatistics.NemePointsSummary,
Achievements = returnPlayer.PlayerAchievements?.ToList() ?? new List<PlayerAchievement>()
};
return playerDetails;
}