コード例 #1
0
ファイル: PaginationService.cs プロジェクト: Shystee/Shop
        public PagedResponse <RatingResponse> CreateProductRatingsPaginatedResponse(
            int productId,
            PaginationFilter pagination,
            GetAllRatingsFilter filter,
            SortingFilter sorting,
            List <RatingResponse> response)
        {
            var nextPage = pagination.PageNumber >= 1
                    ? uriService.GetProductRatingUri(productId,
                                                     new PaginationQuery(pagination.PageNumber + 1, pagination.PageSize),
                                                     filter,
                                                     sorting)
                           .ToString()
                    : null;

            var previousPage = pagination.PageNumber - 1 >= 1
                    ? uriService.GetProductRatingUri(productId,
                                                     new PaginationQuery(pagination.PageNumber - 1, pagination.PageSize),
                                                     filter,
                                                     sorting)
                               .ToString()
                    : null;

            return(CreatePaginatedResponse(pagination, sorting, response, nextPage, previousPage));
        }
コード例 #2
0
ファイル: PaginationService.cs プロジェクト: Shystee/Shop
 private static PagedResponse <T> CreatePaginatedResponse <T>(
     PaginationFilter pagination,
     SortingFilter sortingFilter,
     List <T> response,
     string nextPage,
     string previousPage)
 {
     return(new PagedResponse <T>
     {
         Data = response,
         Metadata = new Metadata
         {
             Pagination = new Pagination
             {
                 PageNumber = pagination.PageNumber >= 1
                         ? pagination.PageNumber
                         : (int?)null,
                 PageSize = pagination.PageSize >= 1
                         ? pagination.PageSize
                         : (int?)null,
                 NextPage = response.Count > 0
                         ? nextPage
                         : null,
                 PreviousPage = previousPage
             },
             SortedBy = SortedBy(sortingFilter)
         }
     });
 }
コード例 #3
0
 private string GenerateKey(
     GetAllProductsFilter filter,
     PaginationFilter pagination,
     SortingFilter sortingFilter)
 {
     return(MyModelCacheKey.GeneratePaginationQuery(pagination)
            .GenerateProductFilterQuery(filter)
            .GenerateSortingQuery(sortingFilter));
 }
コード例 #4
0
ファイル: PostsController.cs プロジェクト: PatiDevv/Blogger
        public async Task <IActionResult> Search([FromQuery] PaginationFilter paginationFilter, string title, [FromQuery] SortingFilter sortingFilter, [FromQuery] string filterBy)
        {
            var validPaginationFilter = new PaginationFilter(paginationFilter.PageNumber, paginationFilter.PageSize);
            var validSortingFilter    = new SortingFilter(sortingFilter.SortField, sortingFilter.Ascending);

            var posts = await _postService.SearchAsync(title, validPaginationFilter.PageNumber, validPaginationFilter.PageSize, validSortingFilter.SortField, validSortingFilter.Ascending, filterBy);

            return(Ok(new Response <IEnumerable <PostDto> >(posts)));
        }
コード例 #5
0
ファイル: PostsController.cs プロジェクト: PatiDevv/Blogger
        public async Task <IActionResult> GetAll([FromQuery] PaginationFilter paginationFilter, [FromQuery] SortingFilter sortingFilter, [FromQuery] string filterBy = "")
        {
            var validPaginationFilter = new PaginationFilter(paginationFilter.PageNumber, paginationFilter.PageSize);
            var validSortingFilter    = new SortingFilter(sortingFilter.SortField, sortingFilter.Ascending);

            var posts = await _postService.GetAllPostAsync(validPaginationFilter.PageNumber, validPaginationFilter.PageSize, validSortingFilter.SortField, validSortingFilter.Ascending, filterBy);

            var totalRecords = await _postService.GetAllPostsCountAsync(filterBy);

            return(Ok(PaginationHelper.CreatePagedResponse(posts, validPaginationFilter, totalRecords)));
        }
コード例 #6
0
        private static string SortingBuilder(SortingFilter sorting)
        {
            var sortBuilder = new StringBuilder();

            foreach (var sort in sorting.Sortings)
            {
                sortBuilder.Append($"{sort.Name}+{SortingConstants.DirectionsDictionary[sort.Direction]}");
            }

            return(sortBuilder.ToString());
        }
