public virtual GameDefinitionSummary GetGameDefinitionDetails(int id, int numberOfPlayedGamesToRetrieve)
{
var gameDefinition = _dataContext.GetQueryable<GameDefinition>()
.Include(game => game.PlayedGames)
.Include(game => game.Champion)
.Include(game => game.Champion.Player)
.Include(game => game.PreviousChampion)
.Include(game => game.PreviousChampion.Player)
.Include(game => game.GamingGroup)
.SingleOrDefault(game => game.Id == id);
if (gameDefinition == null)
{
throw new EntityDoesNotExistException(typeof(GameDefinition), id);
}
BoardGameGeekInfo boardGameGeekInfo = null;
if (gameDefinition.BoardGameGeekGameDefinitionId.HasValue)
{
boardGameGeekInfo = _boardGameGeekGameDefinitionInfoRetriever.GetResults(gameDefinition.BoardGameGeekGameDefinitionId.Value);
}
var gameDefinitionSummary = new GameDefinitionSummary
{
Active = gameDefinition.Active,
BoardGameGeekGameDefinitionId = gameDefinition.BoardGameGeekGameDefinitionId,
Name = gameDefinition.Name,
Description = gameDefinition.Description,
GamingGroup = gameDefinition.GamingGroup,
GamingGroupId = gameDefinition.GamingGroupId,
GamingGroupName = gameDefinition.GamingGroup.Name,
Id = gameDefinition.Id,
TotalNumberOfGamesPlayed = gameDefinition.PlayedGames.Count,
AveragePlayersPerGame = gameDefinition.PlayedGames.Select(item => (decimal)item.NumberOfPlayers).DefaultIfEmpty(0M).Average(),
Champion = gameDefinition.Champion ?? new NullChampion(),
PreviousChampion = gameDefinition.PreviousChampion ?? new NullChampion(),
BoardGameGeekInfo = boardGameGeekInfo
};
var playedGames = AddPlayedGamesToTheGameDefinition(numberOfPlayedGamesToRetrieve, gameDefinitionSummary);
var distinctPlayerIds = AddPlayerGameResultsToEachPlayedGame(playedGames);
AddPlayersToPlayerGameResults(playedGames, distinctPlayerIds);
gameDefinitionSummary.PlayerWinRecords = _playerRepository.GetPlayerWinRecords(id);
return gameDefinitionSummary;
}