public virtual Task <IResourceCollectionDocument> GetRecords(HttpRequestMessage request, CancellationToken cancellationToken) { var query = _dbContext.Set <T>().AsQueryable(); var sortExpressions = _sortExpressionExtractor.ExtractSortExpressions(request); return(_queryableResourceCollectionDocumentBuilder.BuildDocument(query, request, sortExpressions, cancellationToken)); }
public virtual Task <IResourceCollectionDocument> GetRecords(HttpRequestMessage request, CancellationToken cancellationToken) { var sortExpressions = _sortExpressionExtractor.ExtractSortExpressions(request); var includes = _includeExpressionExtractor.ExtractIncludeExpressions(request); var query = QueryIncludeNavigationProperties(null, GetNavigationPropertiesIncludes <T>(includes)); return(_queryableResourceCollectionDocumentBuilder.BuildDocument(query, request, sortExpressions, cancellationToken, includes)); }
public async Task <IJsonApiDocument> GetRelatedResourceDocument(string primaryResourceId, HttpRequestMessage request, CancellationToken cancellationToken) { var query = await GetRelatedQuery(primaryResourceId, cancellationToken); var includes = GetIncludePaths(); var sortExpressions = _sortExpressionExtractor.ExtractSortExpressions(request); if (sortExpressions == null || sortExpressions.Length < 1) { sortExpressions = GetDefaultSortExpressions(); } return(await _queryableResourceCollectionDocumentBuilder.BuildDocument(query, request, sortExpressions, cancellationToken, includes)); // TODO: allow implementors to specify metadata }
public virtual async Task <IResourceCollectionDocument> GetRecords(HttpRequestMessage request, CancellationToken cancellationToken) { var entityQuery = GetQuery(); var includePaths = GetIncludePathsForQuery() ?? new Expression <Func <TDto, object> >[] { }; var jsonApiPaths = includePaths.Select(ConvertToJsonKeyPath).ToArray(); var mappedQuery = GetMappedQuery(entityQuery, includePaths); var sortationPaths = _sortExpressionExtractor.ExtractSortExpressions(request); if (sortationPaths == null || !sortationPaths.Any()) { sortationPaths = GetDefaultSortExpressions(); } return(await _queryableResourceCollectionDocumentBuilder.BuildDocument(mappedQuery, request, sortationPaths, cancellationToken, jsonApiPaths)); }
public async Task <IJsonApiDocument> BuildDocument(object obj, HttpRequestMessage requestMessage, CancellationToken cancellationToken) { var type = obj.GetType(); // TODO: test includes var includeExpressions = _includeExpressionExtractor.ExtractIncludeExpressions(requestMessage); var queryableInterfaces = type.GetInterfaces(); var queryableInterface = queryableInterfaces.FirstOrDefault( i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IQueryable <>)); if (queryableInterface != null) { var queryableElementType = queryableInterface.GenericTypeArguments[0]; var buildDocumentMethod = _openBuildDocumentFromQueryableMethod.Value.MakeGenericMethod(queryableElementType); var sortExpressions = _sortExpressionExtractor.ExtractSortExpressions(requestMessage); dynamic materializedQueryTask = buildDocumentMethod.Invoke(_queryableResourceCollectionDocumentBuilder, new[] { obj, requestMessage, sortExpressions, cancellationToken, includeExpressions }); return(await materializedQueryTask); } var isCollection = false; var enumerableElementType = GetEnumerableElementType(type); if (enumerableElementType != null) { isCollection = true; } var linkBaseUrl = _baseUrlService.GetBaseUrl(requestMessage); if (isCollection) { var buildDocumentMethod = _openBuildDocumentFromEnumerableMethod.Value.MakeGenericMethod(enumerableElementType); return ((dynamic)buildDocumentMethod.Invoke(_resourceCollectionDocumentBuilder, new[] { obj, linkBaseUrl, new string[] { }, null, null })); } // Single resource object return(_singleResourceDocumentBuilder.BuildDocument(obj, linkBaseUrl, includeExpressions, null)); }