public async Task <ApprenticeshipSearchResponse> Handle(ApprenticeshipSearchQuery message, CancellationToken cancellationToken) { var response = new ApprenticeshipSearchResponse { SortOrder = message.Order == 0 ? "1" : message.Order.ToString(), SearchTerm = message.Keywords }; message.Page = message.Page <= 0 ? 1 : message.Page; var searchResults = await _searchService.SearchByKeyword(message.Keywords, message.Page, _paginationSettings.DefaultResultsAmount, message.Order, message.SelectedLevels); response.ActualPage = message.Page; response.AggregationLevel = searchResults.LevelAggregation; response.SearchTerm = message.Keywords; response.Results = searchResults.Results; response.ResultsToTake = searchResults.ResultsToTake; response.SelectedLevels = searchResults.SelectedLevels?.ToList(); response.TotalResults = searchResults.TotalResults; response.LastPage = searchResults.LastPage; if (searchResults.TotalResults > 0 && !searchResults.Results.Any()) { response.StatusCode = ApprenticeshipSearchResponse.ResponseCodes.PageNumberOutOfUpperBound; return(response); } response.StatusCode = ApprenticeshipSearchResponse.ResponseCodes.Success; return(response); }
public async Task <FatSearchResultsViewModel> GetSearchResults(SearchQueryViewModel searchQueryModel) { var cacheKey = $"FatComponentsCache-searchresults-{searchQueryModel.Keywords}-{searchQueryModel.Page}-{searchQueryModel.ResultsToTake}-{searchQueryModel.SortOrder}"; foreach (var level in searchQueryModel.SelectedLevels) { cacheKey += $"-{level}"; } var model = await _cacheService.RetrieveFromCache <FatSearchResultsViewModel>(cacheKey); if (model == null) { var results = _apprenticeshipSearchService.SearchByKeyword(searchQueryModel.Keywords, searchQueryModel.Page, searchQueryModel.ResultsToTake, searchQueryModel.SortOrder, searchQueryModel.SelectedLevels); model = _fatSearchResultsViewModelMapper.Map(await results); await _cacheService.SaveToCache(cacheKey, model, new TimeSpan(_cacheSettings.CacheAbsoluteExpirationDays, 0, 0, 0), new TimeSpan(_cacheSettings.CacheSlidingExpirationDays, 0, 0, 0)); } model.SearchQuery.AddRemoveBasketResponse = searchQueryModel.AddRemoveBasketResponse; return(model); }