Skip to content

Commit d4944bb

Browse files
author
Bart Koelman
committed
Post-merge fixes
1 parent 831761f commit d4944bb

12 files changed

+147
-70
lines changed

src/JsonApiDotNetCore.OpenApi/JsonApiDotNetCore.OpenApi.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,5 @@
2828
</PackageReference>
2929
<PackageReference Include="Swashbuckle.AspNetCore" Version="$(SwashbuckleVersion)" />
3030
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="$(SwashbuckleVersion)" />
31-
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="$(SwashbuckleVersion)" />
3231
</ItemGroup>
3332
</Project>

src/JsonApiDotNetCore.OpenApi/JsonApiOperationIdSelector.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Text.Json;
45
using Humanizer;
56
using JsonApiDotNetCore.Configuration;
67
using JsonApiDotNetCore.Middleware;
@@ -9,7 +10,6 @@
910
using Microsoft.AspNetCore.Mvc;
1011
using Microsoft.AspNetCore.Mvc.ApiExplorer;
1112
using Microsoft.AspNetCore.Mvc.Controllers;
12-
using Newtonsoft.Json.Serialization;
1313

1414
namespace JsonApiDotNetCore.OpenApi
1515
{
@@ -35,17 +35,17 @@ internal sealed class JsonApiOperationIdSelector
3535
};
3636

3737
private readonly IControllerResourceMapping _controllerResourceMapping;
38-
private readonly NamingStrategy _namingStrategy;
38+
private readonly JsonNamingPolicy _namingPolicy;
3939
private readonly ResourceNameFormatter _formatter;
4040

41-
public JsonApiOperationIdSelector(IControllerResourceMapping controllerResourceMapping, NamingStrategy namingStrategy)
41+
public JsonApiOperationIdSelector(IControllerResourceMapping controllerResourceMapping, JsonNamingPolicy namingPolicy)
4242
{
4343
ArgumentGuard.NotNull(controllerResourceMapping, nameof(controllerResourceMapping));
44-
ArgumentGuard.NotNull(namingStrategy, nameof(namingStrategy));
44+
ArgumentGuard.NotNull(namingPolicy, nameof(namingPolicy));
4545

4646
_controllerResourceMapping = controllerResourceMapping;
47-
_namingStrategy = namingStrategy;
48-
_formatter = new ResourceNameFormatter(namingStrategy);
47+
_namingPolicy = namingPolicy;
48+
_formatter = new ResourceNameFormatter(namingPolicy);
4949
}
5050

5151
public string GetOperationId(ApiDescription endpoint)
@@ -109,7 +109,7 @@ private string ApplyTemplate(string operationIdTemplate, Type primaryResourceTyp
109109
// @formatter:keep_existing_linebreaks restore
110110
// @formatter:wrap_chained_method_calls restore
111111

112-
return _namingStrategy.GetPropertyName(pascalCaseId, false);
112+
return _namingPolicy.ConvertName(pascalCaseId);
113113
}
114114
}
115115
}

src/JsonApiDotNetCore.OpenApi/JsonApiSchemaIdSelector.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,22 @@ internal sealed class JsonApiSchemaIdSelector
3131
};
3232

3333
private readonly ResourceNameFormatter _formatter;
34-
private readonly IResourceContextProvider _resourceContextProvider;
34+
private readonly IResourceGraph _resourceGraph;
3535

36-
public JsonApiSchemaIdSelector(ResourceNameFormatter formatter, IResourceContextProvider resourceContextProvider)
36+
public JsonApiSchemaIdSelector(ResourceNameFormatter formatter, IResourceGraph resourceGraph)
3737
{
3838
ArgumentGuard.NotNull(formatter, nameof(formatter));
39-
ArgumentGuard.NotNull(resourceContextProvider, nameof(resourceContextProvider));
39+
ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph));
4040

4141
_formatter = formatter;
42-
_resourceContextProvider = resourceContextProvider;
42+
_resourceGraph = resourceGraph;
4343
}
4444

