public IActionResult SearchBookResultCount([FromBody] SearchRequestContract request, [FromQuery] ProjectTypeContract?projectType) { if (projectType == null) { return(Error($"Required parameter {nameof(projectType)} is not specified")); } try { var advancedRequest = new AdvancedSearchRequestContract { ConditionConjunction = request.ConditionConjunction, Start = request.Start, Count = request.Count, Sort = request.Sort, SortDirection = request.SortDirection, FetchTerms = request.FetchTerms, Parameters = null, }; var result = m_bookSearchManager.SearchByCriteriaCount(advancedRequest, projectType.Value); return(Ok(result)); } catch (ArgumentException exception) { return(BadRequest(exception.Message)); } catch (HttpErrorCodeException exception) { return(StatusCode((int)exception.StatusCode, exception.Message)); } }
public List <SearchResultContract> SearchByCriteria(AdvancedSearchRequestContract request, ProjectTypeContract projectType) { m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction); var processedCriterias = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction); var nonMetadataCriterias = processedCriterias.NonMetadataCriterias; var mainProjectTypeEnum = m_mapper.Map <ProjectTypeEnum>(projectType); var projectTypeEnums = new List <ProjectTypeEnum> { mainProjectTypeEnum }; if (request.Parameters != null && request.Parameters.IncludeAdditionalProjectTypes) { projectTypeEnums.AddRange(request.Parameters.AdditionalProjectTypes.Select(x => m_mapper.Map <ProjectTypeEnum>(x))); } var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnums) { Sort = request.Sort, SortDirection = request.SortDirection, Start = PagingHelper.GetStart(request.Start), Count = PagingHelper.GetCountForProject(request.Count) }; if (processedCriterias.NonMetadataCriterias.Count > 0) { // Search in fulltext DB // 1) search in metadata var projectIdentificatorList = m_bookRepository.InvokeUnitOfWork(x => x.SearchProjectIdByCriteriaQuery(queryCreator)); if (projectIdentificatorList.Count == 0) { return(new List <SearchResultContract>()); } // 2) search in fulltext var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType); var fulltextSearchResultData = fulltextStorage.SearchProjectIdByCriteria(queryCreator.GetStart(), queryCreator.GetCount(), request.Sort, request.SortDirection, nonMetadataCriterias, projectIdentificatorList); // 3) load paged result var termCriteria = CreateTermConditionCreatorOrDefault(request, processedCriterias); var searchByCriteriaFulltextResultWork = new SearchByCriteriaFulltextResultWork(m_metadataRepository, m_bookRepository, fulltextSearchResultData, termCriteria, mainProjectTypeEnum); var dbResult = searchByCriteriaFulltextResultWork.Execute(); var resultList = MapToSearchResult(dbResult, searchByCriteriaFulltextResultWork.PageCounts, searchByCriteriaFulltextResultWork.TermHits); return(resultList); } else { // Search in relational DB var termCriteria = CreateTermConditionCreatorOrDefault(request, processedCriterias); var searchByCriteriaWork = new SearchByCriteriaWork(m_metadataRepository, m_bookRepository, queryCreator, termCriteria); var dbResult = searchByCriteriaWork.Execute(); var resultList = MapToSearchResult(dbResult, searchByCriteriaWork.PageCounts, searchByCriteriaWork.TermHits); return(resultList); } }
protected long SearchByCriteriaCount(List <SearchCriteriaContract> listSearchCriteriaContracts, IList <long> selectedBookIds, IList <int> selectedCategoryIds, SearchAdvancedParametersContract parameters) { AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds); var client = GetBookClient(); var request = new AdvancedSearchRequestContract { ConditionConjunction = listSearchCriteriaContracts, Parameters = parameters, }; var count = client.SearchBookCount(request, GetDefaultProjectType()); return(count); }
public long SearchByCriteriaCount(AdvancedSearchRequestContract request, ProjectTypeContract projectType) { m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction); var processedCriterias = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction); var projectTypeEnums = new List <ProjectTypeEnum> { m_mapper.Map <ProjectTypeEnum>(projectType) }; if (request.Parameters != null && request.Parameters.IncludeAdditionalProjectTypes) { projectTypeEnums.AddRange(request.Parameters.AdditionalProjectTypes.Select(x => m_mapper.Map <ProjectTypeEnum>(x))); } var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnums) { Sort = request.Sort, SortDirection = request.SortDirection, Start = PagingHelper.GetStart(request.Start), Count = PagingHelper.GetCountForProject(request.Count) }; if (processedCriterias.NonMetadataCriterias.Count > 0) { // Search in fulltext DB // 1) search in metadata var projectIdentificatorList = m_bookRepository.InvokeUnitOfWork(x => x.SearchProjectIdByCriteriaQuery(queryCreator)); if (projectIdentificatorList.Count == 0) { return(0); } // 2) search in fulltext var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType); var result = fulltextStorage.SearchByCriteriaCount(processedCriterias.NonMetadataCriterias, projectIdentificatorList); return(result); } else { // Search in relational DB var result = m_bookRepository.InvokeUnitOfWork(x => x.SearchByCriteriaQueryCount(queryCreator)); return(result); } }
public long SearchBookCount(AdvancedSearchRequestContract request, ProjectTypeContract projectType) { try { var result = m_client.Post <long>($"book/search-count?projectType={projectType}", request); return(result); } catch (HttpRequestException e) { if (m_logger.IsErrorEnabled()) { m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e); } throw; } }
protected List <SearchResultExtendedContract> SearchByCriteria(List <SearchCriteriaContract> listSearchCriteriaContracts, int start, int count, short sortingEnum, bool sortAsc, IList <long> selectedBookIds, IList <int> selectedCategoryIds, SearchAdvancedParametersContract parameters) { AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds); var client = GetBookClient(); var request = new AdvancedSearchRequestContract { ConditionConjunction = listSearchCriteriaContracts, Start = start, Count = count, Sort = (SortTypeEnumContract)sortingEnum, SortDirection = sortAsc ? SortDirectionEnumContract.Asc : SortDirectionEnumContract.Desc, FetchTerms = listSearchCriteriaContracts.Any(x => x.Key == CriteriaKey.Term), Parameters = parameters, }; var result = client.SearchBook(request, GetDefaultProjectType()); var resultContract = Mapper.Map <List <SearchResultExtendedContract> >(result); return(resultContract); }
public IActionResult SearchBook([FromBody] AdvancedSearchRequestContract request, [FromQuery] ProjectTypeContract?projectType) // TODO possible switch SearchResultContract to BookContract { if (projectType == null) { return(Error($"Required parameter {nameof(projectType)} is not specified")); } try { var result = m_bookSearchManager.SearchByCriteria(request, projectType.Value); return(Ok(result)); } catch (ArgumentException exception) { return(BadRequest(exception.Message)); } catch (HttpErrorCodeException exception) { return(StatusCode((int)exception.StatusCode, exception.Message)); } }