コード例 #7
0
        public async Task <IActionResult> GetAll(int projectId, SortingFilter sortingFilter)
        {
            if (!IsCurrentUserInProject(projectId))
            {
                return(Unauthorized());
            }

            var all = this.mapper.Map <IEnumerable <UserStoryAllViewmodel> >
                          (await userStoryService.GetAllAsync(projectId, sortingFilter));

            return(View(all));
        }
コード例 #8
0
ファイル: RatingRepository.cs プロジェクト: Shystee/Shop
        public Task <List <Rating> > GetAllAsync(
            GetAllRatingsFilter filter,
            PaginationFilter pagination,
            SortingFilter sortingFilter)
        {
            IQueryable <Rating> queryable = Context.Ratings;

            queryable = FilterProducts(queryable, filter);
            queryable = ApplySort(queryable, sortingFilter);

            return(queryable.ApplyPagination(pagination).ToListAsync());
        }
コード例 #9
0
ファイル: ProductRepository.cs プロジェクト: Shystee/Shop
        public Task <List <Product> > GetAllAsync(
            GetAllProductsFilter filter,
            PaginationFilter pagination,
            SortingFilter sortingFilter)
        {
            IQueryable <Product> queryable = Context.Products.Include(x => x.Ratings);

            queryable = FilterProducts(queryable, filter);
            queryable = ApplySort(queryable, sortingFilter);

            return(queryable.ApplyPagination(pagination).ToListAsync());
        }
コード例 #10
0
        public Uri GetAllProductsUri(
            PaginationQuery pagination,
            GetAllProductsFilter filter,
            SortingFilter sorting)
        {
            var uri = new Uri(baseUri + ApiRoutes.Products.GetAll);

            var modifiedUri = uri.AbsoluteUri.GeneratePaginationQuery(pagination)
                              .GenerateProductFilterQuery(filter)
                              .GenerateSortingQuery(sorting);

            return(new Uri(modifiedUri));
        }
コード例 #11
0
        public Uri GetProductRatingUri(
            int productId,
            PaginationQuery pagination,
            GetAllRatingsFilter filter,
            SortingFilter sorting)
        {
            var uri = new Uri(baseUri
                              + ApiRoutes.ProductRatings.GetAll.Replace("{productId}", productId.ToString()));

            var modifiedUri = uri.AbsoluteUri.GeneratePaginationQuery(pagination)
                              .GenerateRatingFilterQuery(filter)
                              .GenerateSortingQuery(sorting);

            return(new Uri(modifiedUri));
        }
コード例 #12
0
        public Task <List <Product> > GetAllAsync(
            GetAllProductsFilter filter,
            PaginationFilter pagination,
            SortingFilter sortingFilter)
        {
            var key = GenerateKey(filter, pagination, sortingFilter);

            return(cache.GetOrCreate(key,
                                     entry =>
            {
                entry.SetOptions(cacheOptions);

                return productRepository.GetAllAsync(filter, pagination, sortingFilter);
            }));
        }
コード例 #13
0
 public SortingFilterTests()
 {
     _sortingFilter = new SortingFilter();
     _actionContext = new ActionContext
     {
         HttpContext = new DefaultHttpContext
         {
             Request =
             {
                 QueryString = new QueryString("?sort=prop1_asc;prop2_dsc")
             },
         },
         RouteData        = new RouteData(),
         ActionDescriptor = new ControllerActionDescriptor()
     };
 }
