|
1 | | -using System.Linq; |
| 1 | +using System; |
| 2 | +using System.Linq; |
2 | 3 | using System.Net.Http; |
3 | 4 | using System.Threading; |
4 | 5 | using System.Threading.Tasks; |
5 | 6 | using JSONAPI.ActionFilters; |
6 | 7 | using JSONAPI.Http; |
| 8 | +using JSONAPI.Json; |
7 | 9 | using JSONAPI.QueryableTransformers; |
8 | 10 |
|
9 | 11 | namespace JSONAPI.Documents.Builders |
@@ -39,24 +41,29 @@ public DefaultQueryableResourceCollectionDocumentBuilder( |
39 | 41 | _baseUrlService = baseUrlService; |
40 | 42 | } |
41 | 43 |
|
42 | | - public async Task<IResourceCollectionDocument> BuildDocument<T>(IQueryable<T> query, HttpRequestMessage request, CancellationToken cancellationToken) |
| 44 | + public async Task<IResourceCollectionDocument> BuildDocument<T>(IQueryable<T> query, HttpRequestMessage request, CancellationToken cancellationToken, |
| 45 | + string[] includes = null) |
43 | 46 | { |
44 | | - if (_filteringTransformer != null) |
45 | | - query = _filteringTransformer.Filter(query, request); |
| 47 | + var filteredQuery = _filteringTransformer.Filter(query, request); |
| 48 | + var sortedQuery = _sortingTransformer.Sort(filteredQuery, request); |
46 | 49 |
|
47 | | - if (_sortingTransformer != null) |
48 | | - query = _sortingTransformer.Sort(query, request); |
49 | | - |
50 | | - if (_paginationTransformer != null) |
51 | | - { |
52 | | - var paginationResults = _paginationTransformer.ApplyPagination(query, request); |
53 | | - query = paginationResults.PagedQuery; |
54 | | - } |
| 50 | + var paginationResults = _paginationTransformer.ApplyPagination(sortedQuery, request); |
| 51 | + query = paginationResults.PagedQuery; |
55 | 52 |
|
56 | 53 | var linkBaseUrl = _baseUrlService.GetBaseUrl(request); |
57 | 54 |
|
58 | 55 | var results = await _enumerationTransformer.Enumerate(query, cancellationToken); |
59 | | - return _resourceCollectionDocumentBuilder.BuildDocument(results, linkBaseUrl, null, null); |
| 56 | + var metadata = await GetDocumentMetadata(query, filteredQuery, sortedQuery, paginationResults, cancellationToken); |
| 57 | + return _resourceCollectionDocumentBuilder.BuildDocument(results, linkBaseUrl, includes, metadata); |
| 58 | + } |
| 59 | + |
| 60 | + /// <summary> |
| 61 | + /// Returns the metadata that should be sent with this document. |
| 62 | + /// </summary> |
| 63 | + protected virtual Task<IMetadata> GetDocumentMetadata<T>(IQueryable<T> originalQuery, IQueryable<T> filteredQuery, IOrderedQueryable<T> sortedQuery, |
| 64 | + IPaginationTransformResult<T> paginationResult, CancellationToken cancellationToken) |
| 65 | + { |
| 66 | + return Task.FromResult((IMetadata)null); |
60 | 67 | } |
61 | 68 | } |
62 | 69 | } |
0 commit comments