4545
public string GetSchemaId(Type type)
4646
{
4747
ArgumentGuard.NotNull(type, nameof(type));
4848

49-
ResourceContext resourceContext = _resourceContextProvider.GetResourceContext(type);
49+
ResourceContext resourceContext = _resourceGraph.GetResourceContext(type);
5050

5151
if (resourceContext != null)
5252
{

src/JsonApiDotNetCore.OpenApi/OpenApiEndpointConvention.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ namespace JsonApiDotNetCore.OpenApi
1616
/// </summary>
1717
internal sealed class OpenApiEndpointConvention : IActionModelConvention
1818
{
19-
private readonly IResourceContextProvider _resourceContextProvider;
19+
private readonly IResourceGraph _resourceGraph;
2020
private readonly IControllerResourceMapping _controllerResourceMapping;
2121
private readonly EndpointResolver _endpointResolver = new();
2222

23-
public OpenApiEndpointConvention(IResourceContextProvider resourceContextProvider, IControllerResourceMapping controllerResourceMapping)
23+
public OpenApiEndpointConvention(IResourceGraph resourceGraph, IControllerResourceMapping controllerResourceMapping)
2424
{
25-
ArgumentGuard.NotNull(resourceContextProvider, nameof(resourceContextProvider));
25+
ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph));
2626
ArgumentGuard.NotNull(controllerResourceMapping, nameof(controllerResourceMapping));
2727

28-
_resourceContextProvider = resourceContextProvider;
28+
_resourceGraph = resourceGraph;
2929
_controllerResourceMapping = controllerResourceMapping;
3030
}
3131

@@ -71,7 +71,7 @@ private IReadOnlyCollection<RelationshipAttribute> GetRelationshipsOfPrimaryReso
7171
{
7272
Type primaryResourceOfEndpointType = _controllerResourceMapping.GetResourceTypeForController(controllerType);
7373

74-
ResourceContext primaryResourceContext = _resourceContextProvider.GetResourceContext(primaryResourceOfEndpointType);
74+
ResourceContext primaryResourceContext = _resourceGraph.GetResourceContext(primaryResourceOfEndpointType);
7575

7676
return primaryResourceContext.Relationships;
7777
}

src/JsonApiDotNetCore.OpenApi/ServiceCollectionExtensions.cs

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Reflection;
4+
using System.Text.Json;
45
using JsonApiDotNetCore.Configuration;
56
using JsonApiDotNetCore.Middleware;
67
using JsonApiDotNetCore.OpenApi.SwaggerComponents;
78
using Microsoft.AspNetCore.Mvc.ApiExplorer;
89
using Microsoft.AspNetCore.Mvc.Infrastructure;
910
using Microsoft.Extensions.DependencyInjection;
10-
using Newtonsoft.Json.Serialization;
1111
using Swashbuckle.AspNetCore.Swagger;
1212
using Swashbuckle.AspNetCore.SwaggerGen;
1313

@@ -57,16 +57,16 @@ private static void AddCustomApiExplorer(IServiceCollection services, IMvcCoreBu
5757
private static void AddSwaggerGenerator(IServiceScope scope, IServiceCollection services, Action<SwaggerGenOptions> setupSwaggerGenAction)
5858
{
5959
var controllerResourceMapping = scope.ServiceProvider.GetRequiredService<IControllerResourceMapping>();
60-
var resourceContextProvider = scope.ServiceProvider.GetRequiredService<IResourceContextProvider>();
60+
var resourceGraph = scope.ServiceProvider.GetRequiredService<IResourceGraph>();
6161
var jsonApiOptions = scope.ServiceProvider.GetRequiredService<IJsonApiOptions>();
62-
NamingStrategy namingStrategy = ((DefaultContractResolver)jsonApiOptions.SerializerSettings.ContractResolver)!.NamingStrategy;
62+
var namingPolicy = jsonApiOptions.SerializerOptions.PropertyNamingPolicy;
6363

6464
AddSchemaGenerator(services);
6565

6666
services.AddSwaggerGen(swaggerGenOptions =>
6767
{
68-
SetOperationInfo(swaggerGenOptions, controllerResourceMapping, resourceContextProvider, namingStrategy);
69-
SetSchemaIdSelector(swaggerGenOptions, resourceContextProvider, namingStrategy);
68+
SetOperationInfo(swaggerGenOptions, controllerResourceMapping, resourceGraph, namingPolicy);
69+
SetSchemaIdSelector(swaggerGenOptions, resourceGraph, namingPolicy);
7070
swaggerGenOptions.DocumentFilter<EndpointOrderingFilter>();
7171

7272
setupSwaggerGenAction?.Invoke(swaggerGenOptions);
@@ -80,32 +80,32 @@ private static void AddSchemaGenerator(IServiceCollection services)
8080
}
8181

8282
private static void SetOperationInfo(SwaggerGenOptions swaggerGenOptions, IControllerResourceMapping controllerResourceMapping,
83-
IResourceContextProvider resourceContextProvider, NamingStrategy namingStrategy)
83+
IResourceGraph resourceGraph, JsonNamingPolicy namingPolicy)
8484
{
85-
swaggerGenOptions.TagActionsBy(description => GetOperationTags(description, controllerResourceMapping, resourceContextProvider));
85+
swaggerGenOptions.TagActionsBy(description => GetOperationTags(description, controllerResourceMapping, resourceGraph));
8686

87-
JsonApiOperationIdSelector jsonApiOperationIdSelector = new(controllerResourceMapping, namingStrategy);
87+
JsonApiOperationIdSelector jsonApiOperationIdSelector = new(controllerResourceMapping, namingPolicy);
8888
swaggerGenOptions.CustomOperationIds(jsonApiOperationIdSelector.GetOperationId);
8989
}
9090

9191
private static IList<string> GetOperationTags(ApiDescription description, IControllerResourceMapping controllerResourceMapping,
92-
IResourceContextProvider resourceContextProvider)
92+
IResourceGraph resourceGraph)
9393
{
9494
MethodInfo actionMethod = description.ActionDescriptor.GetActionMethod();
9595
Type resourceType = controllerResourceMapping.GetResourceTypeForController(actionMethod.ReflectedType);
96-
ResourceContext resourceContext = resourceContextProvider.GetResourceContext(resourceType);
96+
ResourceContext resourceContext = resourceGraph.GetResourceContext(resourceType);
9797

9898
return new[]
9999
{
100100
resourceContext.PublicName
101101
};
102102
}
103103

104-
private static void SetSchemaIdSelector(SwaggerGenOptions swaggerGenOptions, IResourceContextProvider resourceContextProvider,
105-
NamingStrategy namingStrategy)
104+
private static void SetSchemaIdSelector(SwaggerGenOptions swaggerGenOptions, IResourceGraph resourceGraph,
105+
JsonNamingPolicy namingPolicy)
106106
{
107-
ResourceNameFormatter resourceNameFormatter = new(namingStrategy);
108-
JsonApiSchemaIdSelector jsonApiObjectSchemaSelector = new(resourceNameFormatter, resourceContextProvider);
107+
ResourceNameFormatter resourceNameFormatter = new(namingPolicy);
108+
JsonApiSchemaIdSelector jsonApiObjectSchemaSelector = new(resourceNameFormatter, resourceGraph);
109109

110110
swaggerGenOptions.CustomSchemaIds(type => jsonApiObjectSchemaSelector.GetSchemaId(type));
111111
}
@@ -127,10 +127,10 @@ private static void AddSwashbuckleCliCompatibility(IServiceScope scope, IMvcCore
127127

128128
private static void AddOpenApiEndpointConvention(IServiceScope scope, IMvcCoreBuilder mvcBuilder)
129129
{
130-
var resourceContextProvider = scope.ServiceProvider.GetRequiredService<IResourceContextProvider>();
130+
var resourceGraph = scope.ServiceProvider.GetRequiredService<IResourceGraph>();
131131
var controllerResourceMapping = scope.ServiceProvider.GetRequiredService<IControllerResourceMapping>();
132132

133-
mvcBuilder.AddMvcOptions(options => options.Conventions.Add(new OpenApiEndpointConvention(resourceContextProvider, controllerResourceMapping)));
133+
mvcBuilder.AddMvcOptions(options => options.Conventions.Add(new OpenApiEndpointConvention(resourceGraph, controllerResourceMapping)));
134134
}
135135
}
136136
}

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiDataContractResolver.cs

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using JsonApiDotNetCore.Configuration;
66
using JsonApiDotNetCore.Resources;
77
using JsonApiDotNetCore.Resources.Annotations;
8-
using Newtonsoft.Json;
98
using Swashbuckle.AspNetCore.Newtonsoft;
109
using Swashbuckle.AspNetCore.SwaggerGen;
1110

@@ -17,17 +16,17 @@ namespace JsonApiDotNetCore.OpenApi.SwaggerComponents
1716
internal sealed class JsonApiDataContractResolver : ISerializerDataContractResolver
1817
{
1918
private readonly NewtonsoftDataContractResolver _dataContractResolver;
20-
private readonly IResourceContextProvider _resourceContextProvider;
19+
private readonly IResourceGraph _resourceGraph;
2120

22-
public JsonApiDataContractResolver(IResourceContextProvider resourceContextProvider, IJsonApiOptions jsonApiOptions)
21+
public JsonApiDataContractResolver(IResourceGraph resourceGraph, IJsonApiOptions jsonApiOptions)
2322
{
24-
ArgumentGuard.NotNull(resourceContextProvider, nameof(resourceContextProvider));
23+
ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph));
2524
ArgumentGuard.NotNull(jsonApiOptions, nameof(jsonApiOptions));
2625

27-
_resourceContextProvider = resourceContextProvider;
26+
_resourceGraph = resourceGraph;
2827

29-
JsonSerializerSettings serializerSettings = jsonApiOptions.SerializerSettings ?? new JsonSerializerSettings();
30-
_dataContractResolver = new NewtonsoftDataContractResolver(serializerSettings);
28+
var serializerOptions = jsonApiOptions.SerializerOptions;
29+
_dataContractResolver = new NewtonsoftDataContractResolver(serializerOptions);
3130
}
3231

