Skip to content

Commit 2604f84

Browse files
committed
Added handling of modelstate validation in setting required attributes
1 parent 99dcfa8 commit 2604f84

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceFieldObjectSchemaBuilder.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.ComponentModel.DataAnnotations;
22
using System.Reflection;
3-
using System.Text.Json;
3+
using JsonApiDotNetCore.Configuration;
44
using JsonApiDotNetCore.OpenApi.JsonApiObjects;
55
using JsonApiDotNetCore.OpenApi.JsonApiObjects.Relationships;
66
using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
@@ -23,24 +23,27 @@ internal sealed class ResourceFieldObjectSchemaBuilder
2323
private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor;
2424
private readonly SchemaGenerator _defaultSchemaGenerator;
2525
private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator;
26+
private readonly IJsonApiOptions _options;
2627
private readonly SchemaRepository _resourceSchemaRepository = new();
2728
private readonly NullableReferenceSchemaGenerator _nullableReferenceSchemaGenerator;
2829
private readonly IDictionary<string, OpenApiSchema> _schemasForResourceFields;
2930

3031
public ResourceFieldObjectSchemaBuilder(ResourceTypeInfo resourceTypeInfo, ISchemaRepositoryAccessor schemaRepositoryAccessor,
31-
SchemaGenerator defaultSchemaGenerator, ResourceTypeSchemaGenerator resourceTypeSchemaGenerator, JsonNamingPolicy? namingPolicy)
32+
SchemaGenerator defaultSchemaGenerator, ResourceTypeSchemaGenerator resourceTypeSchemaGenerator, IJsonApiOptions options)
3233
{
3334
ArgumentGuard.NotNull(resourceTypeInfo, nameof(resourceTypeInfo));
3435
ArgumentGuard.NotNull(schemaRepositoryAccessor, nameof(schemaRepositoryAccessor));
3536
ArgumentGuard.NotNull(defaultSchemaGenerator, nameof(defaultSchemaGenerator));
3637
ArgumentGuard.NotNull(resourceTypeSchemaGenerator, nameof(resourceTypeSchemaGenerator));
38+
ArgumentGuard.NotNull(options, nameof(options));
3739

3840
_resourceTypeInfo = resourceTypeInfo;
3941
_schemaRepositoryAccessor = schemaRepositoryAccessor;
4042
_defaultSchemaGenerator = defaultSchemaGenerator;
4143
_resourceTypeSchemaGenerator = resourceTypeSchemaGenerator;
44+
_options = options;
4245

43-
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(schemaRepositoryAccessor, namingPolicy);
46+
_nullableReferenceSchemaGenerator = new NullableReferenceSchemaGenerator(schemaRepositoryAccessor, options.SerializerOptions.PropertyNamingPolicy);
4447
_schemasForResourceFields = GetFieldSchemas();
4548
}
4649

@@ -113,7 +116,7 @@ private bool IsFieldRequired(ResourceFieldAttribute field)
113116

114117
return fieldTypeCategory switch
115118
{
116-
TypeCategory.NonNullableReferenceType => true,
119+
TypeCategory.NonNullableReferenceType => hasRequiredAttribute || _options.ValidateModelState,
117120
TypeCategory.ValueType => hasRequiredAttribute,
118121
TypeCategory.NullableReferenceType or TypeCategory.NullableValueType => hasRequiredAttribute,
119122
_ => throw new UnreachableCodeException()

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceObjectSchemaGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ResourceObjectSchemaGenerator(SchemaGenerator defaultSchemaGenerator, IRe
3131
_allowClientGeneratedIds = options.AllowClientGeneratedIds;
3232

3333
_resourceFieldObjectSchemaBuilderFactory = resourceTypeInfo => new ResourceFieldObjectSchemaBuilder(resourceTypeInfo, schemaRepositoryAccessor,
34-
defaultSchemaGenerator, _resourceTypeSchemaGenerator, options.SerializerOptions.PropertyNamingPolicy);
34+
defaultSchemaGenerator, _resourceTypeSchemaGenerator, options);
3535
}
3636

3737
public OpenApiSchema GenerateSchema(Type resourceObjectType)

0 commit comments

Comments
 (0)