Skip to content

Commit 777725e

Browse files
33383 GraphQL: Delete customer account
1 parent 12a08ee commit 777725e

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CustomerGraphQl\Model\Customer;
9+
10+
use Magento\Customer\Api\CustomerRepositoryInterface;
11+
use Magento\Framework\Exception\LocalizedException;
12+
use Magento\Framework\Exception\NoSuchEntityException;
13+
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
14+
use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
15+
use Magento\GraphQl\Model\Query\ContextInterface;
16+
17+
/**
18+
* Get customer
19+
*/
20+
class DeleteCustomer
21+
{
22+
/**
23+
* @var CustomerRepositoryInterface
24+
*/
25+
private $customerRepository;
26+
27+
/**
28+
* @param CustomerRepositoryInterface $customerRepository
29+
*/
30+
public function __construct(
31+
CustomerRepositoryInterface $customerRepository
32+
) {
33+
$this->customerRepository = $customerRepository;
34+
}
35+
36+
/**
37+
* Get customer
38+
*
39+
* @param ContextInterface $context
40+
* @return void
41+
* @throws GraphQlInputException
42+
* @throws GraphQlNoSuchEntityException
43+
*/
44+
public function execute(ContextInterface $context): void
45+
{
46+
$currentUserId = $context->getUserId();
47+
48+
try {
49+
$customer = $this->customerRepository->getById($currentUserId);
50+
// @codeCoverageIgnoreStart
51+
} catch (NoSuchEntityException $e) {
52+
throw new GraphQlNoSuchEntityException(
53+
__('Customer with id "%customer_id" does not exist.', ['customer_id' => $currentUserId]),
54+
$e
55+
);
56+
} catch (LocalizedException $e) {
57+
throw new GraphQlInputException(__($e->getMessage()));
58+
// @codeCoverageIgnoreEnd
59+
}
60+
61+
try {
62+
$this->customerRepository->delete($customer);
63+
} catch (LocalizedException $e) {
64+
throw new GraphQlInputException(__($e->getMessage()), $e);
65+
}
66+
}
67+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CustomerGraphQl\Model\Resolver;
9+
10+
use Magento\CustomerGraphQl\Model\Customer\DeleteCustomer as DeleteCustomerModel;
11+
use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
12+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
13+
use Magento\Framework\GraphQl\Config\Element\Field;
14+
use Magento\Framework\GraphQl\Query\ResolverInterface;
15+
use Magento\GraphQl\Model\Query\ContextInterface;
16+
17+
/**
18+
* Delete customer, used for GraphQL request processing.
19+
*/
20+
class DeleteCustomer implements ResolverInterface
21+
{
22+
/**
23+
* @var DeleteCustomerModel
24+
*/
25+
private $deleteCustomer;
26+
27+
/**
28+
* @param DeleteCustomerModel $deleteCustomer
29+
*/
30+
public function __construct(
31+
DeleteCustomerModel $deleteCustomer
32+
) {
33+
$this->deleteCustomer = $deleteCustomer;
34+
}
35+
36+
/**
37+
* @inheritdoc
38+
*/
39+
public function resolve(
40+
Field $field,
41+
$context,
42+
ResolveInfo $info,
43+
array $value = null,
44+
array $args = null
45+
) {
46+
/** @var ContextInterface $context */
47+
if (false === $context->getExtensionAttributes()->getIsCustomer()) {
48+
throw new GraphQlAuthorizationException(__('The current customer isn\'t authorized.'));
49+
}
50+
51+
$this->deleteCustomer->execute($context);
52+
return true;
53+
}
54+
}

app/code/Magento/CustomerGraphQl/etc/schema.graphqls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type Mutation {
2121
createCustomerV2 (input: CustomerCreateInput!): CustomerOutput @resolver(class: "\\Magento\\CustomerGraphQl\\Model\\Resolver\\CreateCustomer") @doc(description:"Create customer account")
2222
updateCustomer (input: CustomerInput!): CustomerOutput @resolver(class: "\\Magento\\CustomerGraphQl\\Model\\Resolver\\UpdateCustomer") @doc(description:"Deprecated. Use UpdateCustomerV2 instead.")
2323
updateCustomerV2 (input: CustomerUpdateInput!): CustomerOutput @resolver(class: "\\Magento\\CustomerGraphQl\\Model\\Resolver\\UpdateCustomer") @doc(description:"Update the customer's personal information")
24+
deleteCustomer: Boolean @resolver(class: "\\Magento\\CustomerGraphQl\\Model\\Resolver\\DeleteCustomer") @doc(description:"Delete customer account")
2425
revokeCustomerToken: RevokeCustomerTokenOutput @resolver(class: "\\Magento\\CustomerGraphQl\\Model\\Resolver\\RevokeCustomerToken") @doc(description:"Revoke the customer token")
2526
createCustomerAddress(input: CustomerAddressInput!): CustomerAddress @resolver(class: "Magento\\CustomerGraphQl\\Model\\Resolver\\CreateCustomerAddress") @doc(description: "Create customer address")
2627
updateCustomerAddress(id: Int!, input: CustomerAddressInput): CustomerAddress @resolver(class: "Magento\\CustomerGraphQl\\Model\\Resolver\\UpdateCustomerAddress") @doc(description: "Update customer address")

0 commit comments

Comments
 (0)