3332
public DataContract GetDataContractForType(Type type)
@@ -65,7 +64,7 @@ private static DataContract ReplacePropertiesInDataContract(DataContract dataCon
6564

6665
private IList<DataProperty> GetDataPropertiesThatExistInResourceContext(Type resourceType, DataContract dataContract)
6766
{
68-
ResourceContext resourceContext = _resourceContextProvider.GetResourceContext(resourceType);
67+
ResourceContext resourceContext = _resourceGraph.GetResourceContext(resourceType);
6968
var dataProperties = new List<DataProperty>();
7069

7170
foreach (DataProperty property in dataContract.ObjectProperties)

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiSchemaGenerator.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,18 @@ internal sealed class JsonApiSchemaGenerator : ISchemaGenerator
4040
private readonly JsonApiObjectNullabilityProcessor _jsonApiObjectNullabilityProcessor;
4141
private readonly SchemaRepositoryAccessor _schemaRepositoryAccessor = new();
4242

43-
public JsonApiSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IResourceContextProvider resourceContextProvider, IJsonApiOptions jsonApiOptions)
43+
public JsonApiSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IResourceGraph resourceGraph, IJsonApiOptions jsonApiOptions)
4444
{
4545
ArgumentGuard.NotNull(defaultSchemaGenerator, nameof(defaultSchemaGenerator));
46-
ArgumentGuard.NotNull(resourceContextProvider, nameof(resourceContextProvider));
46+
ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph));
4747
ArgumentGuard.NotNull(jsonApiOptions, nameof(jsonApiOptions));
4848

