コード例 #1
0
        public async Task <JsonResult> Filter(HomeSearchBindingModel model)
        {
            var cacheKey = KeyGenerator.Generate(
                WebConstants.CacheHomeFilterPrepend,
                model.SelectedCarType.ToString(),
                model.SelectedModelType,
                model.SelectedPriceRange,
                model.SelectedYear);

            var cachedModel = await this.cacheService.GetOrDefaultAsync <HomeSearchBindingModel>(cacheKey);

            if (cachedModel != null)
            {
                return(Json(cachedModel));
            }

            var priceRanges      = ParameterParser.ParsePriceRange(model.SelectedPriceRange);
            var filterStrategies = CarFilterStrategyFactory
                                   .GetStrategies(model.SelectedYear, priceRanges[0], priceRanges[1], WebConstants.AllFilterTypeModelValue);
            var mutipleFilterStrategy = CarMultipleFilterStrategyFactory.GetStrategy(new string[] { model.SelectedModelType });

            var filteredCars = this.carsService.GetFiltered <BaseCar>(filterStrategies.ToArray());

            filteredCars = mutipleFilterStrategy.Filter(filteredCars);

            var searchModel = await this.homeService.GetSearchModelAsync(filteredCars, model.SelectedCarType);

            _ = this.cacheService.AddInfinityCacheAsync(searchModel, cacheKey, WebConstants.CacheCarsType);

            return(Json(searchModel));
        }