-
-
Notifications
You must be signed in to change notification settings - Fork 162
Expand file tree
/
Copy pathPersonDefinition.cs
More file actions
25 lines (21 loc) · 1.2 KB
/
PersonDefinition.cs
File metadata and controls
25 lines (21 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using GettingStarted.Models;
using JetBrains.Annotations;
using JsonApiDotNetCore.Configuration;
using JsonApiDotNetCore.Queries.Expressions;
using JsonApiDotNetCore.Queries.Parsing;
using JsonApiDotNetCore.Resources;
namespace GettingStarted.Definitions;
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
internal sealed class PersonDefinition(IResourceGraph resourceGraph, IResourceFactory resourceFactory)
: JsonApiResourceDefinition<Person, int>(resourceGraph)
{
private readonly IResourceFactory _resourceFactory = resourceFactory;
public override FilterExpression OnApplyFilter(FilterExpression? existingFilter)
{
var parser = new FilterParser(_resourceFactory);
FilterExpression isNotDeleted = parser.Parse("equals(isDeleted,'false')", ResourceType);
FilterExpression hasBooksWithName = parser.Parse("has(books,equals(author.name,'Mary Shelley'))", ResourceType);
FilterExpression ownsBigHouseWithFloorCount = parser.Parse("isType(house,bigHouses,equals(floorCount,'3'))", ResourceType);
return LogicalExpression.Compose(LogicalOperator.And, isNotDeleted, hasBooksWithName, ownsBigHouseWithFloorCount, existingFilter)!;
}
}