Skip to content

Commit 9ba5ec3

Browse files
committed
Simplify dependencies: take ResourceType instead of ClrType
1 parent 2a42a29 commit 9ba5ec3

File tree

3 files changed

+9
-15
lines changed

3 files changed

+9
-15
lines changed

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceFieldObjectSchemaBuilder.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Reflection;
2+
using JsonApiDotNetCore.Configuration;
23
using JsonApiDotNetCore.OpenApi.JsonApiMetadata;
34
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Relationships;
45
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -171,7 +172,7 @@ private void EnsureResourceIdentifierObjectSchemaExists(RelationshipAttribute re
171172

172173
if (!ResourceIdentifierObjectSchemaExists(resourceIdentifierObjectType))
173174
{
174-
GenerateResourceIdentifierObjectSchema(resourceIdentifierObjectType);
175+
GenerateResourceIdentifierObjectSchema(resourceIdentifierObjectType, relationship.RightType);
175176
}
176177
}
177178

@@ -180,15 +181,14 @@ private bool ResourceIdentifierObjectSchemaExists(Type resourceIdentifierObjectT
180181
return _schemaRepositoryAccessor.Current.TryLookupByType(resourceIdentifierObjectType, out _);
181182
}
182183

183-
private void GenerateResourceIdentifierObjectSchema(Type resourceIdentifierObjectType)
184+
private void GenerateResourceIdentifierObjectSchema(Type resourceIdentifierObjectType, ResourceType resourceType)
184185
{
185186
OpenApiSchema referenceSchemaForResourceIdentifierObject =
186187
_defaultSchemaGenerator.GenerateSchema(resourceIdentifierObjectType, _schemaRepositoryAccessor.Current);
187188

188189
OpenApiSchema fullSchemaForResourceIdentifierObject =
189190
_schemaRepositoryAccessor.Current.Schemas[referenceSchemaForResourceIdentifierObject.Reference.Id];
190191

191-
Type resourceType = resourceIdentifierObjectType.GetGenericArguments()[0];
192192
fullSchemaForResourceIdentifierObject.Properties[JsonApiPropertyName.Type] = _resourceTypeSchemaGenerator.Get(resourceType);
193193
}
194194

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceObjectSchemaGenerator.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ public ResourceObjectSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IRe
3838
_resourceGraph = resourceGraph;
3939
_options = options;
4040
_schemaRepositoryAccessor = schemaRepositoryAccessor;
41-
42-
_resourceTypeSchemaGenerator = new ResourceTypeSchemaGenerator(schemaRepositoryAccessor, resourceGraph, options.SerializerOptions.PropertyNamingPolicy);
41+
_resourceTypeSchemaGenerator = new ResourceTypeSchemaGenerator(schemaRepositoryAccessor, options.SerializerOptions.PropertyNamingPolicy);
4342

4443
_resourceFieldObjectSchemaBuilderFactory = resourceTypeInfo => new ResourceFieldObjectSchemaBuilder(resourceTypeInfo, schemaRepositoryAccessor,
4544
defaultSchemaGenerator, _resourceTypeSchemaGenerator, resourceFieldValidationMetadataProvider);
@@ -102,7 +101,7 @@ private void RemoveResourceIdIfPostResourceObject(ResourceTypeInfo resourceTypeI
102101

103102
private void SetResourceType(OpenApiSchema fullSchemaForResourceObject, ResourceType resourceType)
104103
{
105-
fullSchemaForResourceObject.Properties[JsonApiPropertyName.Type] = _resourceTypeSchemaGenerator.Get(resourceType.ClrType);
104+
fullSchemaForResourceObject.Properties[JsonApiPropertyName.Type] = _resourceTypeSchemaGenerator.Get(resourceType);
106105

107106
fullSchemaForResourceObject.Description = _resourceObjectDocumentationReader.GetDocumentationForType(resourceType);
108107
}

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceTypeSchemaGenerator.cs

+4-9
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,26 @@ internal sealed class ResourceTypeSchemaGenerator
1010
{
1111
private const string ResourceTypeSchemaIdTemplate = "[ResourceName] Resource Type";
1212
private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor;
13-
private readonly IResourceGraph _resourceGraph;
1413
private readonly JsonNamingPolicy? _namingPolicy;
1514
private readonly Dictionary<Type, OpenApiSchema> _resourceClrTypeSchemaCache = [];
1615

17-
public ResourceTypeSchemaGenerator(ISchemaRepositoryAccessor schemaRepositoryAccessor, IResourceGraph resourceGraph, JsonNamingPolicy? namingPolicy)
16+
public ResourceTypeSchemaGenerator(ISchemaRepositoryAccessor schemaRepositoryAccessor, JsonNamingPolicy? namingPolicy)
1817
{
1918
ArgumentGuard.NotNull(schemaRepositoryAccessor);
20-
ArgumentGuard.NotNull(resourceGraph);
2119

2220
_schemaRepositoryAccessor = schemaRepositoryAccessor;
23-
_resourceGraph = resourceGraph;
2421
_namingPolicy = namingPolicy;
2522
}
2623

27-
public OpenApiSchema Get(Type resourceClrType)
24+
public OpenApiSchema Get(ResourceType resourceType)
2825
{
29-
ArgumentGuard.NotNull(resourceClrType);
26+
ArgumentGuard.NotNull(resourceType);
3027

31-
if (_resourceClrTypeSchemaCache.TryGetValue(resourceClrType, out OpenApiSchema? extendedReferenceSchema))
28+
if (_resourceClrTypeSchemaCache.TryGetValue(resourceType.ClrType, out OpenApiSchema? extendedReferenceSchema))
3229
{
3330
return extendedReferenceSchema;
3431
}
3532

36-
ResourceType resourceType = _resourceGraph.GetResourceType(resourceClrType);
37-
3833
var fullSchema = new OpenApiSchema
3934
{
4035
Type = "string",

0 commit comments

Comments
 (0)