Skip to content

Commit 5454188

Browse files
committed
Rename ResourceTypeInfo to ResourceSchemaType
1 parent 732e52c commit 5454188

File tree

8 files changed

+100
-77
lines changed

8 files changed

+100
-77
lines changed

src/JsonApiDotNetCore.OpenApi.Swashbuckle/SchemaGenerators/Bodies/ResourceOrRelationshipBodySchemaGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,15 @@ protected override OpenApiSchema GenerateBodySchema(Type bodyType, SchemaReposit
6767
return referenceSchemaForBody;
6868
}
6969

70-
var resourceTypeInfo = ResourceTypeInfo.Create(bodyType, _resourceGraph);
71-
bool isRequestSchema = RequestBodySchemaTypes.Contains(bodyType.ConstructedToOpenType());
70+
var resourceSchemaType = ResourceSchemaType.Create(bodyType, _resourceGraph);
71+
bool isRequestSchema = RequestBodySchemaTypes.Contains(resourceSchemaType.SchemaOpenType);
7272

73-
_ = _dataContainerSchemaGenerator.GenerateSchema(bodyType, resourceTypeInfo.ResourceType, isRequestSchema, schemaRepository);
73+
_ = _dataContainerSchemaGenerator.GenerateSchema(bodyType, resourceSchemaType.ResourceType, isRequestSchema, schemaRepository);
7474

7575
referenceSchemaForBody = _defaultSchemaGenerator.GenerateSchema(bodyType, schemaRepository);
7676
OpenApiSchema fullSchemaForBody = schemaRepository.Schemas[referenceSchemaForBody.Reference.Id].UnwrapLastExtendedSchema();
7777

78-
if (JsonApiSchemaFacts.HasNullableDataProperty(bodyType))
78+
if (JsonApiSchemaFacts.HasNullableDataProperty(resourceSchemaType.SchemaOpenType))
7979
{
8080
fullSchemaForBody.Properties[JsonApiPropertyName.Data].Nullable = true;
8181
}

