public object Get(GetGamesView request)
        {
            var user = _userManager.GetUserById(request.UserId);

            var items = GetAllLibraryItems(user.Id, _userManager, _libraryManager, request.ParentId).Where(i => i is Game || i is GameSystem)
                        .ToList();

            var gamesWithImages = items.OfType <Game>().Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)).ToList();

            var itemsWithBackdrops = FilterItemsForBackdropDisplay(items.Where(i => i.GetImages(ImageType.Backdrop).Any())).ToList();

            var gamesWithBackdrops = itemsWithBackdrops.OfType <Game>().ToList();

            var view = new GamesView();

            var fields = new List <ItemFields>();

            view.GameSystems = items
                               .OfType <GameSystem>()
                               .OrderBy(i => i.SortName)
                               .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                               .ToList();

            var currentUserId = user.Id;

            view.RecentlyPlayedGames = gamesWithImages
                                       .OrderByDescending(i => _userDataManager.GetUserData(currentUserId, i.GetUserDataKey()).LastPlayedDate ?? DateTime.MinValue)
                                       .Take(request.RecentlyPlayedGamesLimit)
                                       .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                       .ToList();

            view.BackdropItems = gamesWithBackdrops
                                 .OrderBy(i => Guid.NewGuid())
                                 .Take(10)
                                 .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                 .ToList();

            view.SpotlightItems = gamesWithBackdrops
                                  .OrderBy(i => Guid.NewGuid())
                                  .Take(10)
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            view.MultiPlayerItems = gamesWithImages
                                    .Where(i => i.PlayersSupported.HasValue && i.PlayersSupported.Value > 1)
                                    .Randomize()
                                    .Select(i => GetItemStub(i, ImageType.Primary))
                                    .Where(i => i != null)
                                    .Take(1)
                                    .ToList();

            return(ToOptimizedSerializedResultUsingCache(view));
        }
        public object Get(GetGamesView request)
        {
            var user = _userManager.GetUserById(request.UserId);

            var items = user.RootFolder.GetRecursiveChildren(user, i => i is Game || i is GameSystem)
                        .ToList();

            var gamesWithImages = items.OfType <Game>().Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)).ToList();

            var itemsWithBackdrops = FilterItemsForBackdropDisplay(items.Where(i => i.BackdropImagePaths.Count > 0)).ToList();

            var gamesWithBackdrops = itemsWithBackdrops.OfType <Game>().ToList();

            var view = new GamesView();

            var fields = new List <ItemFields>();

            view.BackdropItems = gamesWithBackdrops
                                 .OrderBy(i => Guid.NewGuid())
                                 .Take(10)
                                 .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                 .ToList();

            view.SpotlightItems = gamesWithBackdrops
                                  .OrderBy(i => Guid.NewGuid())
                                  .Take(10)
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            view.MultiPlayerItems = gamesWithImages
                                    .Where(i => i.PlayersSupported.HasValue && i.PlayersSupported.Value > 1)
                                    .OrderBy(i => Guid.NewGuid())
                                    .Select(i => GetItemStub(i, ImageType.Primary))
                                    .Where(i => i != null)
                                    .Take(1)
                                    .ToList();

            view.MiniSpotlights = gamesWithBackdrops
                                  .OrderBy(i => Guid.NewGuid())
                                  .Take(5)
                                  .Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                                  .ToList();

            return(ToOptimizedResult(view));
        }