Skip to content

Commit 68f41fa

Browse files
committed
[reword] Use naming convention for null value schema
1 parent 0e4bc84 commit 68f41fa

File tree

5 files changed

+17
-18
lines changed

5 files changed

+17
-18
lines changed

src/JsonApiDotNetCore.OpenApi/JsonApiSchemaIdSelector.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ internal sealed class JsonApiSchemaIdSelector
3131
[typeof(ResourceIdentifierObject<>)] = "[ResourceName] Identifier"
3232
};
3333

34-
private readonly ResourceNameFormatter _formatter;
3534
private readonly JsonNamingPolicy _namingPolicy;
3635
private readonly IResourceGraph _resourceGraph;
3736

@@ -42,7 +41,6 @@ public JsonApiSchemaIdSelector(JsonNamingPolicy namingPolicy, IResourceGraph res
4241

4342
_namingPolicy = namingPolicy;
4443
_resourceGraph = resourceGraph;
45-
_formatter = new ResourceNameFormatter(namingPolicy);
4644
}
4745

4846
public string GetSchemaId(Type type)
@@ -58,18 +56,14 @@ public string GetSchemaId(Type type)
5856

5957
if (type.IsConstructedGenericType && OpenTypeToSchemaTemplateMap.ContainsKey(type.GetGenericTypeDefinition()))
6058
{
61-
Type resourceType = type.GetGenericArguments().First();
62-
string resourceName = _formatter.FormatResourceName(resourceType).Singularize();
63-
6459
string pascalCaseSchemaIdTemplate = OpenTypeToSchemaTemplateMap[type.GetGenericTypeDefinition()];
60+
Type resourceType = type.GetGenericArguments().First();
6561

6662
// @formatter:wrap_chained_method_calls chop_always
6763
// @formatter:keep_existing_linebreaks true
6864

69-
string capitalizedResourceName = Capitalize(resourceName);
70-
7165
string pascalCaseSchemaId = pascalCaseSchemaIdTemplate
72-
.Replace("[ResourceName]", capitalizedResourceName)
66+
.Replace("[ResourceName]", resourceType.Name)
7367
.Replace(" ", "");
7468

7569
// @formatter:keep_existing_linebreaks restore
@@ -79,7 +73,7 @@ public string GetSchemaId(Type type)
7973
}
8074

8175
// Used for a fixed set of types, such as jsonapi-object, links-in-many-resource-document etc.
82-
return _formatter.FormatResourceName(type).Singularize();
76+
return _namingPolicy.ConvertName(type.Name);
8377
}
8478

8579
private static string Capitalize(string term)

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiSchemaGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public JsonApiSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IResourceG
4747
ArgumentGuard.NotNull(options, nameof(options));
4848

4949
_defaultSchemaGenerator = defaultSchemaGenerator;
50-
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(_schemaRepositoryAccessor);
50+
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(_schemaRepositoryAccessor, options.SerializerOptions.PropertyNamingPolicy);
5151
_jsonApiObjectNullabilityProcessor = new JsonApiObjectNullabilityProcessor(_schemaRepositoryAccessor);
5252
_resourceObjectSchemaGenerator = new ResourceObjectSchemaGenerator(defaultSchemaGenerator, resourceGraph, options, _schemaRepositoryAccessor);
5353
}

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/NullableReferenceSchemaGenerator.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Text.Json;
34
using Microsoft.OpenApi.Models;
45