4949
_defaultSchemaGenerator = defaultSchemaGenerator;
5050
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(_schemaRepositoryAccessor);
5151
_jsonApiObjectNullabilityProcessor = new JsonApiObjectNullabilityProcessor(_schemaRepositoryAccessor);
5252

5353
_resourceObjectSchemaGenerator =
54-
new ResourceObjectSchemaGenerator(defaultSchemaGenerator, resourceContextProvider, jsonApiOptions, _schemaRepositoryAccessor);
54+
new ResourceObjectSchemaGenerator(defaultSchemaGenerator, resourceGraph, jsonApiOptions, _schemaRepositoryAccessor);
5555
}
5656

5757
public OpenApiSchema GenerateSchema(Type type, SchemaRepository schemaRepository, MemberInfo memberInfo = null, ParameterInfo parameterInfo = null)

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceObjectSchemaGenerator.cs

+11-12
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,45 @@
33
using JsonApiDotNetCore.Configuration;
44
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
55
using Microsoft.OpenApi.Models;
6-
using Newtonsoft.Json.Serialization;
76
using Swashbuckle.AspNetCore.SwaggerGen;
87

98
namespace JsonApiDotNetCore.OpenApi.SwaggerComponents
109
{
1110
internal sealed class ResourceObjectSchemaGenerator
1211
{
1312
private readonly SchemaGenerator _defaultSchemaGenerator;
14-
private readonly IResourceContextProvider _resourceContextProvider;
13+
private readonly IResourceGraph _resourceGraph;
1514
private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor;
1615
private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator;
1716
private readonly bool _allowClientGeneratedIds;
1817
private readonly Func<ResourceTypeInfo, ResourceFieldObjectSchemaBuilder> _createFieldObjectBuilderFactory;
1918

20-
public ResourceObjectSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IResourceContextProvider resourceContextProvider,
19+
public ResourceObjectSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IResourceGraph resourceGraph,
2120
IJsonApiOptions jsonApiOptions, ISchemaRepositoryAccessor schemaRepositoryAccessor)
2221
{
2322
ArgumentGuard.NotNull(defaultSchemaGenerator, nameof(defaultSchemaGenerator));
24-
ArgumentGuard.NotNull(resourceContextProvider, nameof(resourceContextProvider));
23+
ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph));
2524
ArgumentGuard.NotNull(jsonApiOptions, nameof(jsonApiOptions));
2625
ArgumentGuard.NotNull(schemaRepositoryAccessor, nameof(schemaRepositoryAccessor));
2726

