api-platform / api-platform/core

Resolvers are not run on the default deletion mutation

Open
#5,425 7 comments 0 reactions 0 assignees View on GitHub
GraphQL State
Dominant language
PHP
Stars
2.6k
Forks
980
Avg merge
2d 2h
Merged PRs (30d)
51

Description

**API Platform version(s) affected**: 3.1.3

**Description**
With GraphQL when we try to add a resolver on the delete mutation it doesn't work. It is not executed.

**How to reproduce**
```php
#[ApiResource(
graphQlOperations: [
new Mutation(
resolver: CreateResolver::class,
args: [
'test' => [
'type' => 'String!',
]
],
name: 'create'
),
new DeleteMutation(
resolver: DeleteResolver::class,
args: [
'id' => [
'type' => 'ID!',
],
],
name: 'delete',
)
]
)]

```

**Possible Solution**

In src/GraphQl/Resolver/Factory/ItemMutationResolverFactory.php If the operation is "delete" the resolver are not executed because the resolver are executed after.
```php
if ('delete' === $operation->getName() || $operation instanceof DeleteOperationInterface) {
($this->securityPostDenormalizeStage)($resourceClass, $operation, $resolverContext + [
'extra_variables' => [
'object' => $item,
'previous_object' => $previousItem,
],
]);
$item = ($this->writeStage)($item, $resourceClass, $operation, $resolverContext);

return ($this->serializeStage)($item, $resourceClass, $operation, $resolverContext);
}

$item = ($this->deserializeStage)($item, $resourceClass, $operation, $resolverContext);

$mutationResolverId = $operation->getResolver();
if (null !== $mutationResolverId) {
/** @var MutationResolverInterface $mutationResolver */
$mutationResolver = $this->mutationResolverLocator->get($mutationResolverId);
$item = $mutationResolver($item, $resolverContext);
if (null !== $item && $resourceClass !== $itemClass = $this->getObjectClass($item)) {
throw new \LogicException(sprintf('Custom mutation resolver "%s" has to return an item of class %s but returned an item of class %s.', $mutationResolverId, $operation->getShortName(), (new \ReflectionClass($itemClass))->getShortName()));
}
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.