Skip to content

Commit 47bbf50

Browse files
committed
magento-engcom/bulk-api#4 Support for Async operations in WebAPI
- Fixed static tests
1 parent c9873f4 commit 47bbf50

File tree

2 files changed

+33
-146
lines changed

2 files changed

+33
-146
lines changed

app/code/Magento/AsynchronousOperations/Model/BulkOperationsStatus.php

Lines changed: 20 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -6,51 +6,20 @@
66

77
namespace Magento\AsynchronousOperations\Model;
88

9-
use Magento\AsynchronousOperations\Model\ResourceModel\Bulk\CollectionFactory as BulkCollectionFactory;
10-
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory as OperationCollectionFactory;
11-
use Magento\AsynchronousOperations\Api\Data\OperationInterface;
12-
use Magento\AsynchronousOperations\Api\Data\BulkSummaryInterface;
13-
use Magento\Framework\App\ResourceConnection;
14-
use Magento\AsynchronousOperations\Model\BulkStatus\CalculatedStatusSql;
15-
use Magento\Framework\EntityManager\MetadataPool;
169
use Magento\Framework\Exception\NoSuchEntityException;
1710
use Magento\Framework\EntityManager\EntityManager;
1811
use Magento\AsynchronousOperations\Api\Data\BulkStatusInterfaceFactory as BulkStatusShortFactory;
1912
use Magento\AsynchronousOperations\Api\Data\DetailedBulkStatusInterfaceFactory as BulkStatusDetailedFactory;
2013
use Magento\AsynchronousOperations\Api\Data\OperationDetailsInterfaceFactory;
2114
use Magento\AsynchronousOperations\Api\BulkStatusInterface;
15+
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory;
2216

