|
1 | 1 | using System.Reflection;
|
2 |
| -using JsonApiDotNetCore.Configuration; |
3 | 2 | using JsonApiDotNetCore.OpenApi.JsonApiMetadata;
|
4 | 3 | using JsonApiDotNetCore.OpenApi.JsonApiObjects.Relationships;
|
5 | 4 | using JsonApiDotNetCore.OpenApi.JsonApiObjects.ResourceObjects;
|
@@ -31,31 +30,31 @@ internal sealed class ResourceFieldObjectSchemaBuilder
|
31 | 30 | JsonApiPropertyName.Meta
|
32 | 31 | ];
|
33 | 32 |
|
34 |
| - private readonly ResourceTypeInfo _resourceTypeInfo; |
35 |
| - private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor; |
36 | 33 | private readonly SchemaGenerator _defaultSchemaGenerator;
|
37 |
| - private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator; |
38 |
| - private readonly SchemaRepository _resourceSchemaRepository = new(); |
39 |
| - private readonly IDictionary<string, OpenApiSchema> _schemasForResourceFields; |
| 34 | + private readonly ResourceIdentifierObjectSchemaGenerator _resourceIdentifierObjectSchemaGenerator; |
| 35 | + private readonly ISchemaRepositoryAccessor _schemaRepositoryAccessor; |
| 36 | + private readonly ResourceTypeInfo _resourceTypeInfo; |
40 | 37 | private readonly ResourceFieldValidationMetadataProvider _resourceFieldValidationMetadataProvider;
|
| 38 | + private readonly SchemaRepository _resourceSchemaRepository = new(); |
41 | 39 | private readonly RelationshipTypeFactory _relationshipTypeFactory;
|
| 40 | + private readonly IDictionary<string, OpenApiSchema> _schemasForResourceFields; |
42 | 41 | private readonly NullabilityInfoContext _nullabilityInfoContext = new();
|
43 | 42 | private readonly ResourceObjectDocumentationReader _resourceObjectDocumentationReader;
|
44 | 43 |
|
45 |
| - public ResourceFieldObjectSchemaBuilder(ResourceTypeInfo resourceTypeInfo, ISchemaRepositoryAccessor schemaRepositoryAccessor, |
46 |
| - SchemaGenerator defaultSchemaGenerator, ResourceTypeSchemaGenerator resourceTypeSchemaGenerator, |
47 |
| - ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider) |
| 44 | + public ResourceFieldObjectSchemaBuilder(SchemaGenerator defaultSchemaGenerator, |
| 45 | + ResourceIdentifierObjectSchemaGenerator resourceIdentifierObjectSchemaGenerator, ISchemaRepositoryAccessor schemaRepositoryAccessor, |
| 46 | + ResourceTypeInfo resourceTypeInfo, ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider) |
48 | 47 | {
|
49 |
| - ArgumentGuard.NotNull(resourceTypeInfo); |
50 |
| - ArgumentGuard.NotNull(schemaRepositoryAccessor); |
51 | 48 | ArgumentGuard.NotNull(defaultSchemaGenerator);
|
52 |
| - ArgumentGuard.NotNull(resourceTypeSchemaGenerator); |
| 49 | + ArgumentGuard.NotNull(resourceIdentifierObjectSchemaGenerator); |
| 50 | + ArgumentGuard.NotNull(schemaRepositoryAccessor); |
| 51 | + ArgumentGuard.NotNull(resourceTypeInfo); |
53 | 52 | ArgumentGuard.NotNull(resourceFieldValidationMetadataProvider);
|
54 | 53 |
|
55 |
| - _resourceTypeInfo = resourceTypeInfo; |
56 |
| - _schemaRepositoryAccessor = schemaRepositoryAccessor; |
57 | 54 | _defaultSchemaGenerator = defaultSchemaGenerator;
|
58 |
| - _resourceTypeSchemaGenerator = resourceTypeSchemaGenerator; |
| 55 | + _resourceIdentifierObjectSchemaGenerator = resourceIdentifierObjectSchemaGenerator; |
| 56 | + _schemaRepositoryAccessor = schemaRepositoryAccessor; |
| 57 | + _resourceTypeInfo = resourceTypeInfo; |
59 | 58 | _resourceFieldValidationMetadataProvider = resourceFieldValidationMetadataProvider;
|
60 | 59 |
|
61 | 60 | _relationshipTypeFactory = new RelationshipTypeFactory(resourceFieldValidationMetadataProvider);
|
@@ -160,38 +159,12 @@ public void SetMembersOfRelationshipsObject(OpenApiSchema fullSchemaForRelations
|
160 | 159 |
|
161 | 160 | if (matchingRelationship != null)
|
162 | 161 | {
|
163 |
| - EnsureResourceIdentifierObjectSchemaExists(matchingRelationship); |
| 162 | + _ = _resourceIdentifierObjectSchemaGenerator.GenerateSchema(matchingRelationship.RightType); |
164 | 163 | AddRelationshipSchemaToResourceObject(matchingRelationship, fullSchemaForRelationshipsObject);
|
165 | 164 | }
|
166 | 165 | }
|
167 | 166 | }
|
168 | 167 |
|
169 |
| - private void EnsureResourceIdentifierObjectSchemaExists(RelationshipAttribute relationship) |
170 |
| - { |
171 |
| - Type resourceIdentifierObjectType = typeof(ResourceIdentifierObject<>).MakeGenericType(relationship.RightType.ClrType); |
172 |
| - |
173 |
| - if (!ResourceIdentifierObjectSchemaExists(resourceIdentifierObjectType)) |
174 |
| - { |
175 |
| - GenerateResourceIdentifierObjectSchema(resourceIdentifierObjectType, relationship.RightType); |
176 |
| - } |
177 |
| - } |
178 |
| - |
179 |
| - private bool ResourceIdentifierObjectSchemaExists(Type resourceIdentifierObjectType) |
180 |
| - { |
181 |
| - return _schemaRepositoryAccessor.Current.TryLookupByType(resourceIdentifierObjectType, out _); |
182 |
| - } |
183 |
| - |
184 |
| - private void GenerateResourceIdentifierObjectSchema(Type resourceIdentifierObjectType, ResourceType resourceType) |
185 |
| - { |
186 |
| - OpenApiSchema referenceSchemaForResourceIdentifierObject = |
187 |
| - _defaultSchemaGenerator.GenerateSchema(resourceIdentifierObjectType, _schemaRepositoryAccessor.Current); |
188 |
| - |
189 |
| - OpenApiSchema fullSchemaForResourceIdentifierObject = |
190 |
| - _schemaRepositoryAccessor.Current.Schemas[referenceSchemaForResourceIdentifierObject.Reference.Id]; |
191 |
| - |
192 |
| - fullSchemaForResourceIdentifierObject.Properties[JsonApiPropertyName.Type] = _resourceTypeSchemaGenerator.Get(resourceType); |
193 |
| - } |
194 |
| - |
195 | 168 | private void AddRelationshipSchemaToResourceObject(RelationshipAttribute relationship, OpenApiSchema fullSchemaForRelationshipsObject)
|
196 | 169 | {
|
197 | 170 | Type relationshipSchemaType = GetRelationshipSchemaType(relationship, _resourceTypeInfo.ResourceObjectOpenType);
|
|
0 commit comments