1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Linq ;
4
+ using System . Text . Json ;
4
5
using Humanizer ;
5
6
using JsonApiDotNetCore . Configuration ;
6
7
using JsonApiDotNetCore . OpenApi . JsonApiObjects . Documents ;
@@ -13,42 +14,41 @@ internal sealed class JsonApiSchemaIdSelector
13
14
{
14
15
private static readonly IDictionary < Type , string > OpenTypeToSchemaTemplateMap = new Dictionary < Type , string >
15
16
{
16
- [ typeof ( ResourcePostRequestDocument < > ) ] = "###-post-request-document " ,
17
- [ typeof ( ResourcePatchRequestDocument < > ) ] = "###-patch-request-document " ,
18
- [ typeof ( ResourceObjectInPostRequest < > ) ] = "###-data-in-post-request " ,
19
- [ typeof ( AttributesInPostRequest < > ) ] = "###-attributes-in-post-request " ,
20
- [ typeof ( RelationshipsInPostRequest < > ) ] = "###-relationships-in-post-request " ,
21
- [ typeof ( ResourceObjectInPatchRequest < > ) ] = "###-data-in-patch-request " ,
22
- [ typeof ( AttributesInPatchRequest < > ) ] = "###-attributes-in-patch-request " ,
23
- [ typeof ( RelationshipsInPatchRequest < > ) ] = "###-relationships-in-patch-request " ,
24
- [ typeof ( ToOneRelationshipInRequest < > ) ] = "to-one-###-in-request " ,
25
- [ typeof ( NullableToOneRelationshipInRequest < > ) ] = "nullable-to-one-###-in-request " ,
26
- [ typeof ( ToManyRelationshipInRequest < > ) ] = "to-many-###-in-request " ,
27
- [ typeof ( PrimaryResourceResponseDocument < > ) ] = "###-primary-response-document " ,
28
- [ typeof ( SecondaryResourceResponseDocument < > ) ] = "###-secondary-response-document " ,
29
- [ typeof ( NullableSecondaryResourceResponseDocument < > ) ] = "nullable-###-secondary-response-document " ,
30
- [ typeof ( ResourceCollectionResponseDocument < > ) ] = "###-collection-response-document " ,
31
- [ typeof ( ResourceIdentifierResponseDocument < > ) ] = "###-identifier-response-document " ,
32
- [ typeof ( NullableResourceIdentifierResponseDocument < > ) ] = "nullable-###-identifier-response-document " ,
33
- [ typeof ( ResourceIdentifierCollectionResponseDocument < > ) ] = "###-identifier-collection-response-document " ,
34
- [ typeof ( ToOneRelationshipInResponse < > ) ] = "to-one-###-in-response " ,
35
- [ typeof ( NullableToOneRelationshipInResponse < > ) ] = "nullable-to-one-###-in-response " ,
36
- [ typeof ( ToManyRelationshipInResponse < > ) ] = "to-many-###-in-response " ,
37
- [ typeof ( ResourceObjectInResponse < > ) ] = "###-data-in-response " ,
38
- [ typeof ( AttributesInResponse < > ) ] = "###-attributes-in-response " ,
39
- [ typeof ( RelationshipsInResponse < > ) ] = "###-relationships-in-response " ,
40
- [ typeof ( ResourceIdentifierObject < > ) ] = "###-identifier "
17
+ [ typeof ( ResourcePostRequestDocument < > ) ] = "[ResourceName] Post Request Document " ,
18
+ [ typeof ( ResourcePatchRequestDocument < > ) ] = "[ResourceName] Patch Request Document " ,
19
+ [ typeof ( ResourceObjectInPostRequest < > ) ] = "[ResourceName] Data In Post Request " ,
20
+ [ typeof ( AttributesInPostRequest < > ) ] = "[ResourceName] Attributes In Post Request " ,
21
+ [ typeof ( RelationshipsInPostRequest < > ) ] = "[ResourceName] Relationships In Post Request " ,
22
+ [ typeof ( ResourceObjectInPatchRequest < > ) ] = "[ResourceName] Data In Patch Request " ,
23
+ [ typeof ( AttributesInPatchRequest < > ) ] = "[ResourceName] Attributes In Patch Request " ,
24
+ [ typeof ( RelationshipsInPatchRequest < > ) ] = "[ResourceName] Relationships In Patch Request " ,
25
+ [ typeof ( ToOneRelationshipInRequest < > ) ] = "To One [ResourceName] In Request " ,
26
+ [ typeof ( NullableToOneRelationshipInRequest < > ) ] = "Nullable To One [ResourceName] In Request " ,
27
+ [ typeof ( ToManyRelationshipInRequest < > ) ] = "To Many [ResourceName] In Request " ,
28
+ [ typeof ( PrimaryResourceResponseDocument < > ) ] = "[ResourceName] Primary Response Document " ,
29
+ [ typeof ( SecondaryResourceResponseDocument < > ) ] = "[ResourceName] Secondary Response Document " ,
30
+ [ typeof ( NullableSecondaryResourceResponseDocument < > ) ] = "Nullable [ResourceName] Secondary Response Document " ,
31
+ [ typeof ( ResourceCollectionResponseDocument < > ) ] = "[ResourceName] Collection Response Document " ,
32
+ [ typeof ( ResourceIdentifierResponseDocument < > ) ] = "[ResourceName] Identifier Response Document " ,
33
+ [ typeof ( NullableResourceIdentifierResponseDocument < > ) ] = "Nullable [ResourceName] Identifier Response Document " ,
34
+ [ typeof ( ResourceIdentifierCollectionResponseDocument < > ) ] = "[ResourceName] Identifier Collection Response Document " ,
35
+ [ typeof ( ToOneRelationshipInResponse < > ) ] = "To One [ResourceName] In Response " ,
36
+ [ typeof ( NullableToOneRelationshipInResponse < > ) ] = "Nullable To One [ResourceName] In Response " ,
37
+ [ typeof ( ToManyRelationshipInResponse < > ) ] = "To Many [ResourceName] In Response " ,
38
+ [ typeof ( ResourceObjectInResponse < > ) ] = "[ResourceName] Data In Response " ,
39
+ [ typeof ( AttributesInResponse < > ) ] = "[ResourceName] Attributes In Response " ,
40
+ [ typeof ( RelationshipsInResponse < > ) ] = "[ResourceName] Relationships In Response " ,
41
+ [ typeof ( ResourceIdentifierObject < > ) ] = "[ResourceName] Identifier "
41
42
} ;
42
43
43
- private readonly ResourceNameFormatter _formatter ;
44
+ private readonly JsonNamingPolicy ? _namingPolicy ;
44
45
private readonly IResourceGraph _resourceGraph ;
45
46
46
- public JsonApiSchemaIdSelector ( ResourceNameFormatter formatter , IResourceGraph resourceGraph )
47
+ public JsonApiSchemaIdSelector ( JsonNamingPolicy ? namingPolicy , IResourceGraph resourceGraph )
47
48
{
48
- ArgumentGuard . NotNull ( formatter , nameof ( formatter ) ) ;
49
49
ArgumentGuard . NotNull ( resourceGraph , nameof ( resourceGraph ) ) ;
50
50
51
- _formatter = formatter ;
51
+ _namingPolicy = namingPolicy ;
52
52
_resourceGraph = resourceGraph ;
53
53
}
54
54
@@ -65,15 +65,24 @@ public string GetSchemaId(Type type)
65
65
66
66
if ( type . IsConstructedGenericType && OpenTypeToSchemaTemplateMap . ContainsKey ( type . GetGenericTypeDefinition ( ) ) )
67
67
{
68
+ string pascalCaseSchemaIdTemplate = OpenTypeToSchemaTemplateMap [ type . GetGenericTypeDefinition ( ) ] ;
68
69
Type resourceClrType = type . GetGenericArguments ( ) . First ( ) ;
69
- string resourceName = _formatter . FormatResourceName ( resourceClrType ) . Singularize ( ) ;
70
70
71
- string template = OpenTypeToSchemaTemplateMap [ type . GetGenericTypeDefinition ( ) ] ;
72
- return template . Replace ( "###" , resourceName ) ;
71
+ // @formatter:wrap_chained_method_calls chop_always
72
+ // @formatter:keep_existing_linebreaks true
73
+
74
+ string pascalCaseSchemaId = pascalCaseSchemaIdTemplate
75
+ . Replace ( "[ResourceName]" , resourceClrType . Name )
76
+ . Replace ( " " , "" ) ;
77
+
78
+ // @formatter:keep_existing_linebreaks restore
79
+ // @formatter:wrap_chained_method_calls restore
80
+
81
+ return _namingPolicy != null ? _namingPolicy . ConvertName ( pascalCaseSchemaId ) : pascalCaseSchemaId ;
73
82
}
74
83
75
84
// Used for a fixed set of types, such as jsonapi-object, links-in-many-resource-document etc.
76
- return _formatter . FormatResourceName ( type ) . Singularize ( ) ;
85
+ return _namingPolicy != null ? _namingPolicy . ConvertName ( type . Name ) : type . Name ;
77
86
}
78
87
}
79
88
}
0 commit comments