예제 #1
0
        public void EnumerableTest()
        {
            var client = GetPagerSuccessClient();
            var pager  = Pager <MyResource> .Build("/resources", new Dictionary <string, object> {
            }, null, client);

            var i = 0;

            foreach (MyResource r in pager)
            {
                if (i < 3)
                {
                    Assert.Equal("A page 1 String", r.MyString);
                }
                else
                {
                    Assert.Equal("A page 2 String", r.MyString);
                }
                i++;
            }

            // There should be 5 resources since
            // there is a second page
            Assert.Equal(5, i);

            // We don't allow resetting pager states right now
            Assert.Throws <NotImplementedException>(() =>
            {
                pager.Reset();
            });

            // should do nothing
            pager.Dispose();
        }
예제 #2
0
        public async Task <FilterProduct> FilterProduct(FilterProduct filter)
        {
            var productQuery = unitOfWork.ProductRepository.GetEntitiesQuery();


            if (!string.IsNullOrEmpty(filter.Title))
            {
                productQuery = productQuery.Where(s => s.Name.Contains(filter.Title));
            }

            productQuery = productQuery.Where(s => s.Price >= filter.StartPrice);


            if (filter.Categories != null && filter.Categories.Any())
            {
                productQuery = productQuery.SelectMany(s => s.ProductSelectedCategories.Where(f => filter.Categories.Contains(f.CategoryId)).Select(t => t.product));
            }


            if (filter.EndPrice != 0)
            {
                productQuery = productQuery.Where(s => s.Price <= filter.EndPrice);
            }

            var count    = (int)Math.Ceiling(productQuery.Count() / (double)filter.TakeEntity);
            var pager    = Pager.Build(count, filter.PageId, filter.TakeEntity);
            var products = await productQuery.Paging(pager).ToListAsync();

            return(filter.SetProducts(products).SetPaging(pager));
        }
예제 #3
0
        public async Task <FilterMessagesDTO> FilterMessages(FilterMessagesDTO filter)
        {
            var messagesQuery = messageRepository.GetEntitiesQuery().Where(w => w.IsDelete == false).AsQueryable();

            if (!string.IsNullOrEmpty(filter.Title))
            {
                messagesQuery = messagesQuery.Where(s => s.text.Contains(filter.Title));
            }

            if (filter.Categories != null && filter.Categories.Any())
            {
                messagesQuery = messagesQuery.SelectMany(s =>
                                                         s.ProductSelectedCategories.Where(f => filter.Categories.Contains(f.MessageCategoryId)).Select(t => t.Message));
            }

            var count = (int)Math.Ceiling(messagesQuery.Count() / (double)filter.TakeEntity);

            var pager = Pager.Build(count, filter.PageId, filter.TakeEntity);

            var messages = await messagesQuery.Paging(pager).Select(s => new MessagesDTO {
                text                   = s.text,
                Like                   = s.Like,
                IsImportant            = s.IsImportant,
                DisLike                = s.DisLike,
                AuthorAvatar           = s.User.Avatar,
                AuthorFirstName        = s.User.FirstName,
                AuthorLastName         = s.User.LastName,
                AuthorGender           = s.User.Gender,
                AuthorMembershipNumber = s.User.MembershipNumber
            }).ToListAsync();

            return(filter.SetMessages(messages).SetPaging(pager));
        }
예제 #4
0
 public static IHtmlString RenderPager(this HtmlHelper helper,
                                       int currentPage,
                                       int totalPages,
                                       Func <int, string> urlBuilder,
                                       string currentPageClass = "active",
                                       string ulClass          = "pagination",
                                       string liDisabledClass  = "disabled",
                                       Action <ContentResource> resourceOverrides = null)
 {
     return(helper.Raw(Pager.Build(currentPage, totalPages, urlBuilder, currentPageClass, ulClass, liDisabledClass, resourceOverrides).Render()));
 }
예제 #5
0
        public AdminUsersDto GetUsersByFilter(AdminUsersDto filter)
        {
            var query = _userRepository.Get(null).AsQueryable().SetUsersFilter(filter);

            var count = (int)Math.Ceiling(query.Count() / (double)filter.TakeEntity);

            var pager = Pager.Build(count, filter.PageId, filter.TakeEntity);

            var users = query.OrderByDescending(s => s.Id).Paging(pager).ToList();

            return(filter.SetUsers(users).SetPagingItems(pager));
        }
예제 #6
0
        public AllSongsDTO GetAllSongs(AllSongsDTO filter)
        {
            var query = _songRepository.Get(null).AsQueryable();

            var count = (int)Math.Ceiling(query.Count() / (double)filter.TakeEntity);

            var pager = Pager.Build(count, filter.PageId, filter.TakeEntity);

            var songs = query.OrderByDescending(s => s.Id).Paging(pager).ToList();

            return(new AllSongsDTO().SetSongs(songs).SetPaging(pager));
        }
