private string CreateScoreResouceUri(
            ScoresResourceParameters scoreResourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("GetScores",
                                       new
                {
                    instanceScore = scoreResourceParameters.InstanceScore,
                    pageNumber = scoreResourceParameters.PageNumber - 1,
                    pageSize = scoreResourceParameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(_urlHelper.Link("GetScores",
                                       new
                {
                    instanceScore = scoreResourceParameters.InstanceScore,
                    pageNumber = scoreResourceParameters.PageNumber + 1,
                    pageSize = scoreResourceParameters.PageSize
                }));

            default:
                return(_urlHelper.Link("GetScores",
                                       new
                {
                    instanceScore = scoreResourceParameters.InstanceScore,
                    pageNumber = scoreResourceParameters.PageNumber,
                    pageSize = scoreResourceParameters.PageSize
                }));
            }
        }
        public PagedList <Score> GetScoresForUser(Guid userId, ScoresResourceParameters scoresResourceParameters)
        {
            var collectionBeforePaging = _context.Scores
                                         .Where(b => b.UserId == userId)
                                         .OrderBy(a => a.TimeStamp)
                                         .ThenBy(a => a.InstanceScore).AsQueryable();

            ////Search using search query (Timestamp)
            //if (!string.IsNullOrEmpty(scoresResourceParameters.SearchQuery))
            //{

            //    var searhcQueryForWhereClause = scoresResourceParameters.SearchQuery;
            //    collectionBeforePaging = collectionBeforePaging
            //        .Where(a => a.TimeStamp.ToString("dddd, MMM dd yyyy HH:mm:ss zzz").Contains(searhcQueryForWhereClause));
            //}

            //Filter suing InstanceScore
            //if (scoresResourceParameters.InstanceScore != null)
            //{
            //    var instanceScoreForWhereClause = scoresResourceParameters.InstanceScore;
            //    collectionBeforePaging = collectionBeforePaging
            //        .Where(a => a.InstanceScore == instanceScoreForWhereClause);
            //}

            return(PagedList <Score> .Create(collectionBeforePaging,
                                             scoresResourceParameters.PageNumber,
                                             scoresResourceParameters.PageSize));
        }
        public IActionResult GetScoresForUser(Guid userId, ScoresResourceParameters scoreResourceParameters)

        {
            if (!_libraryRepository.UserExists(userId))
            {
                return(NotFound());
            }

            var scoresFromRepo = _libraryRepository.GetScoresForUser(userId, scoreResourceParameters);

            var previousPageLink = scoresFromRepo.HasPrevious ?
                                   CreateScoreResouceUri(scoreResourceParameters,
                                                         ResourceUriType.PreviousPage) : null;

            var nextPageLink = scoresFromRepo.HasNext ?
                               CreateScoreResouceUri(scoreResourceParameters,
                                                     ResourceUriType.PreviousPage) : null;

            var paginationMetadata = new
            {
                totalCount       = scoresFromRepo.TotalCount,
                pageSize         = scoresFromRepo.PageSize,
                currentPage      = scoresFromRepo.CurrentPage,
                totalPages       = scoresFromRepo.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("X-Pagination",
                                 Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

            var scoresForUser = Mapper.Map <IEnumerable <ScoreDto> >(scoresFromRepo);

            scoresForUser = scoresForUser.Select(score =>
            {
                score = CreateLinksForScore(score);
                return(score);
            });

            var wrapper = new LinkedCollectionResourceWrapperDto <ScoreDto>(scoresForUser);

            return(Ok(CreateLinksForScores(wrapper)));
        }