Skip to content

Commit

Permalink
Merge pull request #6395 from magento-l3/MC-38995-final
Browse files Browse the repository at this point in the history
[l3] MC-38995: Customer group price is not working in product query graphql
  • Loading branch information
dhorytskyi committed Dec 9, 2020
2 parents e00d2fc + 6f1b9b3 commit e6e5c73
Show file tree
Hide file tree
Showing 7 changed files with 323 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ public function resolve(
$product = $value['model'];
$product->unsetData('minimal_price');

if ($context) {
$customerGroupId = $context->getExtensionAttributes()->getCustomerGroupId();
if ($customerGroupId !== null) {
$product->setCustomerGroupId($customerGroupId);
}
}

$requestedFields = $info->getFieldSelection(10);
$returnArray = [];

Expand Down
40 changes: 40 additions & 0 deletions app/code/Magento/Customer/Model/Group/Resolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Customer\Model\Group;

use Magento\Customer\Model\ResourceModel\Group\Resolver as ResolverResource;

/**
* Lightweight service for getting current customer group based on customer id
*/
class Resolver
{
/**
* @var ResolverResource
*/
private $resolverResource;

/**
* @param ResolverResource $resolverResource
*/
public function __construct(ResolverResource $resolverResource)
{
$this->resolverResource = $resolverResource;
}

/**
* Return customer group id
*
* @param int $customerId
* @return int|null
*/
public function resolve(int $customerId) : ?int
{
return $this->resolverResource->resolve($customerId);
}
}
58 changes: 58 additions & 0 deletions app/code/Magento/Customer/Model/ResourceModel/Group/Resolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Customer\Model\ResourceModel\Group;

use Magento\Framework\App\ResourceConnection;

/**
* Resource model for customer group resolver service
*/
class Resolver
{
/**
* @var ResourceConnection
*/
private $resourceConnection;

/**
* @param ResourceConnection $resourceConnection
*/
public function __construct(
ResourceConnection $resourceConnection
) {
$this->resourceConnection = $resourceConnection;
}

/**
* Resolve customer group from db
*
* @param int $customerId
* @return int|null
*/
public function resolve(int $customerId) : ?int
{
$result = null;

$connection = $this->resourceConnection->getConnection();
$tableName = $this->resourceConnection->getTableName('customer_entity');

$query = $connection
->select()
->from(
['main_table' => $tableName],
['main_table.group_id']
)
->where('main_table.entity_id = ?', $customerId);
$groupId = $connection->fetchOne($query);
if ($groupId) {
$result = (int) $groupId;
}

return $result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\CustomerGraphQl\Model\Context;

use Magento\Authorization\Model\UserContextInterface;
use Magento\GraphQl\Model\Query\ContextParametersInterface;
use Magento\GraphQl\Model\Query\ContextParametersProcessorInterface;
use Magento\Customer\Model\Group;
use Magento\Customer\Model\Group\Resolver as CustomerGroupResolver;

/**
* @inheritdoc
*/
class AddCustomerGroupToContext implements ContextParametersProcessorInterface
{
/**
* @var CustomerGroupResolver
*/
private $customerGroupResolver;

/**
* @param CustomerGroupResolver $customerGroupResolver
*/
public function __construct(
CustomerGroupResolver $customerGroupResolver
) {
$this->customerGroupResolver = $customerGroupResolver;
}

/**
* @inheritdoc
*/
public function execute(ContextParametersInterface $contextParameters): ContextParametersInterface
{
$customerGroupId = null;
$extensionAttributes = $contextParameters->getExtensionAttributesData();
if ($contextParameters->getUserType() === UserContextInterface::USER_TYPE_GUEST) {
$customerGroupId = Group::NOT_LOGGED_IN_ID;
} elseif (!empty($extensionAttributes) && $extensionAttributes['is_customer'] === true) {
$customerGroupId = $this->customerGroupResolver->resolve((int) $contextParameters->getUserId());
}
if ($customerGroupId !== null) {
$contextParameters->addExtensionAttribute('customer_group_id', (int) $customerGroupId);
}
return $contextParameters;
}
}
1 change: 1 addition & 0 deletions app/code/Magento/CustomerGraphQl/etc/graphql/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<arguments>
<argument name="contextParametersProcessors" xsi:type="array">
<item name="add_user_info_to_context" xsi:type="object">Magento\CustomerGraphQl\Model\Context\AddUserInfoToContext</item>
<item name="add_customer_group_to_context" xsi:type="object">Magento\CustomerGraphQl\Model\Context\AddCustomerGroupToContext</item>
</argument>
</arguments>
</type>
Expand Down

0 comments on commit e6e5c73

Please sign in to comment.