예제 #7
0
        public async Task <FilterProductsDTO> FilterProducts(FilterProductsDTO filter)
        {
            var productsQuery = productRepository.GetEntitiesQuery().AsQueryable();

            switch (filter.OrderBy)
            {
            case ProductOrderBy.PriceAsc:
                productsQuery = productsQuery.OrderBy(s => s.Price);
                break;

            case ProductOrderBy.PriceDec:
                productsQuery = productsQuery.OrderByDescending(s => s.Price);
                break;
            }

            if (!string.IsNullOrEmpty(filter.Title))
            {
                productsQuery = productsQuery.Where(s => s.ProductName.Contains(filter.Title));
            }

            if (filter.StartPrice != 0)
            {
                productsQuery = productsQuery.Where(s => s.Price >= filter.StartPrice);
            }

            if (filter.EndPrice != 0)
            {
                productsQuery = productsQuery.Where(s => s.Price <= filter.EndPrice);
            }

            productsQuery = productsQuery.Where(s => s.Price >= filter.StartPrice);

            if (filter.Categories != null && filter.Categories.Any())
            {
                productsQuery = productsQuery.SelectMany(s =>
                                                         s.ProductSelectedCategories.Where(f => filter.Categories.Contains(f.ProductCategoryId)).Select(t => t.Product));
            }

            if (filter.EndPrice != 0)
            {
                productsQuery = productsQuery.Where(s => s.Price <= filter.EndPrice);
            }

            var count = (int)Math.Ceiling(productsQuery.Count() / (double)filter.TakeEntity);

            var pager = Pager.Build(count, filter.PageId, filter.TakeEntity);

            var products = await productsQuery.Paging(pager).ToListAsync();

            return(filter.SetProducts(products).SetPaging(pager));
        }
예제 #8
0
        public void PagerCountTest()
        {
            var queryParams = new Dictionary <string, object> {
                { "limit", 200 },
                { "a", 1 },
            };
            var clientMock = GetPagerCountClient();

            var pager = Pager <MyResource> .Build("/resources", queryParams, null, clientMock);

            var count = pager.Count();

            Assert.Equal(42, count);
        }
예제 #9
0
        public async Task <FilterProductsDTO> FilterProducts(FilterProductsDTO filter)
        {
            //IQueryRable<Product> = _context.product;
            var productQuery = _productRepository.GetEntitiesQuery().AsQueryable();

            //FilterPrice
            switch (filter.OrderBy)
            {
            case ProductOrderBy.PriceAsc:
                productQuery = productQuery.OrderBy(s => s.Price);
                break;

            case ProductOrderBy.PriceDec:
                productQuery = productQuery.OrderByDescending(s => s.Price);
                break;
            }


            //Search Title Filter
            if (!string.IsNullOrEmpty(filter.Title))
            {
                productQuery = productQuery.Where(s => s.ProductName.Contains(filter.Title));
            }

            //Price Filter
            productQuery = productQuery.Where(s => s.Price >= filter.StartPrice);

            if (filter.EndPrice != 0)
            {
                productQuery = productQuery.Where(c => c.Price <= filter.EndPrice);
            }

            if (filter.categories != null && filter.categories.Any())
            {
                productQuery = productQuery.SelectMany(s => s.ProductSelectedCategorys.Where(f => filter.categories.Contains(f.ProductCategoryId)).Select(t => t.Product));
            }

            //اعداد محصولات
            var count = (int)Math.Ceiling(productQuery.Count() / (double)filter.TakeEntity);


            var pager = Pager.Build(count, filter.pageId, filter.TakeEntity);


            var products = await productQuery.Paging(pager).ToListAsync();

            //برای این ما خود فیلتر را برمیگردونیم که اگر در فیلتر محصولات استرینگی پر باشد پر باقی بماند
            return(filter.SetProducts(products).SetPaging(pager));
        }
예제 #10
0
        public void EmptyEnumerableTest()
        {
            var pager = Pager <MyResource> .Build("/next", new Dictionary <string, object> {
            }, GetEmptyPagerClient());

            var i = 0;

            foreach (MyResource r in pager)
            {
                Assert.True(false, "Should not be iterating anything if response is empty");
            }

            // There should be 0 resources
            Assert.Equal(0, i);
        }
예제 #11
0
        public void PagerFirstTest()
        {
            var paramsMatcher = MockClient.QueryParameterMatcher(new Dictionary <string, object> {
                { "limit", "1" },
                { "a", "1" },
            });
            var client = MockClient.Build(paramsMatcher, PagerFirstResponse());

            var queryParams = new Dictionary <string, object> {
                { "limit", "200" },
                { "a", "1" },
            };
            var pager = Pager <MyResource> .Build("/resources", queryParams, null, client);

            var resource = pager.First();

            Assert.Equal("First Resource", resource.MyString);
        }
예제 #12
0
        public void EnumerablePagesTest()
        {
            var client = GetPagerSuccessClient();
            var pager  = Pager <MyResource> .Build("/resources", new Dictionary <string, object> {
            }, null, client);

            var total = 0;
            var page  = 0;

            while (pager.HasMore)
            {
                pager.FetchNextPage();
                var count = 0;
                page++;
                foreach (MyResource r in pager.Data)
                {
                    count++;
                    total++;
                }
                if (page == 1)
                {
                    Assert.Equal(3, count);
                }
                else if (page == 2)
                {
                    Assert.Equal(2, count);
                }
                else
                {
                    Assert.True(false, $"Should not have reached this page: {page}");
                }
            }

            // There should be 5 resources since
            // there is a second page
            Assert.Equal(5, total);
        }
예제 #13
0
 public static IHtmlContent RenderPager(this IHtmlHelper helper, int currentPage, int totalPages, Func <int, string> urlBuilder)
 {
     return(helper.Raw(Pager.Build(currentPage, totalPages, urlBuilder).Render()));
 }