コード例 #1
0
        public async Task<Result<SearchResponse>> HandleAsync(SearchRequestParameter searchRequestParameter, CancellationToken ct)
        {
            try
            {
                var endpoint = new SearchRequestDto(searchRequestParameter.Keywords, new SearchPaginationRequest())
                    .BuildRequestEndpoint(_baseUrl);

                var client = new HttpClient();

                var response = new HttpResponseMessage();
                await SimpleRetryHelper.RetryOnExceptionAsync(async () =>
                {
                    response = await client.GetAsync(endpoint, ct);

                }, _logger);
                response.EnsureSuccessStatusCode();

                var responseBody = await response.Content.ReadAsStringAsync();
                if (string.IsNullOrWhiteSpace(responseBody))
                    return Result.Failure<SearchResponse>(ErrorMessages.ResponseBodyIsEmpty);

                var searchResponse = GoogleSearchResultParser.GetSearchResponseFromHtml(responseBody, searchRequestParameter.Url);

                return Result.Success(searchResponse);

            }
            catch (Exception ex)
            {
                _logger.LogError($"Exception caught while handling GoogleSearchEngineHandler", ex);
                return Result.Failure<SearchResponse>(ErrorMessages.FailureToLoadSearchResults);
            }
        }
コード例 #2
0
        public Task <SearchResult <UMAPendingRequest> > FindByOwner(string owner, SearchRequestParameter parameter)
        {
            var filteredUMAPendingRequests = _umaPendingRequests.AsQueryable();

            filteredUMAPendingRequests = filteredUMAPendingRequests.Where(f => f.Owner == owner);
            return(InternalFind(filteredUMAPendingRequests, parameter));
        }
コード例 #3
0
        protected SearchRequestParameter ExtractSearchRequestParameter()
        {
            var result = new SearchRequestParameter();

            EnrichSearchRequestParameter(result);
            return(result);
        }
コード例 #4
0
        protected void EnrichSearchRequestParameter(SearchRequestParameter parameter)
        {
            var query      = Request.Query.ToJObject();
            var count      = query.GetInt(UMASearchRequestNames.Count);
            var startIndex = query.GetInt(UMASearchRequestNames.StartIndex);
            var sortKey    = query.GetStr(UMASearchRequestNames.SortKey);
            var sortOrder  = query.GetStr(UMASearchRequestNames.SortOrder);

            if (count != null)
            {
                parameter.Count = count.Value;
            }

            if (startIndex != null)
            {
                parameter.StartIndex = startIndex.Value;
            }

            if (!string.IsNullOrWhiteSpace(sortKey))
            {
                parameter.SortKey = sortKey;
            }

            if (!string.IsNullOrWhiteSpace(sortOrder))
            {
                if (sortOrder.Equals("asc", StringComparison.InvariantCultureIgnoreCase))
                {
                    parameter.SortOrder = SearchRequestOrders.ASC;
                }
                else if (sortOrder.Equals("desc", StringComparison.InvariantCultureIgnoreCase))
                {
                    parameter.SortOrder = SearchRequestOrders.DESC;
                }
            }
        }
コード例 #5
0
        public Task <SearchResult <UMAPendingRequest> > FindByOwner(string owner, SearchRequestParameter parameter, CancellationToken cancellationToken)
        {
            var filteredUMAPendingRequests = LstData.AsQueryable();

            filteredUMAPendingRequests = filteredUMAPendingRequests.Where(f => f.Owner == owner);
            return(InternalFind(filteredUMAPendingRequests, parameter));
        }
コード例 #6
0
        public static IActionResult Serialize(SearchRequestParameter searchRequestParameter, SearchResult <UMAPendingRequest> searchResult)
        {
            var result = new JObject
            {
                { "totalResults", searchResult.TotalResults },
                { "count", searchRequestParameter.Count },
                { "startIndex", searchRequestParameter.StartIndex },
                { "data", new JArray(searchResult.Records.Select(rec => Serialize(rec))) }
            };

            return(new OkObjectResult(result));
        }
