Skip to content

Commit bbb99e5

Browse files
committed
magento/adobe-stock-integration#1724: Support batches processing for synchronization queue messages - implemented media content sychronization
1 parent 7bacf97 commit bbb99e5

File tree

3 files changed

+61
-7
lines changed

3 files changed

+61
-7
lines changed

app/code/Magento/MediaContentSynchronization/Model/Consume.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77

88
namespace Magento\MediaContentSynchronization\Model;
99

10+
use Magento\AsynchronousOperations\Api\Data\OperationInterface;
1011
use Magento\Framework\Exception\LocalizedException;
11-
use Magento\MediaContentApi\Api\Data\ContentIdentityInterface;
12+
use Magento\Framework\Serialize\SerializerInterface;
1213
use Magento\MediaContentSynchronizationApi\Api\SynchronizeIdentitiesInterface;
1314
use Magento\MediaContentSynchronizationApi\Api\SynchronizeInterface;
1415

@@ -17,6 +18,11 @@
1718
*/
1819
class Consume
1920
{
21+
/**
22+
* @var SerializerInterface
23+
*/
24+
private $serializer;
25+
2026
/**
2127
* @var SynchronizeInterface
2228
*/
@@ -28,24 +34,30 @@ class Consume
2834
private $synchronizeIdentities;
2935

3036
/**
37+
* @param SerializerInterface $serializer
3138
* @param SynchronizeInterface $synchronize
3239
* @param SynchronizeIdentitiesInterface $synchronizeIdentities
3340
*/
3441
public function __construct(
42+
SerializerInterface $serializer,
3543
SynchronizeInterface $synchronize,
3644
SynchronizeIdentitiesInterface $synchronizeIdentities
3745
) {
46+
$this->serializer = $serializer;
3847
$this->synchronize = $synchronize;
3948
$this->synchronizeIdentities = $synchronizeIdentities;
4049
}
4150

4251
/**
4352
* Run media files synchronization.
44-
* @param string[] $identities
53+
* @param OperationInterface $operation
4554
* @throws LocalizedException
4655
*/
47-
public function execute(array $identities) : void
56+
public function execute(OperationInterface $operation) : void
4857
{
58+
$serializedData = $operation->getSerializedData();
59+
$identities = $this->serializer->unserialize($serializedData);
60+
4961
if (!empty($identities)) {
5062
$this->synchronizeIdentities->execute($identities);
5163
} else {

app/code/Magento/MediaContentSynchronization/Model/Publish.php

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
namespace Magento\MediaContentSynchronization\Model;
99

10+
use Magento\AsynchronousOperations\Api\Data\OperationInterfaceFactory;
11+
use Magento\Framework\Bulk\OperationInterface;
12+
use Magento\Framework\DataObject\IdentityGeneratorInterface;
1013
use Magento\Framework\MessageQueue\PublisherInterface;
14+
use Magento\Framework\Serialize\SerializerInterface;
1115

1216
/**
1317
* Publish media content synchronization queue.
@@ -19,16 +23,41 @@ class Publish
1923
*/
2024
private const TOPIC_MEDIA_CONTENT_SYNCHRONIZATION = 'media.content.synchronization';
2125

26+
/**
27+
* @var OperationInterfaceFactory
28+
*/
29+
private $operationFactory;
30+
31+
/**
32+
* @var IdentityGeneratorInterface
33+
*/
34+
private $identityService;
35+
2236
/**
2337
* @var PublisherInterface
2438
*/
2539
private $publisher;
2640

2741
/**
42+
* @var SerializerInterface
43+
*/
44+
private $serializer;
45+
46+
/**
47+
* @param OperationInterfaceFactory $operationFactory
48+
* @param IdentityGeneratorInterface $identityService
2849
* @param PublisherInterface $publisher
50+
* @param SerializerInterface $serializer
2951
*/
30-
public function __construct(PublisherInterface $publisher)
31-
{
52+
public function __construct(
53+
OperationInterfaceFactory $operationFactory,
54+
IdentityGeneratorInterface $identityService,
55+
PublisherInterface $publisher,
56+
SerializerInterface $serializer
57+
) {
58+
$this->operationFactory = $operationFactory;
59+
$this->identityService = $identityService;
60+
$this->serializer = $serializer;
3261
$this->publisher = $publisher;
3362
}
3463

@@ -38,9 +67,22 @@ public function __construct(PublisherInterface $publisher)
3867
*/
3968
public function execute(array $contentIdentities = []) : void
4069
{
70+
$bulkUuid = $this->identityService->generateId();
71+
$dataToEncode = $this->serializer->serialize($contentIdentities);
72+
73+
$data = [
74+
'data' => [
75+
'bulk_uuid' => $bulkUuid,
76+
'topic_name' => self::TOPIC_MEDIA_CONTENT_SYNCHRONIZATION,
77+
'serialized_data' => $dataToEncode,
78+
'status' => OperationInterface::STATUS_TYPE_OPEN,
79+
]
80+
];
81+
$operation = $this->operationFactory->create($data);
82+
4183
$this->publisher->publish(
4284
self::TOPIC_MEDIA_CONTENT_SYNCHRONIZATION,
43-
$contentIdentities
85+
$operation
4486
);
4587
}
4688
}

app/code/Magento/MediaContentSynchronization/etc/communication.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
99
xsi:noNamespaceSchemaLocation="urn:magento:framework:Communication/etc/communication.xsd">
10-
<topic name="media.content.synchronization" is_synchronous="false" request="string[]">
10+
<topic name="media.content.synchronization" is_synchronous="false" request="Magento\AsynchronousOperations\Api\Data\OperationInterface">
1111
<handler name="media.content.synchronization.handler"
1212
type="Magento\MediaContentSynchronization\Model\Consume" method="execute"/>
1313
</topic>

0 commit comments

Comments
 (0)