public static ITestDriveFilterStrategy GetStrategy(AdminTestDriveFilterStrategy filterStrategy, string email)
        {
            switch (filterStrategy)
            {
            case AdminTestDriveFilterStrategy.Email:
                return(new FilterTestDrivesByPredicateStrategy(td => td.User.NormalizedEmail == email.ToUpper()));

            case AdminTestDriveFilterStrategy.All:
                return(new ReturnAllTestDrivesFilterStrategy());

            default:
                throw new InvalidEnumArgumentException();
            }
        }
Пример #2
0
        public async Task <IActionResult> Index(
            AdminTestDriveFilterStrategy filter = AdminTestDriveFilterStrategy.All,
            int pageNumber = 1,
            string name    = "")
        {
            var cookies = this.HttpContext.Request.Cookies;

            var sortTypeKey = WebConstants.CookieAdminTestDrivesSortTypeKey;
            var sortType    = this.cookiesService.GetValueOrDefault <AdminTestDrivesSortStrategyType>(cookies, sortTypeKey);

            var sortDirectionKey = WebConstants.CookieAdminTestDrivesSortDirectionKey;
            var sortDirection    = this.cookiesService.GetValueOrDefault <SortStrategyDirection>(cookies, sortDirectionKey);

            var sortStrategy   = TestDriveSortStrategyFactory.GetStrategy(sortType, sortDirection);
            var filterStrategy = AdminTestDrivesFilterStrategyFactory.GetStrategy(filter, name);

            var allTestDrives      = this.testDriveRepository.GetAll();
            var filteredTestDrives = filterStrategy.Filter(allTestDrives);

            var testDriveViewModels = await this.adminTestDrivesService
                                      .GetAllSorted(filteredTestDrives, sortStrategy, pageNumber)
                                      .To <TestDriveViewModel>()
                                      .ToArrayAsync();

            var totalPagesCount = await PaginationHelper.CountTotalPagesCountAsync(filteredTestDrives);

            var model = new AdminTestDrivesViewModel()
            {
                TestDrives       = testDriveViewModels,
                SortDirection    = sortDirection,
                SortStrategyType = sortType,
                CurrentPage      = pageNumber,
                TotalPagesCount  = totalPagesCount
            };

            return(View(model));
        }