public async Task <IActionResult> Index( AdminBaseCarFilterStrategy filter = AdminBaseCarFilterStrategy.All, string name = "", int pageNumber = 1) { var cookies = this.HttpContext.Request.Cookies; var sortDirectionKey = WebConstants.CookieAdminCarsSortDirectionKey; var sortDirection = this.cookiesService.GetValueOrDefault <SortStrategyDirection>(cookies, sortDirectionKey); var sortTypeKey = WebConstants.CookieAdminCarsSortTypeKey; var sortType = this.cookiesService.GetValueOrDefault <AdminBaseCarSortStrategyType>(cookies, sortTypeKey); var filterStrategy = AdminCarFilterStrategyFactory.GetStrategy(filter, name); var sortStrategy = AdminBaseCarSortStrategyFactory.GetStrategy <BaseCar>(sortType, sortDirection); var carServiceModels = this.carsService.GetCars(sortStrategy, filterStrategy); var carServiceModelsFromCurrentPage = carServiceModels.GetFromPage(pageNumber, WebConstants.PageSize); var carViewModels = await carServiceModelsFromCurrentPage.To <CarConciseViewModel>().ToArrayAsync(); var totalPagesCount = await PaginationHelper.CountTotalPagesCountAsync(carServiceModels); var model = new AdminCarsViewModel() { Cars = carViewModels, SortStrategyDirection = sortDirection, SortStrategyType = sortType, CurrentPage = pageNumber, TotalPagesCount = totalPagesCount }; return(View(model)); }
public static ICarFilterStrategy GetStrategy(AdminBaseCarFilterStrategy filterStrategy, string name) { switch (filterStrategy) { case AdminBaseCarFilterStrategy.Engine: return(new FilterCarsByPredicateStrategy(c => c.Engine.Name == name)); case AdminBaseCarFilterStrategy.Option: return(new FilterCarsByPredicateStrategy(c => c.Options.Any(o => o.Option.Name == name))); case AdminBaseCarFilterStrategy.FuelType: return(new FilterCarsByPredicateStrategy(c => c.FuelType.Name == name)); case AdminBaseCarFilterStrategy.ModelType: return(new FilterCarsByPredicateStrategy(c => c.ModelType.Name == name)); case AdminBaseCarFilterStrategy.Series: return(new FilterCarsByPredicateStrategy(c => c.Series.Name == name)); case AdminBaseCarFilterStrategy.All: return(new ReturnAllFilterStrategy()); default: throw new InvalidEnumArgumentException(); } }