56
namespace JsonApiDotNetCore.OpenApi.SwaggerComponents
67
{
78
internal sealed class NullableReferenceSchemaGenerator
89
{
9-
private const string NullableSchemaReferenceId = "null-value";
10+
private const string NullableSchemaReferenceIdTemplate = "Null Value";
11+
private readonly string _nullableSchemaReferenceId;
1012

1113
private static readonly NullableReferenceSchemaStrategy NullableReferenceStrategy =
1214
Enum.Parse<NullableReferenceSchemaStrategy>(NullableReferenceSchemaStrategy.Implicit.ToString());
1315

1416
private static OpenApiSchema _referenceSchemaForExplicitNullValue;
1517
private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor;
1618

17-
public NullableReferenceSchemaGenerator(ISchemaRepositoryAccessor schemaRepositoryAccessor)
19+
public NullableReferenceSchemaGenerator(ISchemaRepositoryAccessor schemaRepositoryAccessor, JsonNamingPolicy namingPolicy)
1820
{
1921
ArgumentGuard.NotNull(schemaRepositoryAccessor, nameof(schemaRepositoryAccessor));
2022

2123
_schemaRepositoryAccessor = schemaRepositoryAccessor;
24+
_nullableSchemaReferenceId = namingPolicy.ConvertName(NullableSchemaReferenceIdTemplate);
2225
}
2326

2427
public OpenApiSchema GenerateSchema(OpenApiSchema referenceSchema)
@@ -53,15 +56,15 @@ private OpenApiSchema GetImplicitNullSchema()
5356
{
5457
Reference = new OpenApiReference
5558
{
56-
Id = NullableSchemaReferenceId,
59+
Id = _nullableSchemaReferenceId,
5760
Type = ReferenceType.Schema
5861
}
5962
};
6063
}
6164

6265
private void EnsureFullSchemaForNullValueExists()
6366
{
64-
if (!_schemaRepositoryAccessor.Current.Schemas.ContainsKey(NullableSchemaReferenceId))
67+
if (!_schemaRepositoryAccessor.Current.Schemas.ContainsKey(_nullableSchemaReferenceId))
6568
{
6669
var fullSchemaForNullValue = new OpenApiSchema
6770
{
@@ -95,7 +98,7 @@ private void EnsureFullSchemaForNullValueExists()
9598
}
9699
};
97100

98-
_schemaRepositoryAccessor.Current.AddDefinition(NullableSchemaReferenceId, fullSchemaForNullValue);
101+
_schemaRepositoryAccessor.Current.AddDefinition(_nullableSchemaReferenceId, fullSchemaForNullValue);
99102
}
100103
}
101104
}

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceFieldObjectSchemaBuilder.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.ComponentModel.DataAnnotations;
44
using System.Linq;
55
using System.Reflection;
6+
using System.Text.Json;
67
using JsonApiDotNetCore.OpenApi.JsonApiObjects.RelationshipData;
78
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
89
using JsonApiDotNetCore.Resources.Annotations;
@@ -23,7 +24,8 @@ internal sealed class ResourceFieldObjectSchemaBuilder
2324
private readonly IDictionary<string, OpenApiSchema> _schemasForResourceFields;
2425

2526
public ResourceFieldObjectSchemaBuilder(ResourceTypeInfo resourceTypeInfo, ISchemaRepositoryAccessor schemaRepositoryAccessor,
26-
SchemaGenerator defaultSchemaGenerator, JsonApiSchemaIdSelector jsonApiSchemaIdSelector, ResourceTypeSchemaGenerator resourceTypeSchemaGenerator, SchemaRepository resourceSchemaRepository)
27+
SchemaGenerator defaultSchemaGenerator, JsonApiSchemaIdSelector jsonApiSchemaIdSelector, ResourceTypeSchemaGenerator resourceTypeSchemaGenerator,
28+
SchemaRepository resourceSchemaRepository, JsonNamingPolicy namingPolicy)
2729
{
2830
ArgumentGuard.NotNull(resourceTypeInfo, nameof(resourceTypeInfo));
2931
ArgumentGuard.NotNull(schemaRepositoryAccessor, nameof(schemaRepositoryAccessor));
@@ -39,7 +41,7 @@ public ResourceFieldObjectSchemaBuilder(ResourceTypeInfo resourceTypeInfo, ISche
3941
_resourceTypeSchemaGenerator = resourceTypeSchemaGenerator;
4042
_resourceSchemaRepository = resourceSchemaRepository;
4143

42-
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(schemaRepositoryAccessor);
44+
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(schemaRepositoryAccessor, namingPolicy);
4345
_schemasForResourceFields = GetFieldSchemas();
4446
}
4547

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceObjectSchemaGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private static Func<ResourceTypeInfo, ResourceFieldObjectSchemaBuilder> CreateFi
4444
var jsonApiSchemaIdSelector = new JsonApiSchemaIdSelector(namingPolicy, resourceGraph);
4545

4646
return resourceTypeInfo => new ResourceFieldObjectSchemaBuilder(resourceTypeInfo, schemaRepositoryAccessor, defaultSchemaGenerator,
47-
jsonApiSchemaIdSelector, resourceTypeSchemaGenerator, resourceSchemaRepository);
47+
jsonApiSchemaIdSelector, resourceTypeSchemaGenerator, resourceSchemaRepository, namingPolicy);
4848
}
4949

5050
public OpenApiSchema GenerateSchema(Type resourceObjectType)

0 commit comments

Comments
 (0)