Skip to content

Commit f9d96e5

Browse files
committedOct 4, 2024·
fix(metadata): graphql can be disabled but with an existing operation
1 parent df701da commit f9d96e5

File tree

6 files changed

+14
-7
lines changed

6 files changed

+14
-7
lines changed
 

‎src/Laravel/ApiPlatformProvider.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,8 @@ public function register(): void
366366
$config->get('api-platform.graphql.enabled'),
367367
),
368368
)
369-
)
369+
),
370+
$config->get('api-platform.graphql.enabled')
370371
)
371372
)
372373
)

‎src/Laravel/Eloquent/Metadata/Factory/Resource/EloquentResourceCollectionMetadataFactory.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ public function create(string $resourceClass): ResourceMetadataCollection
103103
$resourceMetadataCollection[$i] = $resourceMetadata->withOperations($operations);
104104

105105
$graphQlOperations = $resourceMetadata->getGraphQlOperations();
106-
107106
foreach ($graphQlOperations ?? [] as $operationName => $graphQlOperation) {
108107
if (!$graphQlOperation->getPolicy() && ($policy = Gate::getPolicyFor($model))) {
109108
if (($policyMethod = self::POLICY_METHODS[$graphQlOperation::class] ?? null) && method_exists($policy, $policyMethod)) {
@@ -122,7 +121,9 @@ public function create(string $resourceClass): ResourceMetadataCollection
122121
$graphQlOperations[$operationName] = $graphQlOperation;
123122
}
124123

125-
$resourceMetadata = $resourceMetadata->withGraphQlOperations($graphQlOperations);
124+
if ($graphQlOperations) {
125+
$resourceMetadata = $resourceMetadata->withGraphQlOperations($graphQlOperations);
126+
}
126127

127128
$resourceMetadataCollection[$i] = $resourceMetadata;
128129
}

‎src/Metadata/Resource/Factory/LinkResourceMetadataCollectionFactory.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*/
2424
final class LinkResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface
2525
{
26-
public function __construct(private readonly LinkFactoryInterface $linkFactory, private readonly ?ResourceMetadataCollectionFactoryInterface $decorated = null)
26+
public function __construct(private readonly LinkFactoryInterface $linkFactory, private readonly ?ResourceMetadataCollectionFactoryInterface $decorated = null, private bool $graphQlEnabled = false)
2727
{
2828
}
2929

@@ -37,6 +37,10 @@ public function create(string $resourceClass): ResourceMetadataCollection
3737
$resourceMetadataCollection = $this->decorated->create($resourceClass);
3838
}
3939

40+
if (!$this->graphQlEnabled) {
41+
return $resourceMetadataCollection;
42+
}
43+
4044
foreach ($resourceMetadataCollection as $i => $resource) {
4145
$graphQlOperations = [];
4246
foreach ($resource->getGraphQlOperations() ?? [] as $graphQlOperation) {

‎src/Metadata/Resource/Factory/MetadataCollectionFactoryTrait.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,11 @@ private function buildResourceOperations(array $metadataCollection, string $reso
141141
$resources[$index] = $resource = $resource->withOperations(new Operations($operations)); // @phpstan-ignore-line
142142
}
143143

144-
$graphQlOperations = $resource->getGraphQlOperations();
145144
if (!$this->graphQlEnabled) {
146145
continue;
147146
}
148147

148+
$graphQlOperations = $resource->getGraphQlOperations();
149149
if (null === $graphQlOperations) {
150150
if (!$hasApiResource) {
151151
$resources[$index] = $resources[$index]->withGraphQlOperations([]);

‎src/Metadata/Tests/Resource/Factory/LinkResourceMetadataCollectionFactoryTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class: AttributeResource::class,
7575
]),
7676
);
7777

78-
$linkResourceMetadataCollectionFactory = new LinkResourceMetadataCollectionFactory($linkFactory, $resourceCollectionMetadataFactoryProphecy->reveal());
78+
$linkResourceMetadataCollectionFactory = new LinkResourceMetadataCollectionFactory($linkFactory, $resourceCollectionMetadataFactoryProphecy->reveal(), true);
7979

8080
$this->assertEquals(
8181
new ResourceMetadataCollection(AttributeResource::class, [
@@ -123,7 +123,7 @@ class: AttributeResource::class,
123123
]),
124124
);
125125

126-
$linkResourceMetadataCollectionFactory = new LinkResourceMetadataCollectionFactory($linkFactory, $resourceCollectionMetadataFactoryProphecy->reveal());
126+
$linkResourceMetadataCollectionFactory = new LinkResourceMetadataCollectionFactory($linkFactory, $resourceCollectionMetadataFactoryProphecy->reveal(), true);
127127

128128
$this->assertEquals(
129129
new ResourceMetadataCollection(AttributeResource::class, [

‎src/Symfony/Bundle/Resources/config/metadata/resource.xml

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<service id="api_platform.metadata.resource.metadata_collection_factory.link" class="ApiPlatform\Metadata\Resource\Factory\LinkResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="500" public="false">
5353
<argument type="service" id="api_platform.metadata.resource.link_factory" />
5454
<argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.link.inner" />
55+
<argument>%api_platform.graphql.enabled%</argument>
5556
</service>
5657

5758
<!-- must run after uri template, do not change uriTemplate neither the operation names in < 500 priorities -->

0 commit comments

Comments
 (0)
Please sign in to comment.