Skip to content

Commit 0faabbe

Browse files
committed
feat(*): add AttrFilterQuery
1 parent 8a4c927 commit 0faabbe

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private static IOrderedQueryable<TSource> CallGenericOrderMethod<TSource>(IQuery
6363
return (IOrderedQueryable<TSource>)result;
6464
}
6565

66-
public static IQueryable<TSource> Filter<TSource>(this IQueryable<TSource> source, FilterQuery filterQuery)
66+
public static IQueryable<TSource> Filter<TSource>(this IQueryable<TSource> source, AttrFilterQuery filterQuery)
6767
{
6868
if (filterQuery == null)
6969
return source;
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Linq;
3+
using JsonApiDotNetCore.Models;
4+
using JsonApiDotNetCore.Services;
5+
6+
namespace JsonApiDotNetCore.Internal.Query
7+
{
8+
public class AttrFilterQuery
9+
{
10+
private readonly IJsonApiContext _jsonApiContext;
11+
12+
public AttrFilterQuery(
13+
IJsonApiContext jsonApiCopntext,
14+
FilterQuery filterQuery)
15+
{
16+
_jsonApiContext = jsonApiCopntext;
17+
18+
var attribute = GetAttribute(filterQuery.Key);
19+
20+
if (attribute == null)
21+
throw new JsonApiException("400", $"{filterQuery.Key} is not a valid property.");
22+
23+
FilteredAttribute = attribute;
24+
PropertyValue = filterQuery.Value;
25+
FilterOperation = GetFilterOperation(filterQuery.Operation);
26+
}
27+
28+
public AttrAttribute FilteredAttribute { get; set; }
29+
public string PropertyValue { get; set; }
30+
public FilterOperations FilterOperation { get; set; }
31+
32+
private FilterOperations GetFilterOperation(string prefix)
33+
{
34+
if (prefix.Length == 0) return FilterOperations.eq;
35+
36+
FilterOperations opertion;
37+
if (!Enum.TryParse<FilterOperations>(prefix, out opertion))
38+
throw new JsonApiException("400", $"Invalid filter prefix '{prefix}'");
39+
40+
return opertion;
41+
}
42+
43+
private AttrAttribute GetAttribute(string propertyName)
44+
{
45+
return _jsonApiContext.RequestEntity.Attributes
46+
.FirstOrDefault(attr =>
47+
attr.InternalAttributeName.ToLower() == propertyName.ToLower()
48+
);
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)