Skip to content

Commit 2221d57

Browse files
authored
Merge pull request #416 from milosloub/Nested-sort
Nested sort
2 parents 8570b21 + d1bc2cb commit 2221d57

19 files changed

+459
-251
lines changed

Diff for: src/Examples/JsonApiDotNetCoreExample/Models/Person.cs

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class Person : Identifiable, IHasMeta
1919
[Attr("last-name")]
2020
public string LastName { get; set; }
2121

22+
[Attr("age")]
23+
public int Age { get; set; }
24+
2225
[HasMany("todo-items")]
2326
public virtual List<TodoItem> TodoItems { get; set; }
2427

Diff for: src/JsonApiDotNetCore/Data/DefaultEntityRepository.cs

+14-14
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ public virtual IQueryable<TEntity> Get()
9090
/// <inheritdoc />
9191
public virtual IQueryable<TEntity> Filter(IQueryable<TEntity> entities, FilterQuery filterQuery)
9292
{
93-
if(_resourceDefinition != null)
93+
if (_resourceDefinition != null)
9494
{
9595
var defaultQueryFilters = _resourceDefinition.GetQueryFilters();
96-
if(defaultQueryFilters != null && defaultQueryFilters.TryGetValue(filterQuery.Attribute, out var defaultQueryFilter) == true)
96+
if (defaultQueryFilters != null && defaultQueryFilters.TryGetValue(filterQuery.Attribute, out var defaultQueryFilter) == true)
9797
{
9898
return defaultQueryFilter(entities, filterQuery.Value);
9999
}
@@ -106,17 +106,17 @@ public virtual IQueryable<TEntity> Filter(IQueryable<TEntity> entities, FilterQu
106106
public virtual IQueryable<TEntity> Sort(IQueryable<TEntity> entities, List<SortQuery> sortQueries)
107107
{
108108
if (sortQueries != null && sortQueries.Count > 0)
109-
return entities.Sort(sortQueries);
110-
111-
if(_resourceDefinition != null)
109+
return entities.Sort(_jsonApiContext, sortQueries);
110+
111+
if (_resourceDefinition != null)
112112
{
113113
var defaultSortOrder = _resourceDefinition.DefaultSort();
114-
if(defaultSortOrder != null && defaultSortOrder.Count > 0)
114+
if (defaultSortOrder != null && defaultSortOrder.Count > 0)
115115
{
116-
foreach(var sortProp in defaultSortOrder)
117-
{
116+
foreach (var sortProp in defaultSortOrder)
117+
{
118118
// this is dumb...add an overload, don't allocate for no reason
119-
entities.Sort(new SortQuery(sortProp.Item2, sortProp.Item1));
119+
entities.Sort(_jsonApiContext, new SortQuery(sortProp.Item2, sortProp.Item1.PublicAttributeName));
120120
}
121121
}
122122
}
@@ -189,10 +189,10 @@ private void AttachHasManyPointers(TEntity entity)
189189
var relationships = _jsonApiContext.HasManyRelationshipPointers.Get();
190190
foreach (var relationship in relationships)
191191
{
192-
if(relationship.Key is HasManyThroughAttribute hasManyThrough)
192+
if (relationship.Key is HasManyThroughAttribute hasManyThrough)
193193
AttachHasManyThrough(entity, hasManyThrough, relationship.Value);
194194
else
195-
AttachHasMany(relationship.Key as HasManyAttribute, relationship.Value);
195+
AttachHasMany(relationship.Key as HasManyAttribute, relationship.Value);
196196
}
197197
}
198198

@@ -289,15 +289,15 @@ public virtual async Task<bool> DeleteAsync(TId id)
289289
/// <inheritdoc />
290290
public virtual IQueryable<TEntity> Include(IQueryable<TEntity> entities, string relationshipName)
291291
{
292-
if(string.IsNullOrWhiteSpace(relationshipName)) throw new JsonApiException(400, "Include parameter must not be empty if provided");
292+
if (string.IsNullOrWhiteSpace(relationshipName)) throw new JsonApiException(400, "Include parameter must not be empty if provided");
293293

294294
var relationshipChain = relationshipName.Split('.');
295295

296296
// variables mutated in recursive loop
297297
// TODO: make recursive method
298298
string internalRelationshipPath = null;
299299
var entity = _jsonApiContext.RequestEntity;
300-
for(var i = 0; i < relationshipChain.Length; i++)
300+
for (var i = 0; i < relationshipChain.Length; i++)
301301
{
302302
var requestedRelationship = relationshipChain[i];
303303
var relationship = entity.Relationships.FirstOrDefault(r => r.PublicRelationshipName == requestedRelationship);
@@ -315,7 +315,7 @@ public virtual IQueryable<TEntity> Include(IQueryable<TEntity> entities, string
315315
internalRelationshipPath = (internalRelationshipPath == null)
316316
? relationship.RelationshipPath
317317
: $"{internalRelationshipPath}.{relationship.RelationshipPath}";
318-
318+
319319
if(i < relationshipChain.Length)
320320
entity = _jsonApiContext.ResourceGraph.GetContextEntity(relationship.Type);
321321
}

0 commit comments

Comments
 (0)