2317
/**
2418
* Class BulkStatus
2519
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2620
*/
2721
class BulkOperationsStatus implements BulkStatusInterface
2822
{
29-
/**
30-
* @var \Magento\AsynchronousOperations\Api\Data\BulkSummaryInterfaceFactory
31-
*/
32-
private $bulkCollectionFactory;
33-
34-
/**
35-
* @var \Magento\AsynchronousOperations\Api\Data\OperationInterfaceFactory
36-
*/
37-
private $operationCollectionFactory;
38-
39-
/**
40-
* @var ResourceConnection
41-
*/
42-
private $resourceConnection;
43-
44-
/**
45-
* @var CalculatedStatusSql
46-
*/
47-
private $calculatedStatusSql;
48-
49-
/**
50-
* @var MetadataPool
51-
*/
52-
private $metadataPool;
53-
5423
/**
5524
* @var EntityManager
5625
*/
@@ -66,33 +35,34 @@ class BulkOperationsStatus implements BulkStatusInterface
6635
*/
6736
private $bulkShortFactory;
6837

38+
/**
39+
* @var BulkStatus
40+
*/
41+
private $bulkStatus;
42+
43+
/**
44+
* @var \Magento\AsynchronousOperations\Api\Data\OperationInterfaceFactory
45+
*/
46+
private $operationCollectionFactory;
47+
6948
/**
7049
* Init dependencies.
7150
*
72-
* @param \Magento\AsynchronousOperations\Model\ResourceModel\Bulk\CollectionFactory $bulkCollection
73-
* @param \Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory $operationCollection
74-
* @param \Magento\Framework\App\ResourceConnection $resourceConnection
75-
* @param \Magento\AsynchronousOperations\Model\BulkStatus\CalculatedStatusSql $calculatedStatusSql
76-
* @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
51+
* @param BulkStatus $bulkStatus
52+
* @param CollectionFactory $operationCollection
7753
* @param BulkStatusDetailedFactory $bulkDetailedFactory
7854
* @param BulkStatusShortFactory $bulkShortFactory
7955
* @param \Magento\Framework\EntityManager\EntityManager $entityManager
8056
*/
8157
public function __construct(
82-
BulkCollectionFactory $bulkCollection,
83-
OperationCollectionFactory $operationCollection,
84-
ResourceConnection $resourceConnection,
85-
CalculatedStatusSql $calculatedStatusSql,
86-
MetadataPool $metadataPool,
58+
BulkStatus $bulkStatus,
59+
CollectionFactory $operationCollection,
8760
BulkStatusDetailedFactory $bulkDetailedFactory,
8861
BulkStatusShortFactory $bulkShortFactory,
8962
EntityManager $entityManager
9063
) {
9164
$this->operationCollectionFactory = $operationCollection;
92-
$this->bulkCollectionFactory = $bulkCollection;
93-
$this->resourceConnection = $resourceConnection;
94-
$this->calculatedStatusSql = $calculatedStatusSql;
95-
$this->metadataPool = $metadataPool;
65+
$this->bulkStatus = $bulkStatus;
9666
$this->bulkDetailedFactory = $bulkDetailedFactory;
9767
$this->bulkShortFactory = $bulkShortFactory;
9868
$this->entityManager = $entityManager;
@@ -103,127 +73,31 @@ public function __construct(
10373
*/
10474
public function getFailedOperationsByBulkId($bulkUuid, $failureType = null)
10575
{
106-
$failureCodes = $failureType
107-
? [$failureType]
108-
: [
109-
OperationInterface::STATUS_TYPE_RETRIABLY_FAILED,
110-
OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED,
111-
];
112-
$operations = $this->operationCollectionFactory->create()
113-
->addFieldToFilter('bulk_uuid', $bulkUuid)
114-
->addFieldToFilter('status', $failureCodes)
115-
->getItems();
116-
117-
return $operations;
76+
return $this->bulkStatus->getFailedOperationsByBulkId($bulkUuid, $failureType);
11877
}
11978

12079
/**
12180
* @inheritDoc
12281
*/
12382
public function getOperationsCountByBulkIdAndStatus($bulkUuid, $status)
12483
{
125-
126-
/** @var \Magento\AsynchronousOperations\Model\ResourceModel\Operation\Collection $collection */
127-
$collection = $this->operationCollectionFactory->create();
128-
129-
return $collection->addFieldToFilter('bulk_uuid', $bulkUuid)
130-
->addFieldToFilter('status', $status)
131-
->getSize();
84+
return $this->bulkStatus->getOperationsCountByBulkIdAndStatus($bulkUuid, $status);
13285
}
13386

13487
/**
13588
* @inheritDoc
13689
*/
13790
public function getBulksByUser($userId)
13891
{
139-
/** @var ResourceModel\Bulk\Collection $collection */
140-
$collection = $this->bulkCollectionFactory->create();
141-
$operationTableName = $this->resourceConnection->getTableName('magento_operation');
142-
$statusesArray = [
143-
OperationInterface::STATUS_TYPE_RETRIABLY_FAILED,
144-
OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED,
145-
BulkSummaryInterface::NOT_STARTED,
146-
OperationInterface::STATUS_TYPE_OPEN,
147-
OperationInterface::STATUS_TYPE_COMPLETE,
148-
];
149-
$select = $collection->getSelect();
150-
$select->columns(['status' => $this->calculatedStatusSql->get($operationTableName)])
151-
->order(
152-
new \Zend_Db_Expr(
153-
'FIELD(status, ' . implode(',', $statusesArray) . ')'
154-
)
155-
);
156-
$collection->addFieldToFilter('user_id', $userId)
157-
->addOrder('start_time');
158-
159-
return $collection->getItems();
92+
return $this->bulkStatus->getBulksByUser($userId);
16093
}
16194

16295
/**
16396
* @inheritDoc
16497
*/
16598
public function getBulkStatus($bulkUuid)
16699
{
167-
/**
168-
* Number of operations that has been processed (i.e. operations with any status but 'open')
169-
*/
170-
$allProcessedOperationsQty = (int)$this->operationCollectionFactory->create()
171-
->addFieldToFilter('bulk_uuid', $bulkUuid)
172-
->getSize();
173-
174-
if ($allProcessedOperationsQty == 0) {
175-
return BulkSummaryInterface::NOT_STARTED;
176-
}
177-
178-
/**
179-
* Total number of operations that has been scheduled within the given bulk
180-
*/
181-
$allOperationsQty = $this->getOperationCount($bulkUuid);
182-
183-
/**
184-
* Number of operations that has not been started yet (i.e. operations with status 'open')
185-
*/
186-
$allOpenOperationsQty = $allOperationsQty - $allProcessedOperationsQty;
187-
188-
/**
189-
* Number of operations that has been completed successfully
190-
*/
191-
$allCompleteOperationsQty = $this->operationCollectionFactory
192-
->create()
193-
->addFieldToFilter('bulk_uuid', $bulkUuid)
194-
->addFieldToFilter(
195-
'status',
196-
OperationInterface::STATUS_TYPE_COMPLETE
197-
)
198-
->getSize();
199-
200-
if ($allCompleteOperationsQty == $allOperationsQty) {
201-
return BulkSummaryInterface::FINISHED_SUCCESSFULLY;
202-
}
203-
204-
if ($allOpenOperationsQty > 0 && $allOpenOperationsQty !== $allOperationsQty) {
205-
return BulkSummaryInterface::IN_PROGRESS;
206-
}
207-
208-
return BulkSummaryInterface::FINISHED_WITH_FAILURE;
209-
}
210-
211-
/**
212-
* Get total number of operations that has been scheduled within the given bulk.
213-
*
214-
* @param string $bulkUuid
215-
* @return int
216-
*/
217-
private function getOperationCount($bulkUuid)
218-
{
219-
$metadata = $this->metadataPool->getMetadata(BulkSummaryInterface::class);
220-
$connection = $this->resourceConnection->getConnectionByName($metadata->getEntityConnectionName());
221-
222-
return (int)$connection->fetchOne(
223-
$connection->select()
224-
->from($metadata->getEntityTable(), 'operation_count')
225-
->where('uuid = ?', $bulkUuid)
226-
);
100+
return $this->bulkStatus->getBulkStatus($bulkUuid);
227101
}
228102

229103
/**

dev/tests/integration/testsuite/Magento/Webapi/Controller/Rest/SchemaRequestProcessorTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ public function testSchemaRequest($path)
2525
$this->assertRegExp('/200 Success/', $schema);
2626
}
2727

28+
/**
29+
* Response getter
30+
*
31+
* @return \Magento\Framework\App\ResponseInterface
32+
*/
33+
public function getResponse()
34+
{
35+
if (!$this->_response) {
36+
$this->_response = $this->_objectManager->get(\Magento\Framework\Webapi\Rest\Response::class);
37+
}
38+
return $this->_response;
39+
}
40+
2841
/**
2942
* @return array
3043
*/

0 commit comments

Comments
 (0)