Skip to content

Commit

Permalink
Merge pull request #5731 from spryker/bugfix/te-1439-unclear-exceptio…
Browse files Browse the repository at this point in the history
…n-message

TE-1439 Having "store" column together with "queue_pool" in schema.xml files throw an unclear exception.
  • Loading branch information
a-sabaa committed Aug 12, 2019
2 parents 58a3345 + 47a3beb commit de0e49e
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 13 deletions.
Expand Up @@ -108,7 +108,7 @@ protected function syncData(SynchronizationDataQueryContainerPluginInterface $pl
->setResource($plugin->getResourceName())
->setParams($plugin->getParams());

$queueSendTransfers[] = $this->queueMessageCreator->createQueueMessage($syncQueueMessage, $store, $plugin->getSynchronizationQueuePoolName());
$queueSendTransfers[] = $this->queueMessageCreator->createQueueMessage($syncQueueMessage, $plugin, $store);
}

$this->queueClient->sendMessages($plugin->getQueueName(), $queueSendTransfers);
Expand Down
Expand Up @@ -140,7 +140,7 @@ protected function syncData(SynchronizationDataPluginInterface $plugin, array $s
->setResource($plugin->getResourceName())
->setParams($plugin->getParams());

$queueSendTransfers[] = $this->queueMessageCreator->createQueueMessage($syncQueueMessage, $store, $plugin->getSynchronizationQueuePoolName());
$queueSendTransfers[] = $this->queueMessageCreator->createQueueMessage($syncQueueMessage, $plugin, $store);
}

$this->queueClient->sendMessages($plugin->getQueueName(), $queueSendTransfers);
Expand Down
Expand Up @@ -10,39 +10,60 @@
use Generated\Shared\Transfer\QueueSendMessageTransfer;
use Generated\Shared\Transfer\SynchronizationQueueMessageTransfer;
use Spryker\Zed\Synchronization\Business\Exception\SynchronizationQueuePoolNotFoundException;
use Spryker\Zed\Synchronization\Dependency\Service\SynchronizationToUtilEncodingServiceInterface;
use Spryker\Zed\SynchronizationExtension\Dependency\Plugin\SynchronizationDataPluginInterface;

class QueueMessageCreator implements QueueMessageCreatorInterface
{
protected const WRITE = 'write';

/**
* @var \Spryker\Zed\Synchronization\Dependency\Service\SynchronizationToUtilEncodingServiceInterface
*/
protected $encodingService;

/**
* @param \Spryker\Zed\Synchronization\Dependency\Service\SynchronizationToUtilEncodingServiceInterface $encodingService
*/
public function __construct(SynchronizationToUtilEncodingServiceInterface $encodingService)
{
$this->encodingService = $encodingService;
}

/**
* @param \Generated\Shared\Transfer\SynchronizationQueueMessageTransfer $synchronizationQueueMessageTransfer
* @param \Spryker\Zed\SynchronizationExtension\Dependency\Plugin\SynchronizationDataPluginInterface $plugin
* @param string|null $store
* @param string|null $queuePoolName
*
* @return \Generated\Shared\Transfer\QueueSendMessageTransfer
*/
public function createQueueMessage(SynchronizationQueueMessageTransfer $synchronizationQueueMessageTransfer, $store = null, $queuePoolName = null): QueueSendMessageTransfer
{
public function createQueueMessage(
SynchronizationQueueMessageTransfer $synchronizationQueueMessageTransfer,
SynchronizationDataPluginInterface $plugin,
$store = null
): QueueSendMessageTransfer {
$message = [];
$message[static::WRITE] = $synchronizationQueueMessageTransfer->toArray();

return $this->createQueueSendMessageTransfer($message, $store, $queuePoolName);
return $this->createQueueSendMessageTransfer($message, $plugin, $store);
}

/**
* @param array $message
* @param \Spryker\Zed\SynchronizationExtension\Dependency\Plugin\SynchronizationDataPluginInterface $plugin
* @param string|null $store
* @param string|null $queuePoolName
*
* @throws \Spryker\Zed\Synchronization\Business\Exception\SynchronizationQueuePoolNotFoundException
*
* @return \Generated\Shared\Transfer\QueueSendMessageTransfer
*/
protected function createQueueSendMessageTransfer(array $message, $store = null, $queuePoolName = null): QueueSendMessageTransfer
protected function createQueueSendMessageTransfer(array $message, SynchronizationDataPluginInterface $plugin, $store = null): QueueSendMessageTransfer
{
$queueSendTransfer = new QueueSendMessageTransfer();
$queueSendTransfer->setBody(json_encode($message));
$queueSendTransfer->setBody(
$this->encodingService->encodeJson($message)
);
$queuePoolName = $plugin->getSynchronizationQueuePoolName();

if ($store) {
$queueSendTransfer->setStoreName($store);
Expand All @@ -51,7 +72,9 @@ protected function createQueueSendMessageTransfer(array $message, $store = null,
}

if (!$queuePoolName) {
throw new SynchronizationQueuePoolNotFoundException('You must either have store column or `SynchronizationQueuePoolName` in your schema.xml file');
throw new SynchronizationQueuePoolNotFoundException(
sprintf('You must specify either store column or `SynchronizationQueuePoolName` for %s resource.', $plugin->getResourceName())
);
}
$queueSendTransfer->setQueuePoolName($queuePoolName);

Expand Down
Expand Up @@ -9,15 +9,20 @@

use Generated\Shared\Transfer\QueueSendMessageTransfer;
use Generated\Shared\Transfer\SynchronizationQueueMessageTransfer;
use Spryker\Zed\SynchronizationExtension\Dependency\Plugin\SynchronizationDataPluginInterface;

interface QueueMessageCreatorInterface
{
/**
* @param \Generated\Shared\Transfer\SynchronizationQueueMessageTransfer $synchronizationQueueMessageTransfer
* @param \Spryker\Zed\SynchronizationExtension\Dependency\Plugin\SynchronizationDataPluginInterface $plugin
* @param string|null $store
* @param string|null $queuePoolName
*
* @return \Generated\Shared\Transfer\QueueSendMessageTransfer
*/
public function createQueueMessage(SynchronizationQueueMessageTransfer $synchronizationQueueMessageTransfer, $store = null, $queuePoolName = null): QueueSendMessageTransfer;
public function createQueueMessage(
SynchronizationQueueMessageTransfer $synchronizationQueueMessageTransfer,
SynchronizationDataPluginInterface $plugin,
$store = null
): QueueSendMessageTransfer;
}
Expand Up @@ -133,7 +133,9 @@ protected function createOutdatedValidator()
*/
protected function createQueueMessageCreator()
{
return new QueueMessageCreator();
return new QueueMessageCreator(
$this->getUtilEncodingService()
);
}

/**
Expand Down
Expand Up @@ -382,6 +382,7 @@ public function testExecuteResolvedPluginsBySources()
$container[SynchronizationDependencyProvider::PLUGINS_SYNCHRONIZATION_DATA] = function (Container $container) {
return $this->createSynchronizationDataPlugins();
};
$container[SynchronizationDependencyProvider::SERVICE_UTIL_ENCODING] = $this->createUtilEncodingServiceBridge();

$this->prepareFacade($container);
$this->synchronizationFacade->executeResolvedPluginsBySources([]);
Expand Down

0 comments on commit de0e49e

Please sign in to comment.