コード例 #7
0
        public async Task <IActionResult> Search(SearchResultViewModel searchResultViewModel, CancellationToken ct)
        {
            if (!ModelState.IsValid)
            {
                return(View("Index", searchResultViewModel));
            }

            var requestParameter     = new SearchRequestParameter(searchResultViewModel.SearchCriteriaKeywords, searchResultViewModel.SearchCriteriaUrl);
            var searchResponseResult = await _searchEngineService.SearchAsync(requestParameter, ct);

            if (searchResponseResult.IsFailure)
            {
                return(RedirectToAction("Error"));
            }

            searchResultViewModel.ResultRanks = searchResponseResult.Value.ResultPositions;

            return(View("Index", searchResultViewModel));
        }
コード例 #8
0
        private Task <SearchResult <UMAPendingRequest> > InternalFind(IQueryable <UMAPendingRequest> result, SearchRequestParameter parameter)
        {
            var totalResults = result.Count();

            if (parameter.SortKey == "CreateDateTime")
            {
                switch (parameter.SortOrder)
                {
                case SearchRequestOrders.ASC:
                    result = result.OrderBy(p => p.CreateDateTime);
                    break;

                case SearchRequestOrders.DESC:
                    result = result.OrderByDescending(p => p.CreateDateTime);
                    break;
                }
            }

            result = result.Skip(parameter.StartIndex).Take(parameter.Count);
            return(Task.FromResult(new SearchResult <UMAPendingRequest>
            {
                Records = result.ToList(),
                TotalResults = totalResults
            }));
        }
コード例 #9
0
 public Task <Result <SearchResponse> > HandleAsync(SearchRequestParameter searchRequestParameter, CancellationToken ct)
 {
     // this class can be extended later when/if we want to support Bing search
     throw new System.NotImplementedException();
 }
コード例 #10
0
 public Task <Result <SearchResponse> > SearchAsync(SearchRequestParameter requestParameter, CancellationToken ct,
                                                    SearchSourceTypes searchSouceType = SearchSourceTypes.Google)
 {
     return(_searchEngineRepository.SearchAsync(requestParameter, ct, searchSouceType));
 }
コード例 #11
0
        private async Task <SearchResult <UMAPendingRequest> > InternalFind(IQueryable <UMAPendingRequest> result, SearchRequestParameter parameter, CancellationToken cancellationToken)
        {
            var totalResults = await result.CountAsync(cancellationToken);

            if (parameter.SortKey == "CreateDateTime")
            {
                switch (parameter.SortOrder)
                {
                case SearchRequestOrders.ASC:
                    result = result.OrderBy(p => p.CreateDateTime);
                    break;

                case SearchRequestOrders.DESC:
                    result = result.OrderByDescending(p => p.CreateDateTime);
                    break;
                }
            }

            var records = await result.Skip(parameter.StartIndex).Take(parameter.Count).ToListAsync(cancellationToken);

            return(new SearchResult <UMAPendingRequest>
            {
                Records = records,
                TotalResults = totalResults
            });
        }
コード例 #12
0
        public Task <SearchResult <UMAPendingRequest> > FindByRequester(string requester, SearchRequestParameter searchRequestParameter, CancellationToken cancellationToken)
        {
            var filtered = _dbContext.PendingRequests.Where(f => f.Requester == requester);

            return(InternalFind(filtered, searchRequestParameter, cancellationToken));
        }
コード例 #13
0
        public Task <SearchResult <UMAPendingRequest> > FindByResource(string resourceId, SearchRequestParameter parameter, CancellationToken cancellationToken)
        {
            var filteredUMAPendingRequests = LstData.AsQueryable();

            filteredUMAPendingRequests = filteredUMAPendingRequests.Where(f => f.Resource.Id == resourceId);
            return(InternalFind(filteredUMAPendingRequests, parameter));
        }
コード例 #14
0
        public Task <SearchResult <UMAPendingRequest> > Find(SearchRequestParameter parameter, CancellationToken cancellationToken)
        {
            var filteredUMAPendingRequests = LstData.AsQueryable();

            return(InternalFind(filteredUMAPendingRequests, parameter));
        }
コード例 #15
0
 public Task <Result <SearchResponse> > SearchAsync(SearchRequestParameter requestParameter, CancellationToken ct, SearchSourceTypes searchSouceType = SearchSourceTypes.Google)
 {
     return(GetHandlerToUse(searchSouceType).HandleAsync(requestParameter, ct));
 }
コード例 #16
0
 public Task <SearchResult <UMAPendingRequest> > Find(SearchRequestParameter searchRequestParameter, CancellationToken cancellationToken)
 {
     return(InternalFind(_dbContext.PendingRequests, searchRequestParameter, cancellationToken));
 }