Skip to content

Commit ab66cdf

Browse files
committed
MC-20636: Order Details : Order Details by Order Number
- refactor varios pieces
1 parent d128084 commit ab66cdf

File tree

9 files changed

+106
-201
lines changed

9 files changed

+106
-201
lines changed

app/code/Magento/SalesGraphQl/Model/InvoiceItemInterfaceTypeResolverComposite.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
class InvoiceItemInterfaceTypeResolverComposite implements TypeResolverInterface
1717
{
1818
/**
19-
* TypeResolverInterface[]
19+
* @var TypeResolverInterface[]
2020
*/
21-
private $productTypeNameResolvers = [];
21+
private $invoiceItemTypeResolvers = [];
2222

2323
/**
24-
* @param TypeResolverInterface[] $productTypeNameResolvers
24+
* @param TypeResolverInterface[] $invoiceItemTypeResolvers
2525
*/
26-
public function __construct(array $productTypeNameResolvers = [])
26+
public function __construct(array $invoiceItemTypeResolvers = [])
2727
{
28-
$this->productTypeNameResolvers = $productTypeNameResolvers;
28+
$this->invoiceItemTypeResolvers = $invoiceItemTypeResolvers;
2929
}
3030

3131
/**
@@ -39,13 +39,13 @@ public function resolveType(array $data): string
3939
{
4040
$resolvedType = null;
4141

42-
foreach ($this->productTypeNameResolvers as $productTypeNameResolver) {
42+
foreach ($this->invoiceItemTypeResolvers as $invoiceItemTypeResolver) {
4343
if (!isset($data['product_type'])) {
4444
throw new GraphQlInputException(
4545
__('Missing key %1 in sales item data', ['product_type'])
4646
);
4747
}
48-
$resolvedType = $productTypeNameResolver->resolveType($data);
48+
$resolvedType = $invoiceItemTypeResolver->resolveType($data);
4949
if (!empty($resolvedType)) {
5050
return $resolvedType;
5151
}

app/code/Magento/SalesGraphQl/Model/OrderItemInterfaceTypeResolverComposite.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ class OrderItemInterfaceTypeResolverComposite implements TypeResolverInterface
1818
/**
1919
* TypeResolverInterface[]
2020
*/
21-
private $productTypeNameResolvers = [];
21+
private $orderItemTypeResolvers = [];
2222

2323
/**
24-
* @param TypeResolverInterface[] $productTypeNameResolvers
24+
* @param TypeResolverInterface[] $orderItemTypeResolvers
2525
*/
26-
public function __construct(array $productTypeNameResolvers = [])
26+
public function __construct(array $orderItemTypeResolvers = [])
2727
{
28-
$this->productTypeNameResolvers = $productTypeNameResolvers;
28+
$this->orderItemTypeResolvers = $orderItemTypeResolvers;
2929
}
3030

3131
/**
@@ -39,20 +39,20 @@ public function resolveType(array $data) : string
3939
{
4040
$resolvedType = null;
4141

42-
foreach ($this->productTypeNameResolvers as $productTypeNameResolver) {
42+
foreach ($this->orderItemTypeResolvers as $orderItemTypeResolver) {
4343
if (!isset($data['product_type'])) {
4444
throw new GraphQlInputException(
4545
__('Missing key %1 in sales item data', ['product_type'])
4646
);
4747
}
48-
$resolvedType = $productTypeNameResolver->resolveType($data);
48+
$resolvedType = $orderItemTypeResolver->resolveType($data);
4949
if (!empty($resolvedType)) {
5050
return $resolvedType;
5151
}
5252
}
5353

5454
throw new GraphQlInputException(
55-
__('Concrete type for %1 not implemented', ['InvoiceItemInterface'])
55+
__('Concrete type for %1 not implemented', ['OrderItemInterface'])
5656
);
5757
}
5858
}

app/code/Magento/SalesGraphQl/Model/Resolver/CustomerOrders.php

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@
77

88
namespace Magento\SalesGraphQl\Model\Resolver;
99

10+
use Magento\Framework\Api\SearchCriteriaBuilder;
1011
use Magento\Framework\Exception\InputException;
1112
use Magento\Framework\Exception\LocalizedException;
1213
use Magento\Framework\GraphQl\Config\Element\Field;
1314
use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
1415
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
1516
use Magento\Framework\GraphQl\Query\ResolverInterface;
1617
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
17-
use Magento\GraphQl\Model\Query\ContextInterface;
1818
use Magento\Sales\Api\Data\OrderInterface;
19-
use Magento\SalesGraphQl\Model\Resolver\CustomerOrders\Query\SearchQuery;
19+
use Magento\Sales\Api\OrderRepositoryInterface;
20+
use Magento\SalesGraphQl\Model\Resolver\CustomerOrders\Query\OrderFilter;
2021
use Magento\Store\Api\Data\StoreInterface;
2122

2223
/**
@@ -25,17 +26,33 @@
2526
class CustomerOrders implements ResolverInterface
2627
{
2728
/**
28-
* @var SearchQuery
29+
* @var SearchCriteriaBuilder
2930
*/
30-
private $searchQuery;
31+
private $searchCriteriaBuilder;
3132

3233
/**
33-
* @param SearchQuery $searchQuery
34+
* @var OrderRepositoryInterface
35+
*/
36+
private $orderRepository;
37+
38+
/**
39+
* @var OrderFilter
40+
*/
41+
private $orderFilter;
42+
43+
/**
44+
* @param OrderRepositoryInterface $orderRepository
45+
* @param SearchCriteriaBuilder $searchCriteriaBuilder
46+
* @param OrderFilter $orderFilter
3447
*/
3548
public function __construct(
36-
SearchQuery $searchQuery
49+
OrderRepositoryInterface $orderRepository,
50+
SearchCriteriaBuilder $searchCriteriaBuilder,
51+
OrderFilter $orderFilter
3752
) {
38-
$this->searchQuery = $searchQuery;
53+
$this->orderRepository = $orderRepository;
54+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
55+
$this->orderFilter = $orderFilter;
3956
}
4057

4158
/**
@@ -48,7 +65,6 @@ public function resolve(
4865
array $value = null,
4966
array $args = null
5067
) {
51-
/** @var ContextInterface $context */
5268
if (false === $context->getExtensionAttributes()->getIsCustomer()) {
5369
throw new GraphQlAuthorizationException(__('The current customer isn\'t authorized.'));
5470
}
@@ -62,13 +78,31 @@ public function resolve(
6278
/** @var StoreInterface $store */
6379
$store = $context->getExtensionAttributes()->getStore();
6480
try {
65-
$searchResultDto = $this->searchQuery->getResult($args, $userId, $store);
81+
$filterGroups = $this->orderFilter->createFilterGroups($args, $userId, (int)$store->getId());
82+
$this->searchCriteriaBuilder->setFilterGroups($filterGroups);
83+
if (isset($args['currentPage'])) {
84+
$this->searchCriteriaBuilder->setCurrentPage($args['currentPage']);
85+
}
86+
if (isset($args['pageSize'])) {
87+
$this->searchCriteriaBuilder->setPageSize($args['pageSize']);
88+
}
89+
90+
$searchCriteria = $this->searchCriteriaBuilder->create();
91+
$searchResult = $this->orderRepository->getList($searchCriteria);
92+
$orderArray = [];
93+
/** @var OrderInterface $order */
94+
foreach ($searchResult->getItems() as $key => $order) {
95+
$orderArray[$key] = $order->getData();
96+
$orderArray[$key]['model'] = $order;
97+
}
98+
99+
$maxPages = (int)ceil($searchResult->getTotalCount() / $searchResult->getPageSize());
66100
} catch (InputException $e) {
67101
throw new GraphQlInputException(__($e->getMessage()));
68102
}
69103

70104
$orders = [];
71-
foreach (($searchResultDto->getItems() ?? []) as $order) {
105+
foreach ($orderArray as $order) {
72106
if (!($order['model'] ?? null instanceof OrderInterface)) {
73107
throw new LocalizedException(__('"model" value should be specified'));
74108
}
@@ -89,12 +123,12 @@ public function resolve(
89123
}
90124

91125
return [
92-
'total_count' => $searchResultDto->getTotalCount(),
126+
'total_count' => $searchResult->getTotalCount(),
93127
'items' => $orders,
94128
'page_info' => [
95-
'page_size' => $searchResultDto->getPageSize(),
96-
'current_page' => $searchResultDto->getCurrentPage(),
97-
'total_pages' => $searchResultDto->getTotalPages(),
129+
'page_size' => $searchResult->getPageSize(),
130+
'current_page' => $searchResult->getCurPage(),
131+
'total_pages' => $maxPages,
98132
]
99133
];
100134
}

app/code/Magento/SalesGraphQl/Model/Resolver/CustomerOrders/Query/OrderFilter.php

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,9 @@
99

1010
use Magento\Framework\Api\FilterBuilder;
1111
use Magento\Framework\Api\Search\FilterGroupBuilder;
12-
use Magento\Sales\Model\ResourceModel\Order\Collection;
1312
use Magento\Framework\App\Config\ScopeConfigInterface;
1413
use Magento\Framework\Exception\InputException;
15-
use Magento\Store\Api\Data\StoreInterface;
16-
use Magento\Store\Model\ScopeInterface;
17-
use Magento\Framework\Api\SearchCriteriaBuilder;
18-
use Magento\Framework\Api\Filter;
14+
use Magento\Framework\Api\Search\FilterGroup;
1915

2016
/**
2117
* Order filter allows to filter collection using 'increment_id' as order number, from the search criteria.
@@ -65,27 +61,26 @@ public function __construct(
6561
}
6662

6763
/**
68-
* Filter for filtering the requested categories id's based on url_key, ids, name in the result.
64+
* Create filter for filtering the requested categories id's based on url_key, ids, name in the result.
6965
*
70-
* @param int $userId
7166
* @param array $args
72-
* @param StoreInterface $store
73-
* @param SearchCriteriaBuilder $searchCriteriaBuilder
67+
* @param int $userId
68+
* @param int $storeId
69+
* @return FilterGroup[]
7470
*/
75-
public function applyFilter(
76-
int $userId,
71+
public function createFilterGroups(
7772
array $args,
78-
StoreInterface $store,
79-
SearchCriteriaBuilder $searchCriteriaBuilder
80-
): void {
73+
int $userId,
74+
int $storeId
75+
): array {
8176
$filterGroups = [];
8277
$this->filterGroupBuilder->setFilters(
8378
[$this->filterBuilder->setField('customer_id')->setValue($userId)->setConditionType('eq')->create()]
8479
);
8580
$filterGroups[] = $this->filterGroupBuilder->create();
8681

8782
$this->filterGroupBuilder->setFilters(
88-
[$this->filterBuilder->setField('store_id')->setValue($store->getId())->setConditionType('eq')->create()]
83+
[$this->filterBuilder->setField('store_id')->setValue($storeId)->setConditionType('eq')->create()]
8984
);
9085
$filterGroups[] = $this->filterGroupBuilder->create();
9186

@@ -117,6 +112,6 @@ public function applyFilter(
117112
$this->filterGroupBuilder->setFilters($filters);
118113
$filterGroups[] = $this->filterGroupBuilder->create();
119114
}
120-
$searchCriteriaBuilder->setFilterGroups($filterGroups);
115+
return $filterGroups;
121116
}
122117
}

app/code/Magento/SalesGraphQl/Model/Resolver/CustomerOrders/Query/SearchQuery.php

Lines changed: 0 additions & 110 deletions
This file was deleted.

0 commit comments

Comments
 (0)