public async Task <IHttpActionResult> GetInternal(SystemFilterQuery systemFilter = null, string userFilter = null, string query = null, string sort = null, string offset = null, string mode = null, int page = 1, int limit = 10, string facet = null)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page + 1, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(BadRequest("Cannot get requested page"));
            }

            if (systemFilter == null)
            {
                systemFilter = GetSystemFilter(HasOrganizationFilter(query), _supportsSoftDeletes);
            }

            var fo = AggregationOptions.Parse(facet);

            FindResults <TModel> results;

            try {
                results = await _repository.SearchAsync(systemFilter, userFilter, query, sort, new PagingOptions { Limit = limit, Page = page }, fo);
            } catch (ApplicationException ex) {
                ex.ToExceptionless().SetProperty("Search Filter", new { SystemFilter = systemFilter, UserFilter = query, Sort = sort, Offset = offset, Page = page, Limit = limit }).AddTags("Search").Submit();
                return(BadRequest("An error has occurred. Please check your search filter."));
            }

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(await MapCollection <TViewModel>(results.Documents, true), results.HasMore, page, results.Total));
            }

            var mappedModels = await MapCollection <TViewModel>(results.Documents, true);

            var hasMore = results.HasMore && !NextPageExceedsSkipLimit(page, limit);

            if (facet != null)
            {
                var wrappedResult = new ResultWithFacets <TViewModel> {
                    Results = mappedModels, Facets = results.Aggregations
                };
                return(OkWithResourceLinks(wrappedResult, hasMore, page, results.Total));
            }

            return(OkWithResourceLinks(mappedModels, hasMore, page, results.Total));
        }
Beispiel #2
0
        public SystemFilterQuery GetSystemFilter(bool hasOrganizationFilter, bool supportsSoftDeletes)
        {
            var result = new SystemFilterQuery();

            if (supportsSoftDeletes)
            {
                result.IncludeSoftDeletes = false;
            }

            if (hasOrganizationFilter && Request.IsGlobalAdmin())
            {
                return(result);
            }

            result.OrganizationIds.Add(Request.GetSelectedOrganizationId());
            return(result);
        }