22
22
use ApiPlatform \GraphQl \Resolver \Stage \SerializeStageInterface ;
23
23
use ApiPlatform \GraphQl \Resolver \Stage \ValidateStageInterface ;
24
24
use ApiPlatform \GraphQl \Resolver \Stage \WriteStageInterface ;
25
- use ApiPlatform \Metadata \Resource \Factory \ResourceMetadataCollectionFactoryInterface ;
25
+ use ApiPlatform \Metadata \DeleteOperationInterface ;
26
+ use ApiPlatform \Metadata \GraphQl \Operation ;
26
27
use ApiPlatform \Util \ClassInfoTrait ;
27
28
use ApiPlatform \Util \CloneTrait ;
28
29
use GraphQL \Type \Definition \ResolveInfo ;
@@ -47,10 +48,9 @@ final class ItemMutationResolverFactory implements ResolverFactoryInterface
47
48
private $ writeStage ;
48
49
private $ validateStage ;
49
50
private $ mutationResolverLocator ;
50
- private $ resourceMetadataCollectionFactory ;
51
51
private $ securityPostValidationStage ;
52
52
53
- public function __construct (ReadStageInterface $ readStage , SecurityStageInterface $ securityStage , SecurityPostDenormalizeStageInterface $ securityPostDenormalizeStage , SerializeStageInterface $ serializeStage , DeserializeStageInterface $ deserializeStage , WriteStageInterface $ writeStage , ValidateStageInterface $ validateStage , ContainerInterface $ mutationResolverLocator , ResourceMetadataCollectionFactoryInterface $ resourceMetadataCollectionFactory , SecurityPostValidationStageInterface $ securityPostValidationStage )
53
+ public function __construct (ReadStageInterface $ readStage , SecurityStageInterface $ securityStage , SecurityPostDenormalizeStageInterface $ securityPostDenormalizeStage , SerializeStageInterface $ serializeStage , DeserializeStageInterface $ deserializeStage , WriteStageInterface $ writeStage , ValidateStageInterface $ validateStage , ContainerInterface $ mutationResolverLocator , SecurityPostValidationStageInterface $ securityPostValidationStage )
54
54
{
55
55
$ this ->readStage = $ readStage ;
56
56
$ this ->securityStage = $ securityStage ;
@@ -60,46 +60,42 @@ public function __construct(ReadStageInterface $readStage, SecurityStageInterfac
60
60
$ this ->writeStage = $ writeStage ;
61
61
$ this ->validateStage = $ validateStage ;
62
62
$ this ->mutationResolverLocator = $ mutationResolverLocator ;
63
- $ this ->resourceMetadataCollectionFactory = $ resourceMetadataCollectionFactory ;
64
63
$ this ->securityPostValidationStage = $ securityPostValidationStage ;
65
64
}
66
65
67
- public function __invoke (?string $ resourceClass = null , ?string $ rootClass = null , ?string $ operationName = null ): callable
66
+ public function __invoke (?string $ resourceClass = null , ?string $ rootClass = null , ?Operation $ operation = null ): callable
68
67
{
69
- return function (?array $ source , array $ args , $ context , ResolveInfo $ info ) use ($ resourceClass , $ rootClass , $ operationName ) {
70
- if (null === $ resourceClass || null === $ operationName ) {
68
+ return function (?array $ source , array $ args , $ context , ResolveInfo $ info ) use ($ resourceClass , $ rootClass , $ operation ) {
69
+ if (null === $ resourceClass || null === $ operation ) {
71
70
return null ;
72
71
}
73
72
74
73
$ resolverContext = ['source ' => $ source , 'args ' => $ args , 'info ' => $ info , 'is_collection ' => false , 'is_mutation ' => true , 'is_subscription ' => false ];
75
74
76
- $ item = ($ this ->readStage )($ resourceClass , $ rootClass , $ operationName , $ resolverContext );
75
+ $ item = ($ this ->readStage )($ resourceClass , $ rootClass , $ operation , $ resolverContext );
77
76
if (null !== $ item && !\is_object ($ item )) {
78
77
throw new \LogicException ('Item from read stage should be a nullable object. ' );
79
78
}
80
- ($ this ->securityStage )($ resourceClass , $ operationName , $ resolverContext + [
79
+ ($ this ->securityStage )($ resourceClass , $ operation , $ resolverContext + [
81
80
'extra_variables ' => [
82
81
'object ' => $ item ,
83
82
],
84
83
]);
85
84
$ previousItem = $ this ->clone ($ item );
86
85
87
- if ('delete ' === $ operationName ) {
88
- ($ this ->securityPostDenormalizeStage )($ resourceClass , $ operationName , $ resolverContext + [
86
+ if ('delete ' === $ operation -> getName () || $ operation instanceof DeleteOperationInterface ) {
87
+ ($ this ->securityPostDenormalizeStage )($ resourceClass , $ operation , $ resolverContext + [
89
88
'extra_variables ' => [
90
89
'object ' => $ item ,
91
90
'previous_object ' => $ previousItem ,
92
91
],
93
92
]);
94
- $ item = ($ this ->writeStage )($ item , $ resourceClass , $ operationName , $ resolverContext );
93
+ $ item = ($ this ->writeStage )($ item , $ resourceClass , $ operation , $ resolverContext );
95
94
96
- return ($ this ->serializeStage )($ item , $ resourceClass , $ operationName , $ resolverContext );
95
+ return ($ this ->serializeStage )($ item , $ resourceClass , $ operation , $ resolverContext );
97
96
}
98
97
99
- $ item = ($ this ->deserializeStage )($ item , $ resourceClass , $ operationName , $ resolverContext );
100
-
101
- $ resourceMetadataCollection = $ this ->resourceMetadataCollectionFactory ->create ($ resourceClass );
102
- $ operation = $ resourceMetadataCollection ->getOperation ($ operationName );
98
+ $ item = ($ this ->deserializeStage )($ item , $ resourceClass , $ operation , $ resolverContext );
103
99
104
100
$ mutationResolverId = $ operation ->getResolver ();
105
101
if (null !== $ mutationResolverId ) {
@@ -111,27 +107,27 @@ public function __invoke(?string $resourceClass = null, ?string $rootClass = nul
111
107
}
112
108
}
113
109
114
- ($ this ->securityPostDenormalizeStage )($ resourceClass , $ operationName , $ resolverContext + [
110
+ ($ this ->securityPostDenormalizeStage )($ resourceClass , $ operation , $ resolverContext + [
115
111
'extra_variables ' => [
116
112
'object ' => $ item ,
117
113
'previous_object ' => $ previousItem ,
118
114
],
119
115
]);
120
116
121
117
if (null !== $ item ) {
122
- ($ this ->validateStage )($ item , $ resourceClass , $ operationName , $ resolverContext );
118
+ ($ this ->validateStage )($ item , $ resourceClass , $ operation , $ resolverContext );
123
119
124
- ($ this ->securityPostValidationStage )($ resourceClass , $ operationName , $ resolverContext + [
120
+ ($ this ->securityPostValidationStage )($ resourceClass , $ operation , $ resolverContext + [
125
121
'extra_variables ' => [
126
122
'object ' => $ item ,
127
123
'previous_object ' => $ previousItem ,
128
124
],
129
125
]);
130
126
131
- $ persistResult = ($ this ->writeStage )($ item , $ resourceClass , $ operationName , $ resolverContext );
127
+ $ persistResult = ($ this ->writeStage )($ item , $ resourceClass , $ operation , $ resolverContext );
132
128
}
133
129
134
- return ($ this ->serializeStage )($ persistResult ?? $ item , $ resourceClass , $ operationName , $ resolverContext );
130
+ return ($ this ->serializeStage )($ persistResult ?? $ item , $ resourceClass , $ operation , $ resolverContext );
135
131
};
136
132
}
137
133
}
0 commit comments