From be49faa67c62355980f40c833050334eafbef2d7 Mon Sep 17 00:00:00 2001 From: PascalSenn Date: Mon, 16 Nov 2020 22:51:38 +0100 Subject: [PATCH] Add spatial extensions to builder (#2566) Co-authored-by: Michael Staib --- ...cs => QueryableFilterProviderExtension.cs} | 6 ++-- .../Convention/FilterConventionTests.cs | 2 +- ...ialFilterConventionDescriptorExtensions.cs | 20 +++++++++++++ ...lteringRequestExecutorBuilderExtensions.cs | 22 +++++++++++++++ ...SpatialFilteringSchemaBuilderExtensions.cs | 20 +++++++++++++ .../FilterVisitorTestBase.cs | 28 ++++--------------- 6 files changed, 72 insertions(+), 26 deletions(-) rename src/HotChocolate/Data/src/Data/Filters/Expressions/{QueryableFilterProviderExtensions.cs => QueryableFilterProviderExtension.cs} (65%) create mode 100644 src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringRequestExecutorBuilderExtensions.cs create mode 100644 src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringSchemaBuilderExtensions.cs diff --git a/src/HotChocolate/Data/src/Data/Filters/Expressions/QueryableFilterProviderExtensions.cs b/src/HotChocolate/Data/src/Data/Filters/Expressions/QueryableFilterProviderExtension.cs similarity index 65% rename from src/HotChocolate/Data/src/Data/Filters/Expressions/QueryableFilterProviderExtensions.cs rename to src/HotChocolate/Data/src/Data/Filters/Expressions/QueryableFilterProviderExtension.cs index 7bc5151195f..061b0112850 100644 --- a/src/HotChocolate/Data/src/Data/Filters/Expressions/QueryableFilterProviderExtensions.cs +++ b/src/HotChocolate/Data/src/Data/Filters/Expressions/QueryableFilterProviderExtension.cs @@ -2,14 +2,14 @@ namespace HotChocolate.Data.Filters.Expressions { - public class QueryableFilterProviderExtensions + public class QueryableFilterProviderExtension : FilterProviderExtensions { - public QueryableFilterProviderExtensions() + public QueryableFilterProviderExtension() { } - public QueryableFilterProviderExtensions( + public QueryableFilterProviderExtension( Action> configure) : base(configure) { diff --git a/src/HotChocolate/Data/test/Data.Filters.Tests/Convention/FilterConventionTests.cs b/src/HotChocolate/Data/test/Data.Filters.Tests/Convention/FilterConventionTests.cs index a379f2ee23f..0d98b7ee6e6 100644 --- a/src/HotChocolate/Data/test/Data.Filters.Tests/Convention/FilterConventionTests.cs +++ b/src/HotChocolate/Data/test/Data.Filters.Tests/Convention/FilterConventionTests.cs @@ -418,7 +418,7 @@ public void FilterProvider_Throws_Exception_When_NotInitializedByConvention() return builder.Create(); } - public class MockFilterProviderExtensionConvention : QueryableFilterProviderExtensions + public class MockFilterProviderExtensionConvention : QueryableFilterProviderExtension { protected override void Configure( IFilterProviderDescriptor descriptor) diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs b/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs index 7ddf92d1c80..511c8487952 100644 --- a/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs +++ b/src/HotChocolate/Spatial/src/Data/Filters/Convention/Extensions/SpatialFilterConventionDescriptorExtensions.cs @@ -1,10 +1,30 @@ using System; +using HotChocolate.Data.Filters.Expressions; using NetTopologySuite.Geometries; namespace HotChocolate.Data.Filters.Spatial { public static class SpatialFilterConventionDescriptorExtensions { + /// + /// Adds the spatial filter defaults + /// + public static IFilterConventionDescriptor AddSpatialDefaults( + this IFilterConventionDescriptor descriptor) + { + if (descriptor is null) + { + throw new ArgumentNullException(nameof(descriptor)); + } + + descriptor.AddSpatialOperations(); + descriptor.BindSpatialTypes(); + descriptor.AddProviderExtension( + new QueryableFilterProviderExtension(p => p.AddSpatialHandlers())); + + return descriptor; + } + /// /// The default names of the spatial filter operations /// diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringRequestExecutorBuilderExtensions.cs b/src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringRequestExecutorBuilderExtensions.cs new file mode 100644 index 00000000000..567a81e96c0 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringRequestExecutorBuilderExtensions.cs @@ -0,0 +1,22 @@ +using System; +using HotChocolate.Data.Filters; +using HotChocolate.Data.Filters.Spatial; +using HotChocolate.Execution.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace HotChocolate +{ + public static class SpatialFilteringRequestExecutorBuilderExtensions + { + public static IRequestExecutorBuilder AddSpatialFiltering( + this IRequestExecutorBuilder builder) + { + if (builder is null) + { + throw new ArgumentNullException(nameof(builder)); + } + + return builder.ConfigureSchema(x => x.AddSpatialFiltering()); + } + } +} diff --git a/src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringSchemaBuilderExtensions.cs b/src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringSchemaBuilderExtensions.cs new file mode 100644 index 00000000000..0136684d422 --- /dev/null +++ b/src/HotChocolate/Spatial/src/Data/Filters/Extensions/SpatialFilteringSchemaBuilderExtensions.cs @@ -0,0 +1,20 @@ +using System; +using HotChocolate.Data.Filters; +using HotChocolate.Data.Filters.Spatial; + +namespace HotChocolate +{ + public static class SpatialFilteringSchemaBuilderExtensions + { + public static ISchemaBuilder AddSpatialFiltering(this ISchemaBuilder builder) + { + if (builder is null) + { + throw new ArgumentNullException(nameof(builder)); + } + + return builder.AddConvention( + new FilterConventionExtension(x => x.AddSpatialDefaults())); + } + } +} diff --git a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/FilterVisitorTestBase.cs b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/FilterVisitorTestBase.cs index ddb1ab2a7a9..b956a361cec 100644 --- a/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/FilterVisitorTestBase.cs +++ b/src/HotChocolate/Spatial/test/Data.Filters.SqlServer.Tests/FilterVisitorTestBase.cs @@ -49,16 +49,11 @@ public FilterVisitorTestBase(PostgreSqlResource resource) Func> resolver = await BuildResolverAsync(entities); - ISchemaBuilder builder = SchemaBuilder.New() + return await new ServiceCollection() + .AddGraphQL() + .AddFiltering() .AddSpatialTypes() - .AddFiltering( - x => x - .AddDefaults() - .AddSpatialOperations() - .BindSpatialTypes() - .Provider( - new QueryableFilterProvider( - p => p.AddSpatialHandlers().AddDefaultFieldHandlers()))) + .AddSpatialFiltering() .AddQueryType( c => c .Name("Query") @@ -82,14 +77,7 @@ public FilterVisitorTestBase(PostgreSqlResource resource) } } }) - .UseFiltering()); - - ISchema schema = builder.Create(); - return new ServiceCollection() - .Configure( - Schema.DefaultName, - o => o.Schema = schema) - .AddGraphQL() + .UseFiltering()) .UseRequest( next => async context => { @@ -105,11 +93,7 @@ public FilterVisitorTestBase(PostgreSqlResource resource) } }) .UseDefaultPipeline() - .Services - .BuildServiceProvider() - .GetRequiredService() - .GetRequestExecutorAsync() - .Result; + .BuildRequestExecutorAsync(); } } }