Skip to content

Commit 94fd3a1

Browse files
author
Oleksandr Iegorov
committed
MC-38995: Customer group price is not working in product query graphql
1 parent 8ecb615 commit 94fd3a1

File tree

3 files changed

+105
-12
lines changed

3 files changed

+105
-12
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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\Customer\Model\Group;
9+
10+
use Magento\Customer\Model\ResourceModel\Group\Resolver as ResolverResource;
11+
12+
/**
13+
* Lightweight service for getting current customer group based on customer id
14+
*/
15+
class Resolver
16+
{
17+
/**
18+
* @var ResolverResource
19+
*/
20+
private $resolverResource;
21+
22+
/**
23+
* @param ResolverResource $resolverResource
24+
*/
25+
public function __construct(ResolverResource $resolverResource)
26+
{
27+
$this->resolverResource = $resolverResource;
28+
}
29+
30+
/**
31+
* Return customer group id
32+
*
33+
* @param int $customerId
34+
* @return int|null
35+
*/
36+
public function resolve(int $customerId) : ?int
37+
{
38+
return $this->resolverResource->resolve($customerId);
39+
}
40+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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\Customer\Model\ResourceModel\Group;
9+
10+
use Magento\Framework\App\ResourceConnection;
11+
12+
/**
13+
* Resource model for customer group resolver service
14+
*/
15+
class Resolver
16+
{
17+
/**
18+
* @var ResourceConnection
19+
*/
20+
private $resourceConnection;
21+
22+
/**
23+
* @param ResourceConnection $resourceConnection
24+
*/
25+
public function __construct(
26+
ResourceConnection $resourceConnection
27+
) {
28+
$this->resourceConnection = $resourceConnection;
29+
}
30+
31+
/**
32+
* Resolve customer group from db
33+
*
34+
* @param int $customerId
35+
* @return int|null
36+
*/
37+
public function resolve(int $customerId) : ?int
38+
{
39+
$result = null;
40+
41+
$connection = $this->resourceConnection->getConnection();
42+
$tableName = $this->resourceConnection->getTableName('customer_entity');
43+
44+
$query = $connection
45+
->select()
46+
->from(
47+
['main_table' => $tableName],
48+
['main_table.group_id']
49+
)
50+
->where('main_table.entity_id = ?', $customerId);
51+
$groupId = $connection->fetchOne($query);
52+
if ($groupId) {
53+
$result = (int) $groupId;
54+
}
55+
56+
return $result;
57+
}
58+
}

app/code/Magento/CustomerGraphQl/Model/Context/AddCustomerGroupToContext.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use Magento\GraphQl\Model\Query\ContextParametersInterface;
1212
use Magento\GraphQl\Model\Query\ContextParametersProcessorInterface;
1313
use Magento\Customer\Model\Group;
14-
use Magento\Customer\Api\CustomerRepositoryInterface;
14+
use Magento\Customer\Model\Group\Resolver as CustomerGroupResolver;
1515
use Magento\Framework\Exception\LocalizedException;
1616

1717
/**
@@ -20,17 +20,17 @@
2020
class AddCustomerGroupToContext implements ContextParametersProcessorInterface
2121
{
2222
/**
23-
* @var CustomerRepositoryInterface
23+
* @var CustomerGroupResolver
2424
*/
25-
private $customerRepository;
25+
private $customerGroupResolver;
2626

2727
/**
28-
* @param CustomerRepositoryInterface $customerRepository
28+
* @param CustomerGroupResolver $customerGroupResolver
2929
*/
3030
public function __construct(
31-
CustomerRepositoryInterface $customerRepository
31+
CustomerGroupResolver $customerGroupResolver
3232
) {
33-
$this->customerRepository = $customerRepository;
33+
$this->customerGroupResolver = $customerGroupResolver;
3434
}
3535

3636
/**
@@ -43,12 +43,7 @@ public function execute(ContextParametersInterface $contextParameters): ContextP
4343
if ($contextParameters->getUserType() === UserContextInterface::USER_TYPE_GUEST) {
4444
$customerGroupId = Group::NOT_LOGGED_IN_ID;
4545
} elseif (!empty($extensionAttributes) && $extensionAttributes['is_customer'] === true) {
46-
try {
47-
$customer = $this->customerRepository->getById($contextParameters->getUserId());
48-
$customerGroupId = (int) $customer->getGroupId();
49-
} catch (LocalizedException $e) {
50-
$customerGroupId = Group::NOT_LOGGED_IN_ID;
51-
}
46+
$customerGroupId = $this->customerGroupResolver->resolve((int) $contextParameters->getUserId());
5247
}
5348
if ($customerGroupId !== null) {
5449
$contextParameters->addExtensionAttribute('customer_group_id', (int) $customerGroupId);

0 commit comments

Comments
 (0)