2827
_defaultSchemaGenerator = defaultSchemaGenerator;
29-
_resourceContextProvider = resourceContextProvider;
28+
_resourceGraph = resourceGraph;
3029
_schemaRepositoryAccessor = schemaRepositoryAccessor;
3130

32-
_resourceTypeSchemaGenerator = new ResourceTypeSchemaGenerator(schemaRepositoryAccessor, resourceContextProvider);
31+
_resourceTypeSchemaGenerator = new ResourceTypeSchemaGenerator(schemaRepositoryAccessor, resourceGraph);
3332
_allowClientGeneratedIds = jsonApiOptions.AllowClientGeneratedIds;
3433

35-
_createFieldObjectBuilderFactory = CreateFieldObjectBuilderFactory(defaultSchemaGenerator, resourceContextProvider, jsonApiOptions,
34+
_createFieldObjectBuilderFactory = CreateFieldObjectBuilderFactory(defaultSchemaGenerator, resourceGraph, jsonApiOptions,
3635
schemaRepositoryAccessor, _resourceTypeSchemaGenerator);
3736
}
3837

3938
private static Func<ResourceTypeInfo, ResourceFieldObjectSchemaBuilder> CreateFieldObjectBuilderFactory(SchemaGenerator defaultSchemaGenerator,
40-
IResourceContextProvider resourceContextProvider, IJsonApiOptions jsonApiOptions, ISchemaRepositoryAccessor schemaRepositoryAccessor,
39+
IResourceGraph resourceGraph, IJsonApiOptions jsonApiOptions, ISchemaRepositoryAccessor schemaRepositoryAccessor,
4140
ResourceTypeSchemaGenerator resourceTypeSchemaGenerator)
4241
{
43-
NamingStrategy namingStrategy = ((DefaultContractResolver)jsonApiOptions.SerializerSettings.ContractResolver)!.NamingStrategy;
44-
ResourceNameFormatter resourceNameFormatter = new(namingStrategy);
45-
var jsonApiSchemaIdSelector = new JsonApiSchemaIdSelector(resourceNameFormatter, resourceContextProvider);
42+
var namingPolicy = jsonApiOptions.SerializerOptions.PropertyNamingPolicy;
43+
ResourceNameFormatter resourceNameFormatter = new(namingPolicy);
44+
var jsonApiSchemaIdSelector = new JsonApiSchemaIdSelector(resourceNameFormatter, resourceGraph);
4645

4746
return resourceTypeInfo => new ResourceFieldObjectSchemaBuilder(resourceTypeInfo, schemaRepositoryAccessor, defaultSchemaGenerator,
4847
jsonApiSchemaIdSelector, resourceTypeSchemaGenerator);
@@ -54,7 +53,7 @@ public OpenApiSchema GenerateSchema(Type resourceObjectType)
5453

5554
(OpenApiSchema fullSchemaForResourceObject, OpenApiSchema referenceSchemaForResourceObject) = EnsureSchemasExist(resourceObjectType);
5655

57-
var resourceTypeInfo = ResourceTypeInfo.Create(resourceObjectType, _resourceContextProvider);
56+
var resourceTypeInfo = ResourceTypeInfo.Create(resourceObjectType, _resourceGraph);
5857
ResourceFieldObjectSchemaBuilder fieldObjectBuilder = _createFieldObjectBuilderFactory(resourceTypeInfo);
5958

6059
RemoveResourceIdIfPostResourceObject(resourceTypeInfo.ResourceObjectOpenType, fullSchemaForResourceObject);

0 commit comments

Comments
 (0)