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(); } }
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)); }