Example #1
0
        public ActionResult AdvancedSearchPaged(string json, int start, int count, short sortingEnum, bool sortAsc,
                                                IList <long> selectedBookIds,
                                                IList <int> selectedCategoryIds)
        {
            var deserialized =
                JsonConvert.DeserializeObject <IList <ConditionCriteriaDescriptionBase> >(json, new ConditionCriteriaDescriptionConverter());
            var listSearchCriteriaContracts = Mapper.Map <List <SearchCriteriaContract> >(deserialized);

            AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds);


            var request = new SearchRequestContract
            {
                ConditionConjunction = listSearchCriteriaContracts,
                Start         = start,
                Count         = count,
                Sort          = (SortTypeEnumContract)sortingEnum,
                SortDirection = sortAsc ? SortDirectionEnumContract.Asc : SortDirectionEnumContract.Desc,
            };

            var client          = GetBookClient();
            var results         = client.SearchAudioBook(request, GetDefaultProjectType());
            var resultContracts = Mapper.Map <List <AudioBookSearchResultExtendedContract> >(results);

            return(Json(new { books = resultContracts }, GetJsonSerializerSettingsForBiblModule()));
        }
Example #2
0
        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));
            }
        }
Example #3
0
        public ActionResult <FulltextSearchResultContract> SearchByCriteria([FromBody] SearchRequestContract searchRequest)
        {
            if (ContainsAnyUnsupportedCriteria(searchRequest))
            {
                return(BadRequest("Request contains unsupported criteria"));
            }

            var result = m_searchManager.SearchProjectsByCriteria(searchRequest);

            return(result);
        }
Example #4
0
        private TermCriteriaPageConditionCreator CreateTermConditionCreatorOrDefault(SearchRequestContract request, FilteredCriterias processedCriterias)
        {
            TermCriteriaPageConditionCreator termCriteria = null;

            if (request.FetchTerms && request.ConditionConjunction.Any(x => x.Key == CriteriaKey.Term))
            {
                termCriteria = new TermCriteriaPageConditionCreator();
                termCriteria.AddCriteria(processedCriterias.MetadataCriterias);
            }

            return(termCriteria);
        }
