コード例 #1
0
        public static IEnumerable <Note> Sort(this IEnumerable <Note> notes, JsonApiQuery query, NoteMappingService noteMappingService)
        {
            foreach (var sort in query.Sorts.Reverse())
            {
                if ("text".Equals(sort.Field, StringComparison.OrdinalIgnoreCase))
                {
                    notes = notes.SortedBy(s => s.Text, sort.Descending);
                }

                if ("createdOn".Equals(sort.Field, StringComparison.OrdinalIgnoreCase))
                {
                    notes = notes.SortedBy(s => s.CreatedOn, sort.Descending);
                }

                if ("id".Equals(sort.Field, StringComparison.OrdinalIgnoreCase))
                {
                    notes = notes.SortedBy(s => s.Id, sort.Descending);
                }


                if ("creator".Equals(sort.Field, StringComparison.OrdinalIgnoreCase))
                {
                    notes = notes.SortedBy(s => s.Creator, sort.Descending);
                }
            }
            return(notes);
        }
コード例 #2
0
 public static IEnumerable <Note> Paginate(this IEnumerable <Note> notes, JsonApiQuery query)
 {
     if (query.Page.Count > 0)
     {
         notes = notes.Skip(query.Page.First).Take(query.Page.Count);
     }
     return(notes);
 }
コード例 #3
0
 public static IEnumerable <Note> Filter(this IEnumerable <Note> notes, JsonApiQuery query, NoteMappingService noteMappingService)
 {
     return(notes
            .ApplyKeywordFilters(s => s.Text, query.FindFilters("text"))
            .ApplyKeywordFilters(s => s.Creator, query.FindFilters("creator"))
            .ApplyKeywordFilters(s => s.NoteListId.ToString(), query.FindFilters("noteListId"))
            .ApplyIsInRangeFilters(s => s.CreatedOn, query.FindFilters("createdOn")));
 }
コード例 #4
0
        private static string AddFiltersToLink(JsonApiQuery query, string link)
        {
            if (!query.Filters.Any())
            {
                return(link);
            }

            return(query.Filters.Aggregate(link, (current1, filter) =>
                                           filter.Values.Aggregate(current1, (current, filterValue) =>
                                                                   current + "&filter[" + filter.Field + "]=" + filterValue)));
        }
コード例 #5
0
        private static string AddIncludesToLink(JsonApiQuery query, string link)
        {
            if (!query.Includes.Any())
            {
                return(link);
            }

            link += "&include=";
            foreach (var include in query.Includes)
            {
                link += include;
                if (!query.Includes.Last().Equals(include))
                {
                    link += ",";
                }
            }
            return(link);
        }
コード例 #6
0
        private static string AddSortsToLink(JsonApiQuery query, string link)
        {
            if (!query.Sorts.Any())
            {
                return(link);
            }

            link += "&sort=";
            foreach (var sort in query.Sorts)
            {
                link += sort;
                if (!query.Sorts.Last().Equals(sort))
                {
                    link += ",";
                }
            }
            return(link);
        }
コード例 #7
0
        public static string BuildNextLink(JsonApiQuery query, int totalNumberOfEntities, string baseQueryLink, string requestDisplayUrl)
        {
            var nextLink = "";

            if (query.Page.Count + query.Page.First >= totalNumberOfEntities)
            {
                return(nextLink);
            }
            var pageFirstElement = query.Page.Count + query.Page.First;

            nextLink = AddPageToLink(query, baseQueryLink, requestDisplayUrl, pageFirstElement);

            nextLink = AddFiltersToLink(query, nextLink);

            nextLink = AddSortsToLink(query, nextLink);

            nextLink = AddIncludesToLink(query, nextLink);
            return(nextLink);
        }
コード例 #8
0
        public static string BuildLastLink(JsonApiQuery query, int totalNumberOfEntities, string baseQueryLink, string requestDisplayUrl)
        {
            var lastLink = "";

            if (query.Page.Count + query.Page.First >= totalNumberOfEntities)
            {
                return(requestDisplayUrl);
            }
            var remainderForLastPage = Math.IEEERemainder(totalNumberOfEntities, query.Page.Count);
            var pageFirstElement     = (int)remainderForLastPage == 0 ? totalNumberOfEntities - query.Page.Count : totalNumberOfEntities - remainderForLastPage;


            lastLink = AddPageToLink(query, baseQueryLink, requestDisplayUrl, pageFirstElement);

            lastLink = AddFiltersToLink(query, lastLink);

            lastLink = AddSortsToLink(query, lastLink);

            lastLink = AddIncludesToLink(query, lastLink);

            return(lastLink);
        }
コード例 #9
0
 private static string AddPageToLink(JsonApiQuery query, string baseQueryLink, string requestDisplayUrl, double pageFirstElement)
 {
     return(new Uri(requestDisplayUrl).GetLeftPart(UriPartial.Authority) + baseQueryLink +
            "page[count]=" + query.Page.Count + "&page[first]=" +
            pageFirstElement);
 }