@@ -25,6 +25,7 @@ internal sealed class DataSchemaGenerator
25
25
private readonly SchemaGenerator _defaultSchemaGenerator ;
26
26
private readonly GenerationCacheSchemaGenerator _generationCacheSchemaGenerator ;
27
27
private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator ;
28
+ private readonly ResourceIdSchemaGenerator _resourceIdSchemaGenerator ;
28
29
private readonly ResourceIdentifierSchemaGenerator _resourceIdentifierSchemaGenerator ;
29
30
private readonly LinksVisibilitySchemaGenerator _linksVisibilitySchemaGenerator ;
30
31
private readonly IResourceGraph _resourceGraph ;
@@ -34,14 +35,15 @@ internal sealed class DataSchemaGenerator
34
35
private readonly ResourceDocumentationReader _resourceDocumentationReader ;
35
36
36
37
public DataSchemaGenerator ( SchemaGenerator defaultSchemaGenerator , GenerationCacheSchemaGenerator generationCacheSchemaGenerator ,
37
- ResourceTypeSchemaGenerator resourceTypeSchemaGenerator , ResourceIdentifierSchemaGenerator resourceIdentifierSchemaGenerator ,
38
- LinksVisibilitySchemaGenerator linksVisibilitySchemaGenerator , IResourceGraph resourceGraph , IJsonApiOptions options ,
39
- ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider , RelationshipTypeFactory relationshipTypeFactory ,
40
- ResourceDocumentationReader resourceDocumentationReader )
38
+ ResourceTypeSchemaGenerator resourceTypeSchemaGenerator , ResourceIdSchemaGenerator resourceIdSchemaGenerator ,
39
+ ResourceIdentifierSchemaGenerator resourceIdentifierSchemaGenerator , LinksVisibilitySchemaGenerator linksVisibilitySchemaGenerator ,
40
+ IResourceGraph resourceGraph , IJsonApiOptions options , ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider ,
41
+ RelationshipTypeFactory relationshipTypeFactory , ResourceDocumentationReader resourceDocumentationReader )
41
42
{
42
43
ArgumentGuard . NotNull ( defaultSchemaGenerator ) ;
43
44
ArgumentGuard . NotNull ( generationCacheSchemaGenerator ) ;
44
45
ArgumentGuard . NotNull ( resourceTypeSchemaGenerator ) ;
46
+ ArgumentGuard . NotNull ( resourceIdSchemaGenerator ) ;
45
47
ArgumentGuard . NotNull ( resourceIdentifierSchemaGenerator ) ;
46
48
ArgumentGuard . NotNull ( linksVisibilitySchemaGenerator ) ;
47
49
ArgumentGuard . NotNull ( resourceGraph ) ;
@@ -53,6 +55,7 @@ public DataSchemaGenerator(SchemaGenerator defaultSchemaGenerator, GenerationCac
53
55
_defaultSchemaGenerator = defaultSchemaGenerator ;
54
56
_generationCacheSchemaGenerator = generationCacheSchemaGenerator ;
55
57
_resourceTypeSchemaGenerator = resourceTypeSchemaGenerator ;
58
+ _resourceIdSchemaGenerator = resourceIdSchemaGenerator ;
56
59
_resourceIdentifierSchemaGenerator = resourceIdentifierSchemaGenerator ;
57
60
_linksVisibilitySchemaGenerator = linksVisibilitySchemaGenerator ;
58
61
_resourceGraph = resourceGraph ;
@@ -88,6 +91,8 @@ public OpenApiSchema GenerateSchema(Type resourceDataConstructedType, SchemaRepo
88
91
SetResourceType ( fullSchemaForResourceData , resourceTypeInfo . ResourceType , schemaRepository ) ;
89
92
}
90
93
94
+ SetResourceId ( fullSchemaForDerivedType , resourceTypeInfo . ResourceType , schemaRepository ) ;
95
+
91
96
fullSchemaForResourceData . Description = _resourceDocumentationReader . GetDocumentationForType ( resourceTypeInfo . ResourceType ) ;
92
97
93
98
var fieldSchemaBuilder = new ResourceFieldSchemaBuilder ( _defaultSchemaGenerator , _resourceIdentifierSchemaGenerator , _linksVisibilitySchemaGenerator ,
@@ -162,6 +167,15 @@ private void SetResourceType(OpenApiSchema fullSchemaForResourceData, ResourceTy
162
167
fullSchemaForResourceData . Properties [ JsonApiPropertyName . Type ] = referenceSchema . WrapInExtendedSchema ( ) ;
163
168
}
164
169
170
+ private void SetResourceId ( OpenApiSchema fullSchemaForResourceData , ResourceType resourceType , SchemaRepository schemaRepository )
171
+ {
172
+ if ( fullSchemaForResourceData . Properties . ContainsKey ( JsonApiPropertyName . Id ) )
173
+ {
174
+ OpenApiSchema idSchema = _resourceIdSchemaGenerator . GenerateSchema ( resourceType , schemaRepository ) ;
175
+ fullSchemaForResourceData . Properties [ JsonApiPropertyName . Id ] = idSchema ;
176
+ }
177
+ }
178
+
165
179
private void SetResourceAttributes ( OpenApiSchema fullSchemaForResourceData , bool forRequestSchema , ResourceFieldSchemaBuilder builder ,
166
180
SchemaRepository schemaRepository )
167
181
{
0 commit comments