SequenceManager.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\EntityManager\Sequence;
  7. use Psr\Log\LoggerInterface;
  8. use Magento\Framework\EntityManager\MetadataPool;
  9. /**
  10. * Class SequenceManager
  11. */
  12. class SequenceManager
  13. {
  14. /**
  15. * @var SequenceRegistry
  16. */
  17. private $sequenceRegistry;
  18. /**
  19. * @var MetadataPool
  20. */
  21. private $metadataPool;
  22. /**
  23. * @var LoggerInterface
  24. */
  25. private $logger;
  26. /**
  27. * @var \Magento\Framework\App\ResourceConnection
  28. */
  29. private $appResource;
  30. /**
  31. * @param MetadataPool $metadataPool
  32. * @param SequenceRegistry $sequenceRegistry
  33. * @param LoggerInterface $logger
  34. * @param \Magento\Framework\App\ResourceConnection $appResource
  35. */
  36. public function __construct(
  37. MetadataPool $metadataPool,
  38. SequenceRegistry $sequenceRegistry,
  39. LoggerInterface $logger,
  40. \Magento\Framework\App\ResourceConnection $appResource
  41. ) {
  42. $this->metadataPool = $metadataPool;
  43. $this->sequenceRegistry = $sequenceRegistry;
  44. $this->logger = $logger;
  45. $this->appResource = $appResource;
  46. }
  47. /**
  48. * Forces creation of a sequence value.
  49. *
  50. * @param string $entityType
  51. * @param string|int $identifier
  52. *
  53. * @return int
  54. *
  55. * @throws \Exception
  56. */
  57. public function force($entityType, $identifier)
  58. {
  59. $sequenceInfo = $this->sequenceRegistry->retrieve($entityType);
  60. if (!isset($sequenceInfo['sequenceTable'])) {
  61. throw new \Exception(
  62. 'TODO: use correct Exception class' . PHP_EOL . ' Sequence table doesn\'t exists'
  63. );
  64. }
  65. try {
  66. $metadata = $this->metadataPool->getMetadata($entityType);
  67. $connection = $this->appResource->getConnectionByName(
  68. $metadata->getEntityConnectionName()
  69. );
  70. return $connection->insert(
  71. $this->appResource->getTableName($sequenceInfo['sequenceTable']),
  72. ['sequence_value' => $identifier]
  73. );
  74. } catch (\Exception $e) {
  75. $this->logger->critical($e->getMessage(), $e->getTrace());
  76. throw new \Exception('TODO: use correct Exception class' . PHP_EOL . $e->getMessage());
  77. }
  78. }
  79. /**
  80. * @param string $entityType
  81. * @param int $identifier
  82. * @return int
  83. * @throws \Exception
  84. */
  85. public function delete($entityType, $identifier)
  86. {
  87. $metadata = $this->metadataPool->getMetadata($entityType);
  88. $sequenceInfo = $this->sequenceRegistry->retrieve($entityType);
  89. if (!isset($sequenceInfo['sequenceTable'])) {
  90. throw new \Exception('TODO: use correct Exception class' . PHP_EOL . ' Sequence table doesn\'t exists');
  91. }
  92. try {
  93. $connection = $this->appResource->getConnectionByName($metadata->getEntityConnectionName());
  94. return $connection->delete(
  95. $this->appResource->getTableName($sequenceInfo['sequenceTable']),
  96. ['sequence_value = ?' => $identifier]
  97. );
  98. } catch (\Exception $e) {
  99. $this->logger->critical($e->getMessage(), $e->getTrace());
  100. throw new \Exception('TODO: use correct Exception class' . PHP_EOL . $e->getMessage());
  101. }
  102. }
  103. }