src/JsonApiDotNetCore.OpenApi.Swashbuckle/SchemaGenerators/Components/AbstractResourceDataSchemaGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ public void MapDiscriminator(Type resourceDataConstructedType, OpenApiSchema ref
9191
ArgumentGuard.NotNull(referenceSchemaForResourceData);
9292
ArgumentGuard.NotNull(schemaRepository);
9393

94-
var resourceTypeInfo = ResourceTypeInfo.Create(resourceDataConstructedType, _resourceGraph);
94+
var resourceSchemaType = ResourceSchemaType.Create(resourceDataConstructedType, _resourceGraph);
9595

96-
if (resourceTypeInfo.ResourceDataOpenType == typeof(ResourceDataInResponse<>))
96+
if (resourceSchemaType.SchemaOpenType == typeof(ResourceDataInResponse<>))
9797
{
9898
if (!schemaRepository.TryLookupByType(ResourceDataAbstractType, out OpenApiSchema? referenceSchemaForAbstractResourceData))
9999
{
@@ -102,7 +102,7 @@ public void MapDiscriminator(Type resourceDataConstructedType, OpenApiSchema ref
102102

103103
OpenApiSchema fullSchemaForAbstractResourceData = schemaRepository.Schemas[referenceSchemaForAbstractResourceData.Reference.Id];
104104
string dataSchemaId = referenceSchemaForResourceData.Reference.ReferenceV3;
105-
string publicName = resourceTypeInfo.ResourceType.PublicName;
105+
string publicName = resourceSchemaType.ResourceType.PublicName;
106106

107107
if (fullSchemaForAbstractResourceData.Discriminator.Mapping.TryAdd(publicName, dataSchemaId))
108108
{

src/JsonApiDotNetCore.OpenApi.Swashbuckle/SchemaGenerators/Components/DataContainerSchemaGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ private void EnsureResourceDataInResponseDerivedTypesAreMappedInDiscriminator(Ty
101101

102102
if (dataOpenType == typeof(ResourceDataInResponse<>))
103103
{
104-
var resourceTypeInfo = ResourceTypeInfo.Create(dataConstructedType, _resourceGraph);
104+
var resourceSchemaType = ResourceSchemaType.Create(dataConstructedType, _resourceGraph);
105105

106-
foreach (ResourceType relatedType in _includeDependencyScanner.GetReachableRelatedTypes(resourceTypeInfo.ResourceType))
106+
foreach (ResourceType relatedType in _includeDependencyScanner.GetReachableRelatedTypes(resourceSchemaType.ResourceType))
107107
{
108108
MapResourceDataInResponseDerivedTypeInDiscriminator(relatedType, schemaRepository);
109109
}

src/JsonApiDotNetCore.OpenApi.Swashbuckle/SchemaGenerators/Components/DataSchemaGenerator.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ public OpenApiSchema GenerateSchema(Type dataSchemaType, SchemaRepository schema
7474
return referenceSchemaForData;
7575
}
7676

77-
var resourceTypeInfo = ResourceTypeInfo.Create(dataSchemaType, _resourceGraph);
78-
ResourceType resourceType = resourceTypeInfo.ResourceType;
77+
var resourceSchemaType = ResourceSchemaType.Create(dataSchemaType, _resourceGraph);
78+
ResourceType resourceType = resourceSchemaType.ResourceType;
7979

8080
referenceSchemaForData = _defaultSchemaGenerator.GenerateSchema(dataSchemaType, schemaRepository);
8181
OpenApiSchema fullSchemaForResourceData = schemaRepository.Schemas[referenceSchemaForData.Reference.Id];
@@ -86,11 +86,11 @@ public OpenApiSchema GenerateSchema(Type dataSchemaType, SchemaRepository schema
8686

8787
SetAbstract(inlineSchemaForResourceData, resourceType);
8888
SetResourceType(inlineSchemaForResourceData, resourceType, schemaRepository);
89-
AdaptResourceIdentity(inlineSchemaForResourceData, resourceTypeInfo, isRequestSchema, schemaRepository);
89+
AdaptResourceIdentity(inlineSchemaForResourceData, resourceSchemaType, isRequestSchema, schemaRepository);
9090
SetResourceId(inlineSchemaForResourceData, resourceType, schemaRepository);
91-
SetResourceFields(inlineSchemaForResourceData, resourceTypeInfo, isRequestSchema, schemaRepository);
91+
SetResourceFields(inlineSchemaForResourceData, resourceSchemaType, isRequestSchema, schemaRepository);
9292
SetDocumentation(fullSchemaForResourceData, resourceType);
93-
SetLinksVisibility(inlineSchemaForResourceData, resourceTypeInfo, schemaRepository);
93+
SetLinksVisibility(inlineSchemaForResourceData, resourceSchemaType, schemaRepository);
9494

9595
inlineSchemaForResourceData.ReorderProperties(ResourceDataPropertyNamesInOrder);
9696

@@ -114,7 +114,8 @@ private void SetResourceType(OpenApiSchema fullSchema, ResourceType resourceType
114114
}
115115
}
116116

117-
private void AdaptResourceIdentity(OpenApiSchema fullSchema, ResourceTypeInfo resourceTypeInfo, bool forRequestSchema, SchemaRepository schemaRepository)
117+
private void AdaptResourceIdentity(OpenApiSchema fullSchema, ResourceSchemaType resourceSchemaType, bool forRequestSchema,
118+
SchemaRepository schemaRepository)
118119
{
119120
if (!forRequestSchema)
120121
{
@@ -128,9 +129,9 @@ private void AdaptResourceIdentity(OpenApiSchema fullSchema, ResourceTypeInfo re
128129
fullSchema.Properties.Remove(JsonApiPropertyName.Lid);
129130
}
130131

131-
if (resourceTypeInfo.ResourceDataOpenType == typeof(DataInCreateResourceRequest<>))
132+
if (resourceSchemaType.SchemaOpenType == typeof(DataInCreateResourceRequest<>))
132133
{
133-
ClientIdGenerationMode clientIdGeneration = resourceTypeInfo.ResourceType.ClientIdGeneration ?? _options.ClientIdGeneration;
134+
ClientIdGenerationMode clientIdGeneration = resourceSchemaType.ResourceType.ClientIdGeneration ?? _options.ClientIdGeneration;
134135

135136
if (hasAtomicOperationsEndpoint)
136137
{
@@ -174,17 +175,18 @@ private void SetResourceId(OpenApiSchema fullSchema, ResourceType resourceType,
174175
}
175176
}
176177

177-
private void SetResourceFields(OpenApiSchema fullSchemaForData, ResourceTypeInfo resourceTypeInfo, bool forRequestSchema, SchemaRepository schemaRepository)
178+
private void SetResourceFields(OpenApiSchema fullSchemaForData, ResourceSchemaType resourceSchemaType, bool forRequestSchema,
179+
SchemaRepository schemaRepository)
178180
{
179181
bool schemaHasFields = fullSchemaForData.Properties.ContainsKey(JsonApiPropertyName.Attributes) &&
180182
fullSchemaForData.Properties.ContainsKey(JsonApiPropertyName.Relationships);
181183

182184
if (schemaHasFields)
183185
{
184186
var fieldSchemaBuilder = new ResourceFieldSchemaBuilder(_defaultSchemaGenerator, _resourceIdentifierSchemaGenerator,
185-
_linksVisibilitySchemaGenerator, _resourceFieldValidationMetadataProvider, _relationshipTypeFactory, resourceTypeInfo);
187+
_linksVisibilitySchemaGenerator, _resourceFieldValidationMetadataProvider, _relationshipTypeFactory, resourceSchemaType);
186188

187-
ResourceType resourceType = resourceTypeInfo.ResourceType;
189+
ResourceType resourceType = resourceSchemaType.ResourceType;
188190

189191
SetFieldSchemaMembers(fullSchemaForData, resourceType, forRequestSchema, true, fieldSchemaBuilder, schemaRepository);
190192
SetFieldSchemaMembers(fullSchemaForData, resourceType, forRequestSchema, false, fieldSchemaBuilder, schemaRepository);
@@ -222,8 +224,8 @@ private void SetDocumentation(OpenApiSchema fullSchema, ResourceType resourceTyp
222224
fullSchema.Description = _resourceDocumentationReader.GetDocumentationForType(resourceType);
223225
}
224226

225-
private void SetLinksVisibility(OpenApiSchema fullSchema, ResourceTypeInfo resourceTypeInfo, SchemaRepository schemaRepository)
227+
private void SetLinksVisibility(OpenApiSchema fullSchema, ResourceSchemaType resourceSchemaType, SchemaRepository schemaRepository)
226228
{
227-
_linksVisibilitySchemaGenerator.UpdateSchemaForResource(resourceTypeInfo, fullSchema, schemaRepository);
229+
_linksVisibilitySchemaGenerator.UpdateSchemaForResource(resourceSchemaType, fullSchema, schemaRepository);
228230
}
229231
}

src/JsonApiDotNetCore.OpenApi.Swashbuckle/SchemaGenerators/Components/LinksVisibilitySchemaGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ public void UpdateSchemaForTopLevel(Type modelType, OpenApiSchema fullSchemaForL
8383
}
8484
}
8585

86-
public void UpdateSchemaForResource(ResourceTypeInfo resourceTypeInfo, OpenApiSchema fullSchemaForResourceData, SchemaRepository schemaRepository)
86+
public void UpdateSchemaForResource(ResourceSchemaType resourceSchemaType, OpenApiSchema fullSchemaForResourceData, SchemaRepository schemaRepository)
8787
{
88-
ArgumentGuard.NotNull(resourceTypeInfo);
88+
ArgumentGuard.NotNull(resourceSchemaType);
8989
ArgumentGuard.NotNull(fullSchemaForResourceData);
9090

91-
if (LinksInJsonApiSchemaTypes.TryGetValue(resourceTypeInfo.ResourceDataOpenType, out LinkTypes possibleLinkTypes))
91+
if (LinksInJsonApiSchemaTypes.TryGetValue(resourceSchemaType.SchemaOpenType, out LinkTypes possibleLinkTypes))
9292
{
9393
UpdateLinksProperty(fullSchemaForResourceData, _lazyLinksVisibility.Value.ResourceLinks, possibleLinkTypes, schemaRepository);
9494
}

src/JsonApiDotNetCore.OpenApi.Swashbuckle/SwaggerComponents/ResourceFieldSchemaBuilder.cs

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal sealed class ResourceFieldSchemaBuilder
1313
private readonly SchemaGenerator _defaultSchemaGenerator;
1414
private readonly ResourceIdentifierSchemaGenerator _resourceIdentifierSchemaGenerator;
1515
private readonly LinksVisibilitySchemaGenerator _linksVisibilitySchemaGenerator;
16-
private readonly ResourceTypeInfo _resourceTypeInfo;
16+
private readonly ResourceSchemaType _resourceSchemaType;
1717
private readonly ResourceFieldValidationMetadataProvider _resourceFieldValidationMetadataProvider;
1818
private readonly RelationshipTypeFactory _relationshipTypeFactory;
1919

@@ -23,19 +23,19 @@ internal sealed class ResourceFieldSchemaBuilder
2323

2424
public ResourceFieldSchemaBuilder(SchemaGenerator defaultSchemaGenerator, ResourceIdentifierSchemaGenerator resourceIdentifierSchemaGenerator,
2525
LinksVisibilitySchemaGenerator linksVisibilitySchemaGenerator, ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider,
26-
RelationshipTypeFactory relationshipTypeFactory, ResourceTypeInfo resourceTypeInfo)
26+
RelationshipTypeFactory relationshipTypeFactory, ResourceSchemaType resourceSchemaType)
2727
{
2828
ArgumentGuard.NotNull(defaultSchemaGenerator);
2929
ArgumentGuard.NotNull(resourceIdentifierSchemaGenerator);
3030
ArgumentGuard.NotNull(linksVisibilitySchemaGenerator);
31-
ArgumentGuard.NotNull(resourceTypeInfo);
31+
ArgumentGuard.NotNull(resourceSchemaType);
3232
ArgumentGuard.NotNull(resourceFieldValidationMetadataProvider);
3333
ArgumentGuard.NotNull(relationshipTypeFactory);
3434

3535
_defaultSchemaGenerator = defaultSchemaGenerator;
3636
_resourceIdentifierSchemaGenerator = resourceIdentifierSchemaGenerator;
3737
_linksVisibilitySchemaGenerator = linksVisibilitySchemaGenerator;
38-
_resourceTypeInfo = resourceTypeInfo;
38+
_resourceSchemaType = resourceSchemaType;
3939
_resourceFieldValidationMetadataProvider = resourceFieldValidationMetadataProvider;
4040
_relationshipTypeFactory = relationshipTypeFactory;
4141

@@ -44,9 +44,9 @@ public ResourceFieldSchemaBuilder(SchemaGenerator defaultSchemaGenerator, Resour
4444

4545
private IDictionary<string, OpenApiSchema> GetFieldSchemas()
4646
{
47-
if (!_resourceSchemaRepository.TryLookupByType(_resourceTypeInfo.ResourceType.ClrType, out OpenApiSchema referenceSchemaForResource))
47+
if (!_resourceSchemaRepository.TryLookupByType(_resourceSchemaType.ResourceType.ClrType, out OpenApiSchema referenceSchemaForResource))
4848
{
49-
referenceSchemaForResource = _defaultSchemaGenerator.GenerateSchema(_resourceTypeInfo.ResourceType.ClrType, _resourceSchemaRepository);
49+
referenceSchemaForResource = _defaultSchemaGenerator.GenerateSchema(_resourceSchemaType.ResourceType.ClrType, _resourceSchemaRepository);
5050
}
5151

5252
OpenApiSchema fullSchemaForResource = _resourceSchemaRepository.Schemas[referenceSchemaForResource.Reference.Id];
@@ -57,12 +57,13 @@ public void SetMembersOfAttributes(OpenApiSchema fullSchemaForAttributes, bool f
5757
{
5858
ArgumentGuard.NotNull(fullSchemaForAttributes);
5959
ArgumentGuard.NotNull(schemaRepository);
60+
AssertHasNoProperties(fullSchemaForAttributes);
6061

61-
AttrCapabilities requiredCapability = GetRequiredCapabilityForAttributes(_resourceTypeInfo.ResourceDataOpenType);
62+
AttrCapabilities requiredCapability = GetRequiredCapabilityForAttributes(_resourceSchemaType.SchemaOpenType);
6263

63-
foreach ((string fieldName, OpenApiSchema resourceFieldSchema) in _schemasForResourceFields)
64+
foreach ((string publicName, OpenApiSchema schemaForResourceField) in _schemasForResourceFields)
6465
{
65-
AttrAttribute? matchingAttribute = _resourceTypeInfo.ResourceType.FindAttributeByPublicName(fieldName);
66+
AttrAttribute? matchingAttribute = _resourceSchemaType.ResourceType.FindAttributeByPublicName(publicName);
6667

6768
if (matchingAttribute != null && matchingAttribute.Capabilities.HasFlag(requiredCapability))
6869
{
@@ -81,24 +82,25 @@ public void SetMembersOfAttributes(OpenApiSchema fullSchemaForAttributes, bool f
8182
}
8283
}
8384

84-
bool isInlineSchemaType = resourceFieldSchema.AllOf.Count == 0;
85+
bool isInlineSchemaType = schemaForResourceField.AllOf.Count == 0;
8586

8687
// Schemas for types like enum and complex attributes are handled as reference schemas.
8788
if (!isInlineSchemaType)
8889
{
89-
EnsureAttributeSchemaIsExposed(resourceFieldSchema.UnwrapLastExtendedSchema(), matchingAttribute, schemaRepository);
90+
OpenApiSchema referenceSchemaForAttribute = schemaForResourceField.UnwrapLastExtendedSchema();
91+
EnsureAttributeSchemaIsExposed(referenceSchemaForAttribute, matchingAttribute, schemaRepository);
9092
}
9193

92-
fullSchemaForAttributes.Properties.Add(matchingAttribute.PublicName, resourceFieldSchema);
94+
fullSchemaForAttributes.Properties.Add(matchingAttribute.PublicName, schemaForResourceField);
9395

94-
resourceFieldSchema.Nullable = _resourceFieldValidationMetadataProvider.IsNullable(matchingAttribute);
96+
schemaForResourceField.Nullable = _resourceFieldValidationMetadataProvider.IsNullable(matchingAttribute);
9597

9698
if (IsFieldRequired(matchingAttribute))
9799
{
98100
fullSchemaForAttributes.Required.Add(matchingAttribute.PublicName);
99101
}
100102

101-
resourceFieldSchema.Description = _resourceDocumentationReader.GetDocumentationForAttribute(matchingAttribute);
103+
schemaForResourceField.Description = _resourceDocumentationReader.GetDocumentationForAttribute(matchingAttribute);
102104
}
103105
}
104106
}
@@ -142,18 +144,19 @@ private Type GetRepresentedTypeForAttributeSchema(AttrAttribute attribute)
142144

143145
private bool IsFieldRequired(ResourceFieldAttribute field)
144146
{
145-
bool isCreateResourceSchemaType = _resourceTypeInfo.ResourceDataOpenType == typeof(DataInCreateResourceRequest<>);
147+
bool isCreateResourceSchemaType = _resourceSchemaType.SchemaOpenType == typeof(DataInCreateResourceRequest<>);
146148
return isCreateResourceSchemaType && _resourceFieldValidationMetadataProvider.IsRequired(field);
147149
}
148150

149151
public void SetMembersOfRelationships(OpenApiSchema fullSchemaForRelationships, bool forRequestSchema, SchemaRepository schemaRepository)
150152
{
151153
ArgumentGuard.NotNull(fullSchemaForRelationships);
152154
ArgumentGuard.NotNull(schemaRepository);
155+
AssertHasNoProperties(fullSchemaForRelationships);
153156

154-
foreach (string fieldName in _schemasForResourceFields.Keys)
157+
foreach (string publicName in _schemasForResourceFields.Keys)
155158
{
156-
RelationshipAttribute? matchingRelationship = _resourceTypeInfo.ResourceType.FindRelationshipByPublicName(fieldName);
159+
RelationshipAttribute? matchingRelationship = _resourceSchemaType.ResourceType.FindRelationshipByPublicName(publicName);
157160

158161
if (matchingRelationship != null)
159162
{
@@ -166,7 +169,7 @@ public void SetMembersOfRelationships(OpenApiSchema fullSchemaForRelationships,
166169
private void AddRelationshipSchemaToResourceData(RelationshipAttribute relationship, OpenApiSchema fullSchemaForRelationships,
167170
SchemaRepository schemaRepository)
168171
{
169-
Type relationshipSchemaType = GetRelationshipSchemaType(relationship, _resourceTypeInfo.ResourceDataOpenType);
172+
Type relationshipSchemaType = GetRelationshipSchemaType(relationship, _resourceSchemaType.SchemaOpenType);
170173

171174
OpenApiSchema referenceSchemaForRelationship = GetReferenceSchemaForRelationship(relationshipSchemaType, schemaRepository) ??
172175
CreateReferenceSchemaForRelationship(relationshipSchemaType, schemaRepository);
@@ -182,9 +185,9 @@ private void AddRelationshipSchemaToResourceData(RelationshipAttribute relations
182185
}
183186
}
184187

185-
private Type GetRelationshipSchemaType(RelationshipAttribute relationship, Type resourceDataConstructedType)
188+
private Type GetRelationshipSchemaType(RelationshipAttribute relationship, Type openSchemaType)
186189
{
187-
bool isResponseSchemaType = resourceDataConstructedType.ConstructedToOpenType().IsAssignableTo(typeof(ResourceDataInResponse<>));
190+
bool isResponseSchemaType = openSchemaType.IsAssignableTo(typeof(ResourceDataInResponse<>));
188191
return isResponseSchemaType ? _relationshipTypeFactory.GetForResponse(relationship) : _relationshipTypeFactory.GetForRequest(relationship);
189192
}
190193

@@ -211,4 +214,12 @@ private OpenApiSchema CreateReferenceSchemaForRelationship(Type relationshipSche
211214

212215
return referenceSchema;
213216
}
217+
218+
private static void AssertHasNoProperties(OpenApiSchema fullSchema)
219+
{
220+
if (fullSchema.Properties.Count > 0)
221+
{
222+
throw new UnreachableCodeException();
223+
}
224+
}
214225
}

0 commit comments

Comments
 (0)