@@ -9,9 +9,9 @@ internal sealed class ResourceObjectSchemaGenerator
9
9
{
10
10
private readonly SchemaGenerator _defaultSchemaGenerator ;
11
11
private readonly IResourceGraph _resourceGraph ;
12
+ private readonly IJsonApiOptions _options ;
12
13
private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor ;
13
14
private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator ;
14
- private readonly bool _allowClientGeneratedIds ;
15
15
private readonly Func < ResourceTypeInfo , ResourceFieldObjectSchemaBuilder > _resourceFieldObjectSchemaBuilderFactory ;
16
16
17
17
public ResourceObjectSchemaGenerator ( SchemaGenerator defaultSchemaGenerator , IResourceGraph resourceGraph , IJsonApiOptions options ,
@@ -24,12 +24,11 @@ public ResourceObjectSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IRe
24
24
25
25
_defaultSchemaGenerator = defaultSchemaGenerator ;
26
26
_resourceGraph = resourceGraph ;
27
+ _options = options ;
27
28
_schemaRepositoryAccessor = schemaRepositoryAccessor ;
28
29
29
30
_resourceTypeSchemaGenerator = new ResourceTypeSchemaGenerator ( schemaRepositoryAccessor , resourceGraph , options . SerializerOptions . PropertyNamingPolicy ) ;
30
31
31
- _allowClientGeneratedIds = options . AllowClientGeneratedIds ;
32
-
33
32
_resourceFieldObjectSchemaBuilderFactory = resourceTypeInfo => new ResourceFieldObjectSchemaBuilder ( resourceTypeInfo , schemaRepositoryAccessor ,
34
33
defaultSchemaGenerator , _resourceTypeSchemaGenerator , options . SerializerOptions . PropertyNamingPolicy ) ;
35
34
}
@@ -43,7 +42,7 @@ public OpenApiSchema GenerateSchema(Type resourceObjectType)
43
42
var resourceTypeInfo = ResourceTypeInfo . Create ( resourceObjectType , _resourceGraph ) ;
44
43
ResourceFieldObjectSchemaBuilder fieldObjectBuilder = _resourceFieldObjectSchemaBuilderFactory ( resourceTypeInfo ) ;
45
44
46
- RemoveResourceIdIfPostResourceObject ( resourceTypeInfo . ResourceObjectOpenType , fullSchemaForResourceObject ) ;
45
+ RemoveResourceIdIfPostResourceObject ( resourceTypeInfo , fullSchemaForResourceObject ) ;
47
46
48
47
SetResourceType ( fullSchemaForResourceObject , resourceTypeInfo . ResourceType . ClrType ) ;
49
48
@@ -76,12 +75,21 @@ public OpenApiSchema GenerateSchema(Type resourceObjectType)
76
75
return ( fullSchema , referenceSchema ) ;
77
76
}
78
77
79
- private void RemoveResourceIdIfPostResourceObject ( Type resourceObjectOpenType , OpenApiSchema fullSchemaForResourceObject )
78
+ private void RemoveResourceIdIfPostResourceObject ( ResourceTypeInfo resourceTypeInfo , OpenApiSchema fullSchemaForResourceObject )
80
79
{
81
- if ( resourceObjectOpenType == typeof ( ResourceObjectInPostRequest < > ) && ! _allowClientGeneratedIds )
80
+ if ( resourceTypeInfo . ResourceObjectOpenType == typeof ( ResourceObjectInPostRequest < > ) )
82
81
{
83
- fullSchemaForResourceObject . Required . Remove ( JsonApiObjectPropertyName . Id ) ;
84
- fullSchemaForResourceObject . Properties . Remove ( JsonApiObjectPropertyName . Id ) ;
82
+ ClientIdGenerationMode clientIdGeneration = resourceTypeInfo . ResourceType . ClientIdGeneration ?? _options . ClientIdGeneration ;
83
+
84
+ if ( clientIdGeneration == ClientIdGenerationMode . Forbidden )
85
+ {
86
+ fullSchemaForResourceObject . Required . Remove ( JsonApiObjectPropertyName . Id ) ;
87
+ fullSchemaForResourceObject . Properties . Remove ( JsonApiObjectPropertyName . Id ) ;
88
+ }
89
+ else if ( clientIdGeneration == ClientIdGenerationMode . Allowed )
90
+ {
91
+ fullSchemaForResourceObject . Required . Remove ( JsonApiObjectPropertyName . Id ) ;
92
+ }
85
93
}
86
94
}
87
95
0 commit comments