Beispiel #1
0
        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();
            }
        }