public async Task <GameListResponse> GameList(GamesRequest request) { var player = await _gameQueries.GetPlayerByUsernameAsync(request.PlayerUsername); if (player == null) { throw new RegoValidationException(ErrorMessagesEnum.PlayerWithRequestedIdDoesntExist.ToString()); } var brandId = _gameQueries.GetPlayerData(player.Id).BrandId; if (brandId == null) { throw new RegoValidationException(ErrorMessagesEnum.NoBrandRelatedToThisPlayer.ToString()); } var lobby = _gameQueries.GetLobby(brandId, request.IsForMobile); if (lobby == null) { throw new RegoValidationException(ErrorMessagesEnum.LobbyIsMissingForThisBrand.ToString()); } var data = await _productOperations.GetProductsForPlayerAsync(lobby.Id, player.Id, request.LobbyUrl, request.PlayerIpAddress, request.UserAgent); return(new GameListResponse { GameProviders = data.products.groups.SelectMany(x => x.games).GroupBy(x => x.providercode, x => x) .Select(gameProvider => new GameProviderData { Code = gameProvider.Key, Games = data.products.groups .SelectMany(group => group.games) .Where(game => game.providercode == gameProvider.Key) .Select(game => new GameData { Id = game.id, Name = game.name, Url = game.url }).ToList() }).ToList() }); }