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 @@ +