Example #5
0
        public FulltextSearchResultContract SearchByCriteria(SearchRequestContract searchRequestContract)
        {
            try
            {
                var result = m_client.Post <FulltextSearchResultContract>("snapshot/search", searchRequestContract);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
Example #6
0
        public List <AudioBookSearchResultContract> SearchAudioBook(SearchRequestContract request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <List <AudioBookSearchResultContract> >($"audiobook/search?projectType={projectType}", request);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
Example #7
0
        public FulltextSearchResultContract SearchProjectsByCriteria(SearchRequestContract searchRequest)
        {
            var queriesBuilder = m_queriesBuilderFactory.Create(IndexType.Snapshot);
            var filterQuery    =
                queriesBuilder.GetFilterSearchQuery(searchRequest.ConditionConjunction, SnapshotIdField);
            var mustQuery = queriesBuilder.GetSearchQuery(searchRequest.ConditionConjunction, SnapshotTextField);


            var client = m_communicationProvider.GetElasticClient();

            var response = client.Search <SnapshotResourceContract>(s => s
                                                                    .Index(SnapshotIndex)
                                                                    .Type(SnapshotType)
                                                                    .From(searchRequest.Start ?? DefaultStart)
                                                                    .Size(searchRequest.Count ?? DefaultSize)
                                                                    .Source(sf => sf
                                                                            .Includes(i => i
                                                                                      .Fields(
                                                                                          f => f.ProjectId
                                                                                          )
                                                                                      )
                                                                            )
                                                                    .Query(q => q
                                                                           .Bool(b => b
                                                                                 .Filter(filterQuery)
                                                                                 .Must(mustQuery)
                                                                                 )
                                                                           )
                                                                    .Sort(so =>
            {
                if (searchRequest.SortDirection.HasValue && searchRequest.Sort.HasValue)
                {
                    if (searchRequest.SortDirection.Value == SortDirectionEnumContract.Asc)
                    {
                        return(so.Ascending(GetElasticFieldName(searchRequest.Sort.Value)));
                    }

                    return(so.Descending(GetElasticFieldName(searchRequest.Sort.Value)));
                }

                return(so.Ascending(GetElasticFieldName(SortTypeEnumContract.Title)));
            })
                                                                    );

            return(m_searchResultProcessor.ProcessSearchByCriteria(response));
        }
Example #8
0
        public IActionResult SearchBook([FromBody] SearchRequestContract request, [FromQuery] ProjectTypeContract?projectType)
        {
            if (projectType == null)
            {
                return(Error($"Required parameter {nameof(projectType)} is not specified"));
            }

            try
            {
                var result = m_bookSearchManager.SearchAudioByCriteria(request, projectType.Value);
                return(Ok(result));
            }
            catch (ArgumentException exception)
            {
                return(BadRequest(exception.Message));
            }
            catch (HttpErrorCodeException exception)
            {
                return(StatusCode((int)exception.StatusCode, exception.Message));
            }
        }
Example #9
0
        public List <AudioBookSearchResultContract> SearchAudioByCriteria(SearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var projectTypeEnum    = m_mapper.Map <ProjectTypeEnum>(projectType);

            var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnum)
            {
                Sort          = request.Sort,
                SortDirection = request.SortDirection,
                Start         = PagingHelper.GetStart(request.Start),
                Count         = PagingHelper.GetCountForProject(request.Count)
            };

            // Search only in relational DB

            var searchByCriteriaWork = new SearchAudioByCriteriaWork(m_metadataRepository, m_bookRepository, queryCreator);
            var dbResult             = searchByCriteriaWork.Execute();

            //var resultList = MapToSearchResult(dbResult, searchByCriteriaWork.PageCounts);
            var resultList = new List <AudioBookSearchResultContract>(dbResult.Count);

            foreach (var dbMetadata in dbResult)
            {
                var resultItem = m_mapper.Map <AudioBookSearchResultContract>(dbMetadata);
                resultList.Add(resultItem);

                if (searchByCriteriaWork.FullBookRecordingsByProjectId.TryGetValue(dbMetadata.Resource.Project.Id, out var audioList))
                {
                    resultItem.FullBookRecordings = m_mapper.Map <List <AudioContract> >(audioList);
                }
                else
                {
                    resultItem.FullBookRecordings = new List <AudioContract>();
                }
            }

            return(resultList);
        }
Example #10
0
        public ActionResult TextSearchPaged(string text, int start, int count, short sortingEnum, bool sortAsc, IList <long> selectedBookIds,
                                            IList <int> selectedCategoryIds)
        {
            var listSearchCriteriaContracts = CreateTextCriteriaList(CriteriaKey.Title, text);

            AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds);


            var request = new SearchRequestContract
            {
                ConditionConjunction = listSearchCriteriaContracts,
                Start         = start,
                Count         = count,
                Sort          = (SortTypeEnumContract)sortingEnum,
                SortDirection = sortAsc ? SortDirectionEnumContract.Asc : SortDirectionEnumContract.Desc,
            };
            var client          = GetBookClient();
            var results         = client.SearchAudioBook(request, GetDefaultProjectType());
            var resultContracts = Mapper.Map <List <AudioBookSearchResultExtendedContract> >(results);

            return(Json(new { books = resultContracts }, GetJsonSerializerSettingsForBiblModule()));
        }
Example #11
0
        public FulltextSearchResultData SearchProjectIdByCriteria(int start, int count, SortTypeEnumContract?sort,
                                                                  SortDirectionEnumContract?sortDirection, List <SearchCriteriaContract> criteria, IList <ProjectIdentificationResult> projects)
        {
            UpdateCriteriaWithSnapshotRestriction(criteria, projects);

            var fulltextServiceClient = m_communicationProvider.GetFulltextServiceClient();
            var searchRequest         = new SearchRequestContract
            {
                Start                = start,
                Count                = count,
                Sort                 = sort,
                SortDirection        = sortDirection,
                ConditionConjunction = criteria,
            };
            var result = fulltextServiceClient.SearchByCriteria(searchRequest);

            return(new FulltextSearchResultData
            {
                LongList = result.ProjectIds,
                SearchResultType = FulltextSearchResultType.ProjectId
            });
        }