@@ -52,16 +52,19 @@ public JsonApiController(
5252 }
5353
5454 [ HttpGet ]
55- public virtual IActionResult Get ( )
55+ public virtual async Task < IActionResult > GetAsync ( )
5656 {
5757 var entities = _entities . Get ( ) ;
5858
5959 entities = ApplySortAndFilterQuery ( entities ) ;
6060
61- if ( _jsonApiContext . QuerySet != null )
61+ if ( _jsonApiContext . QuerySet != null )
6262 entities = IncludeRelationships ( entities , _jsonApiContext . QuerySet . IncludedRelationships ) ;
6363
64- return Ok ( entities ) ;
64+ // pagination should be done last since it will execute the query
65+ var pagedEntities = await ApplyPageQueryAsync ( entities ) ;
66+
67+ return Ok ( pagedEntities ) ;
6568 }
6669
6770 [ HttpGet ( "{id}" ) ]
@@ -142,12 +145,6 @@ public virtual async Task<IActionResult> PatchAsync(TId id, [FromBody] T entity)
142145 return Ok ( updatedEntity ) ;
143146 }
144147
145- // [HttpPatch("{id}/{relationship}")]
146- // public virtual IActionResult PatchRelationship(int id, string relation)
147- // {
148- // return Ok("Patch Id/relationship");
149- // }
150-
151148 [ HttpDelete ( "{id}" ) ]
152149 public virtual async Task < IActionResult > DeleteAsync ( TId id )
153150 {
@@ -159,12 +156,6 @@ public virtual async Task<IActionResult> DeleteAsync(TId id)
159156 return Ok ( ) ;
160157 }
161158
162- // [HttpDelete("{id}/{relationship}")]
163- // public virtual IActionResult Delete(int id, string relation)
164- // {
165- // return Ok("Delete Id/relationship");
166- // }
167-
168159 private IQueryable < T > ApplySortAndFilterQuery ( IQueryable < T > entities )
169160 {
170161 var query = _jsonApiContext . QuerySet ;
@@ -179,6 +170,18 @@ private IQueryable<T> ApplySortAndFilterQuery(IQueryable<T> entities)
179170 return entities ;
180171 }
181172
173+ private async Task < IEnumerable < T > > ApplyPageQueryAsync ( IQueryable < T > entities )
174+ {
175+ if ( _jsonApiContext . Options . DefaultPageSize == 0 && ( _jsonApiContext . QuerySet == null || _jsonApiContext . QuerySet . PageQuery . PageSize == 0 ) )
176+ return entities ;
177+
178+ var query = _jsonApiContext . QuerySet . PageQuery ;
179+ var pageNumber = query . PageOffset > 0 ? query . PageOffset : 1 ;
180+ var pageSize = query . PageSize > 0 ? query . PageSize : _jsonApiContext . Options . DefaultPageSize ;
181+
182+ return await _entities . PageAsync ( entities , pageSize , pageNumber ) ;
183+ }
184+
182185 private IQueryable < T > IncludeRelationships ( IQueryable < T > entities , List < string > relationships )
183186 {
184187 _jsonApiContext . IncludedRelationships = relationships ;
0 commit comments