diff -Nuar a/vendor/magento/module-sales-rule/Model/Coupon/Quote/UpdateCouponUsages.php b/vendor/magento/module-sales-rule/Model/Coupon/Quote/UpdateCouponUsages.php
index 0ee2ee09cad..02da921e032 100644
--- a/vendor/magento/module-sales-rule/Model/Coupon/Quote/UpdateCouponUsages.php
+++ b/vendor/magento/module-sales-rule/Model/Coupon/Quote/UpdateCouponUsages.php
@@ -8,9 +8,9 @@ declare(strict_types=1);
namespace Magento\SalesRule\Model\Coupon\Quote;
use Magento\Quote\Api\Data\CartInterface;
-use Magento\SalesRule\Model\Coupon\Usage\Processor as CouponUsageProcessor;
use Magento\SalesRule\Model\Coupon\Usage\UpdateInfo;
use Magento\SalesRule\Model\Coupon\Usage\UpdateInfoFactory;
+use Magento\SalesRule\Model\Service\CouponUsagePublisher;
/**
* Updates the coupon usages from quote
@@ -18,24 +18,24 @@ use Magento\SalesRule\Model\Coupon\Usage\UpdateInfoFactory;
class UpdateCouponUsages
{
/**
- * @var CouponUsageProcessor
+ * @var UpdateInfoFactory
*/
- private $couponUsageProcessor;
+ private $updateInfoFactory;
/**
- * @var UpdateInfoFactory
+ * @var CouponUsagePublisher
*/
- private $updateInfoFactory;
+ private $couponUsagePublisher;
/**
- * @param CouponUsageProcessor $couponUsageProcessor
+ * @param CouponUsagePublisher $couponUsagePublisher
* @param UpdateInfoFactory $updateInfoFactory
*/
public function __construct(
- CouponUsageProcessor $couponUsageProcessor,
+ CouponUsagePublisher $couponUsagePublisher,
UpdateInfoFactory $updateInfoFactory
) {
- $this->couponUsageProcessor = $couponUsageProcessor;
+ $this->couponUsagePublisher = $couponUsagePublisher;
$this->updateInfoFactory = $updateInfoFactory;
}
@@ -59,6 +59,6 @@ class UpdateCouponUsages
$updateInfo->setCustomerId((int)$quote->getCustomerId());
$updateInfo->setIsIncrement($increment);
- $this->couponUsageProcessor->process($updateInfo);
+ $this->couponUsagePublisher->publish($updateInfo);
}
}
diff -Nuar a/vendor/magento/module-sales-rule/Model/CouponUsageConsumer.php b/vendor/magento/module-sales-rule/Model/CouponUsageConsumer.php
new file mode 100644
index 00000000000..0520cb658e4
--- /dev/null
+++ b/vendor/magento/module-sales-rule/Model/CouponUsageConsumer.php
@@ -0,0 +1,102 @@
+updateInfoFactory = $updateInfoFactory;
+ $this->processor = $processor;
+ $this->logger = $logger;
+ $this->serializer = $serializer;
+ $this->entityManager = $entityManager;
+ }
+
+ /**
+ * Process coupon usage update
+ *
+ * @param OperationInterface $operation
+ * @return void
+ * @throws \Exception
+ */
+ public function process(OperationInterface $operation): void
+ {
+ try {
+ $serializedData = $operation->getSerializedData();
+ $data = $this->serializer->unserialize($serializedData);
+ $updateInfo = $this->updateInfoFactory->create();
+ $updateInfo->setData($data);
+ $this->processor->process($updateInfo);
+ } catch (NotFoundException $e) {
+ $this->logger->critical($e->getMessage());
+ $status = OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED;
+ $errorCode = $e->getCode();
+ $message = $e->getMessage();
+ } catch (\Exception $e) {
+ $this->logger->critical($e->getMessage());
+ $status = OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED;
+ $errorCode = $e->getCode();
+ $message = __('Sorry, something went wrong during rule usage update. Please see log for details.');
+ }
+
+ $operation->setStatus($status ?? OperationInterface::STATUS_TYPE_COMPLETE)
+ ->setErrorCode($errorCode ?? null)
+ ->setResultMessage($message ?? null);
+
+ $this->entityManager->save($operation);
+ }
+}
diff -Nuar a/vendor/magento/module-sales-rule/Model/Service/CouponUsagePublisher.php b/vendor/magento/module-sales-rule/Model/Service/CouponUsagePublisher.php
new file mode 100644
index 00000000000..1d1bbb1f63e
--- /dev/null
+++ b/vendor/magento/module-sales-rule/Model/Service/CouponUsagePublisher.php
@@ -0,0 +1,99 @@
+bulkManagement = $bulkManagement;
+ $this->operationFactory = $operartionFactory;
+ $this->identityService = $identityService;
+ $this->serializer = $serializer;
+ $this->userContext = $userContext;
+ }
+
+ /**
+ * Publish sales rule usage info into the queue
+ *
+ * @param string $updateInfo
+ * @return boolean
+ */
+ public function publish(UpdateInfo $updateInfo): bool
+ {
+ $bulkUuid = $this->identityService->generateId();
+ $bulkDescription = __('Rule processing: %1', implode(',', $updateInfo->getAppliedRuleIds()));
+
+ $data = [
+ 'data' => [
+ 'bulk_uuid' => $bulkUuid,
+ 'topic_name' => self::TOPIC_NAME,
+ 'serialized_data' => $this->serializer->serialize($updateInfo->getData()),
+ 'status' => OperationInterface::STATUS_TYPE_OPEN,
+ ]
+ ];
+ $operation = $this->operationFactory->create($data);
+
+ return $this->bulkManagement->scheduleBulk(
+ $bulkUuid,
+ [$operation],
+ $bulkDescription,
+ $this->userContext->getUserId()
+ );
+ }
+}
diff -Nuar a/vendor/magento/module-sales-rule/etc/communication.xml b/vendor/magento/module-sales-rule/etc/communication.xml
index 4c905fa83e2..786e866f0e3 100644
--- a/vendor/magento/module-sales-rule/etc/communication.xml
+++ b/vendor/magento/module-sales-rule/etc/communication.xml
@@ -9,4 +9,7 @@
+
+
+
diff -Nuar a/vendor/magento/module-sales-rule/etc/queue.xml b/vendor/magento/module-sales-rule/etc/queue.xml
index 8217a0b9f6c..87dce71b530 100644
--- a/vendor/magento/module-sales-rule/etc/queue.xml
+++ b/vendor/magento/module-sales-rule/etc/queue.xml
@@ -9,4 +9,7 @@
+
+
+
diff -Nuar a/vendor/magento/module-sales-rule/etc/queue_consumer.xml b/vendor/magento/module-sales-rule/etc/queue_consumer.xml
index 9eb585f48e8..bcebaf6a543 100644
--- a/vendor/magento/module-sales-rule/etc/queue_consumer.xml
+++ b/vendor/magento/module-sales-rule/etc/queue_consumer.xml
@@ -7,4 +7,5 @@
-->
+
diff -Nuar a/vendor/magento/module-sales-rule/etc/queue_publisher.xml b/vendor/magento/module-sales-rule/etc/queue_publisher.xml
index 0863fba2307..f1b8bddf2c0 100644
--- a/vendor/magento/module-sales-rule/etc/queue_publisher.xml
+++ b/vendor/magento/module-sales-rule/etc/queue_publisher.xml
@@ -9,4 +9,7 @@
+
+
+
diff -Nuar a/vendor/magento/module-sales-rule/etc/queue_topology.xml b/vendor/magento/module-sales-rule/etc/queue_topology.xml
index fd6a9bf3672..3902c8a3ab3 100644
--- a/vendor/magento/module-sales-rule/etc/queue_topology.xml
+++ b/vendor/magento/module-sales-rule/etc/queue_topology.xml
@@ -8,5 +8,6 @@
+