コード例 #14
0
 private static IQueryable <UserStory> Sort(SortingFilter sortingFilter, IQueryable <UserStory> query)
 {
     return(sortingFilter.SortingParams switch
     {
         UserStorySortingConstants.IdAsc => query.OrderBy(x => x.IdForProject),
         UserStorySortingConstants.IdDesc => query.OrderByDescending(x => x.IdForProject),
         UserStorySortingConstants.TitleAsc => query.OrderBy(x => x.Title),
         UserStorySortingConstants.TitleDesc => query.OrderByDescending(x => x.Title),
         UserStorySortingConstants.StoryPointsAsc => query.OrderBy(x => x.StoryPoints),
         UserStorySortingConstants.StoryPointsDesc => query.OrderByDescending(x => x.StoryPoints),
         UserStorySortingConstants.PriorityAsc => query.OrderBy(x => x.BacklogPriority.Weight),
         UserStorySortingConstants.PriorityDesc => query.OrderByDescending(x => x.BacklogPriority.Weight),
         UserStorySortingConstants.SprintAsc => query.OrderBy(x => x.Sprint.Name),
         UserStorySortingConstants.SprintDesc => query.OrderByDescending(x => x.Sprint.Name),
         _ => query,
     });
コード例 #15
0
ファイル: PaginationService.cs プロジェクト: Shystee/Shop
        private static List <Sorting> SortedBy(SortingFilter sortingFilter)
        {
            if (sortingFilter == null)
            {
                return(null);
            }

            var sorts = new List <Sorting>();

            foreach (var sort in sortingFilter.Sortings)
            {
                sorts.Add(new Sorting
                {
                    Field = sort.Name,
                    Order = SortingConstants.DirectionsDictionary[sort.Direction]
                });
            }

            return(sorts);
        }
コード例 #16
0
ファイル: RatingRepository.cs プロジェクト: Shystee/Shop
        private IQueryable <Rating> ApplySort(IQueryable <Rating> queryable, SortingFilter filter)
        {
            foreach (var sorting in filter.Sortings)
            {
                switch (sorting.Name)
                {
                case "comment":
                    queryable = queryable.OrderBy(x => x.Comment, sorting.Direction);

                    break;

                case "value":
                    queryable = queryable.OrderBy(x => x.Value, sorting.Direction);

                    break;
                }
            }

            return(queryable);
        }
コード例 #17
0
        public void Check_That_SortFilter_Returns_Right_Sorting_Order_For_MostCommented()
        {
            // Arrange
            var container = new GameFilterContainer
            {
                Model = new GamesFilterModel
                {
                    SortCondition = SortCondition.MostCommented,
                }
            };

            var filter = new SortingFilter();

            IEnumerable <Game> list = GetGamesList();

            // Act
            filter.Execute(container);
            IEnumerable <Game> result = list.OrderBy(x => (container.SortCondition(x)));

            // Assert
            Assert.IsTrue(result.First().GameLocalizations.First().Name == "game4");
            Assert.IsTrue(result.Last().GameLocalizations.First().Name == "game1");
        }
コード例 #18
0
 public async Task <IEnumerable <Order> > GetOrders(PaginationFilter paginationFilter, SortingFilter sortingFilter, GetAllOrdersFilter filter = null)
 {
     return(await orderRepository.GetAllFilteredAsync(paginationFilter, sortingFilter, filter));
 }
コード例 #19
0
ファイル: ProductRepository.cs プロジェクト: Shystee/Shop
        private static IQueryable <Product> ApplySort(IQueryable <Product> queryable, SortingFilter filter)
        {
            foreach (var sorting in filter.Sortings)
            {
                switch (sorting.Name)
                {
                case "description":
                    queryable = queryable.OrderBy(x => x.Description, sorting.Direction);

                    break;

                case "name":
                    queryable = queryable.OrderBy(x => x.Name, sorting.Direction);

                    break;

                case "price":
                    queryable = queryable.OrderBy(x => x.Price, sorting.Direction);

                    break;

                case "averageRating":
                    queryable = queryable.OrderBy(x => x.Ratings.Sum(r => r.Value), sorting.Direction);

                    break;
                }
            }

            return(queryable);
        }
コード例 #20
0
        public async Task <IEnumerable <UserStoryAllDto> > GetAllAsync(int projectId, SortingFilter sortingFilter)
        {
            var query = this.userStoryRepo.AllAsNoTracking()
                        .Where(x => x.ProjectId == projectId);
            var srotedQuery = Sort(sortingFilter, query);

            var sortedWorkItems = await srotedQuery.ProjectTo <UserStoryAllDto>(this.mapper.ConfigurationProvider)
                                  .ToListAsync();

            return(sortedWorkItems);
        }
コード例 #21
0
        public async Task <IEnumerable <Order> > GetAllFilteredAsync(PaginationFilter paginationFilter, SortingFilter sortingFilter, GetAllOrdersFilter filter = null)
        {
            var query = dbContext.Set <Order>()
                        .Include(x => x.OrderDetails)
                        .ThenInclude(x => x.Product)
                        .AsQueryable();

            AddFiltersOnQuery(ref query, filter);
            SortingHelper.ApplySort(ref query, sortingFilter.OrderBy);

            return(await PaginationHelper <Order> .PagedList(query, paginationFilter.Page));
        }
コード例 #22
0
 public static string GenerateSortingQuery(this string uri, SortingFilter sorting)
 {
     return(uri.AddQuery("sort", SortingBuilder(sorting)));
 }