titaniumit.graphql.filtering 0.1.34

dotnet add package titaniumit.graphql.filtering --version 0.1.34
NuGet\Install-Package titaniumit.graphql.filtering -Version 0.1.34
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="titaniumit.graphql.filtering" Version="0.1.34" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add titaniumit.graphql.filtering --version 0.1.34
#r "nuget: titaniumit.graphql.filtering, 0.1.34"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install titaniumit.graphql.filtering as a Cake Addin
#addin nuget:?package=titaniumit.graphql.filtering&version=0.1.34

// Install titaniumit.graphql.filtering as a Cake Tool
#tool nuget:?package=titaniumit.graphql.filtering&version=0.1.34

Introduction

publish Graphql Filters coverage testoutcome

An extention on GraphQL.net to add filtering on clr types

Example graphql filters

Filters are based on a clrType/interface

Using AddFilter as argument. The graphql type for the filters are automaticly added

  • FilterGraphType<typename>
  • And/Or/Not types
  • Condition type
  • Any

Simple filters

condition:{
    fieldName:Id
    operator: equal
    value: 1
}
condition:{
    fieldName: DateField
    operator: equal
    value: "10-10-2023" 
}

Operators on scalars

supported operators on scalartypes

  • equal
  • greater
  • greaterOrEqual
  • less
  • lessOrEqual
  • notEqual

Booleans

supported

  • and
  • or
  • not

Collections

to filter collection members the any field on the filtertype is present that contains per colletion field a member.

Resolvers

Using filters in a Resolver.

Field<DiverGraphType>("Diver")
    .AddFilter("filter").FilterType<Diver>()
    .Resolve(ctx =>
    {
        var filter = ctx.GetFilterExpression<Diver>("filter");
        var datasource = ctx.RequestServices!.GetRequiredService<IDivers>();
        if (filter != null)
            return datasource.Divers.SingleOrDefault(filter.Compile());
        else
            return null;
    });

When getting a filter on parent for a child

 Field<ListGraphType<DiveGraphType>>("Dives")
            .Resolve( ctx => {
              var datasource = ctx.RequestServices!.GetRequiredService<IDives>();
              var expression = ctx.GetSubFilterExpression<Dive>();
              if( expression != null){
                return datasource.Dives.Where( d => d.Diver?.Id == ctx.Source.Id).Where(expression.Compile());
              } else{
                return datasource.Dives.Where( d => d.Diver?.Id == ctx.Source.Id);
              }
            });

query examples

query GetDiverFixedFilter {
    diver(filter:{
        condition:{
            fieldName:id
            operator: equal
            value: 1
        }
    }){
        name
        email
        id
    }
}

query GetDiverByEmail {
    diver(filter:{
        condition:{
            fieldName: email
            operator: equal
            value: "john@divers.down"
        }
    }){
        name
        email
        id
    }
}

query GetDiversWithCoarseFilters {
    divers(filter:{
        any:{
            courses:{
                condition:{
                    fieldName: name
                    operator:equal
                    value: "OpenWater"
                }
            }
        }
    }){
        name
        email
        id
    }
}

query GetDiverFilterById($id: ValueScalar!) {
    diver(filter:{
        condition:{
            fieldName:id
            operator: equal
            value: $id
        }
    }){
        id
    }
}

query GetDiversWithDivesAt($location:ValueScalar!){
    divers(filter: {
        any:{
            dives:{
                condition:{
                    fieldName:location
                    operator:equal
                    value: $location
                }
            }
        }
    }){
        name
        dives{
            start
            end
        }
    }
}

example project

Setup

Todo

  • documentation
  • more test cases
  • custom filter functions
  • configuration options like, casing.
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on titaniumit.graphql.filtering:

Package Downloads
titaniumit.graphql.filtering.extentions

Add filter options to C# based GraphQL.net servers

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.34 112 3/28/2024
0.1.33 97 1/25/2024
0.1.32 86 1/25/2024
0.1.31 95 1/19/2024
0.1.30 98 1/10/2024
0.1.29 119 1/3/2024
0.1.28 87 1/3/2024
0.1.27 79 1/3/2024
0.1.24 87 12/28/2023
0.1.23 83 12/28/2023
0.1.22 100 12/27/2023
0.1.21 73 12/27/2023
0.1.20 94 12/27/2023
0.1.19 99 12/27/2023
0.1.18 90 12/27/2023
0.1.17 71 12/27/2023
0.1.16 82 12/27/2023
0.1.15 84 12/27/2023
0.1.14 89 12/27/2023
0.1.13 82 12/27/2023
0.1.12 93 12/21/2023
0.1.11 110 12/19/2023
0.1.10 112 12/16/2023
0.1.9 146 11/16/2023
0.1.8 104 11/14/2023
0.0.10 88 11/13/2023
0.0.9 104 11/10/2023
0.0.8 86 11/9/2023
0.0.7 99 11/7/2023
0.0.6 108 11/3/2023
0.0.5 92 11/3/2023
0.0.4 84 11/3/2023
0.0.3 102 11/2/2023
0.0.2 101 11/2/2023
0.0.1 101 11/2/2023