1
1
using System . ComponentModel . DataAnnotations ;
2
2
using System . Reflection ;
3
- using System . Text . Json ;
3
+ using JsonApiDotNetCore . Configuration ;
4
4
using JsonApiDotNetCore . OpenApi . JsonApiObjects ;
5
5
using JsonApiDotNetCore . OpenApi . JsonApiObjects . Relationships ;
6
6
using JsonApiDotNetCore . OpenApi . JsonApiObjects . ResourceObjects ;
@@ -23,24 +23,27 @@ internal sealed class ResourceFieldObjectSchemaBuilder
23
23
private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor ;
24
24
private readonly SchemaGenerator _defaultSchemaGenerator ;
25
25
private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator ;
26
+ private readonly IJsonApiOptions _options ;
26
27
private readonly SchemaRepository _resourceSchemaRepository = new ( ) ;
27
28
private readonly NullableReferenceSchemaGenerator _nullableReferenceSchemaGenerator ;
28
29
private readonly IDictionary < string , OpenApiSchema > _schemasForResourceFields ;
29
30
30
31
public ResourceFieldObjectSchemaBuilder ( ResourceTypeInfo resourceTypeInfo , ISchemaRepositoryAccessor schemaRepositoryAccessor ,
31
- SchemaGenerator defaultSchemaGenerator , ResourceTypeSchemaGenerator resourceTypeSchemaGenerator , JsonNamingPolicy ? namingPolicy )
32
+ SchemaGenerator defaultSchemaGenerator , ResourceTypeSchemaGenerator resourceTypeSchemaGenerator , IJsonApiOptions options )
32
33
{
33
34
ArgumentGuard . NotNull ( resourceTypeInfo , nameof ( resourceTypeInfo ) ) ;
34
35
ArgumentGuard . NotNull ( schemaRepositoryAccessor , nameof ( schemaRepositoryAccessor ) ) ;
35
36
ArgumentGuard . NotNull ( defaultSchemaGenerator , nameof ( defaultSchemaGenerator ) ) ;
36
37
ArgumentGuard . NotNull ( resourceTypeSchemaGenerator , nameof ( resourceTypeSchemaGenerator ) ) ;
38
+ ArgumentGuard . NotNull ( options , nameof ( options ) ) ;
37
39
38
40
_resourceTypeInfo = resourceTypeInfo ;
39
41
_schemaRepositoryAccessor = schemaRepositoryAccessor ;
40
42
_defaultSchemaGenerator = defaultSchemaGenerator ;
41
43
_resourceTypeSchemaGenerator = resourceTypeSchemaGenerator ;
44
+ _options = options ;
42
45
43
- _nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator ( schemaRepositoryAccessor , namingPolicy ) ;
46
+ _nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator ( schemaRepositoryAccessor , options . SerializerOptions . PropertyNamingPolicy ) ;
44
47
_schemasForResourceFields = GetFieldSchemas ( ) ;
45
48
}
46
49
@@ -113,7 +116,7 @@ private bool IsFieldRequired(ResourceFieldAttribute field)
113
116
114
117
return fieldTypeCategory switch
115
118
{
116
- TypeCategory . NonNullableReferenceType => true ,
119
+ TypeCategory . NonNullableReferenceType => hasRequiredAttribute || _options . ValidateModelState ,
117
120
TypeCategory . ValueType => hasRequiredAttribute ,
118
121
TypeCategory . NullableReferenceType or TypeCategory . NullableValueType => hasRequiredAttribute ,
119
122
_ => throw new UnreachableCodeException ( )
0 commit comments