diff --git a/src/CoreShop/Bundle/OrderBundle/Resources/config/services.yml b/src/CoreShop/Bundle/OrderBundle/Resources/config/services.yml index b2a05b0dce..d796ae5530 100644 --- a/src/CoreShop/Bundle/OrderBundle/Resources/config/services.yml +++ b/src/CoreShop/Bundle/OrderBundle/Resources/config/services.yml @@ -106,12 +106,15 @@ services: arguments: - '@CoreShop\Component\Order\Factory\OrderItemFactory.inner' + CoreShop\Component\Resource\TokenGenerator\UniqueTokenGenerator: ~ + CoreShop\Component\Order\Factory\OrderFactory: decorates: coreshop.factory.order decoration_priority: 256 public: false arguments: - '@CoreShop\Component\Order\Factory\OrderFactory.inner' + - '@CoreShop\Component\Resource\TokenGenerator\UniqueTokenGenerator' CoreShop\Bundle\OrderBundle\Factory\AddToCartFactoryInterface: '@CoreShop\Bundle\OrderBundle\Factory\AddToCartFactory' CoreShop\Bundle\OrderBundle\Factory\AddToCartFactory: diff --git a/src/CoreShop/Bundle/SequenceBundle/Doctrine/ORM/SequenceRepository.php b/src/CoreShop/Bundle/SequenceBundle/Doctrine/ORM/SequenceRepository.php index 407cfb694c..7a82edeef5 100644 --- a/src/CoreShop/Bundle/SequenceBundle/Doctrine/ORM/SequenceRepository.php +++ b/src/CoreShop/Bundle/SequenceBundle/Doctrine/ORM/SequenceRepository.php @@ -21,6 +21,7 @@ use CoreShop\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; use CoreShop\Component\Sequence\Model\SequenceInterface; use CoreShop\Component\Sequence\Repository\SequenceRepositoryInterface; +use Doctrine\DBAL\LockMode; class SequenceRepository extends EntityRepository implements SequenceRepositoryInterface { @@ -30,6 +31,7 @@ public function findForType(string $type): ?SequenceInterface ->andWhere('o.type = :type') ->setParameter('type', $type) ->getQuery() + ->setLockMode(LockMode::PESSIMISTIC_WRITE) ->getOneOrNullResult() ; } diff --git a/src/CoreShop/Bundle/StorageListBundle/EventListener/SessionSubscriber.php b/src/CoreShop/Bundle/StorageListBundle/EventListener/SessionSubscriber.php index 93c8039970..19fc1eea49 100644 --- a/src/CoreShop/Bundle/StorageListBundle/EventListener/SessionSubscriber.php +++ b/src/CoreShop/Bundle/StorageListBundle/EventListener/SessionSubscriber.php @@ -69,7 +69,7 @@ public function onKernelResponse(ResponseEvent $event): void return; } - if (0 !== $list->getId()) { + if (null !== $list->getId()) { $session = $request->getSession(); $session->set( diff --git a/src/CoreShop/Component/Core/Order/Committer/OrderCommitter.php b/src/CoreShop/Component/Core/Order/Committer/OrderCommitter.php index be30fd315c..473bef7d1d 100644 --- a/src/CoreShop/Component/Core/Order/Committer/OrderCommitter.php +++ b/src/CoreShop/Component/Core/Order/Committer/OrderCommitter.php @@ -72,9 +72,6 @@ public function commitOrder(OrderInterface $order): void $order->setPaymentState(OrderPaymentStates::STATE_NEW); $order->setInvoiceState(OrderInvoiceStates::STATE_NEW); - $tokenGenerator = new UniqueTokenGenerator(); - $order->setToken($tokenGenerator->generate(10)); - $this->cartManager->persistCart($order); $originalShippingAddress = $order->hasShippableItems() === false ? $order->getInvoiceAddress() : $order->getShippingAddress(); diff --git a/src/CoreShop/Component/Order/Factory/OrderFactory.php b/src/CoreShop/Component/Order/Factory/OrderFactory.php index ba01355f56..d6f7e6a188 100644 --- a/src/CoreShop/Component/Order/Factory/OrderFactory.php +++ b/src/CoreShop/Component/Order/Factory/OrderFactory.php @@ -19,11 +19,14 @@ namespace CoreShop\Component\Order\Factory; use CoreShop\Component\Resource\Factory\FactoryInterface; +use CoreShop\Component\Resource\TokenGenerator\UniqueTokenGenerator; class OrderFactory implements FactoryInterface { public function __construct( private FactoryInterface $cartFactory, + private UniqueTokenGenerator $tokenGenerator, + private int $tokenLength = 10 ) { } @@ -32,6 +35,7 @@ public function createNew() $cart = $this->cartFactory->createNew(); $cart->setKey(uniqid('cart', true)); $cart->setPublished(true); + $cart->setToken($this->tokenGenerator->generate($this->tokenLength)); return $cart; } diff --git a/src/CoreShop/Component/Sequence/Generator/SequenceGenerator.php b/src/CoreShop/Component/Sequence/Generator/SequenceGenerator.php index 494c5886a2..6e0ab853b9 100644 --- a/src/CoreShop/Component/Sequence/Generator/SequenceGenerator.php +++ b/src/CoreShop/Component/Sequence/Generator/SequenceGenerator.php @@ -34,11 +34,13 @@ public function __construct( public function getNextSequenceForType(string $type): int { + $this->entityManager->beginTransaction(); + $sequence = $this->getSequence($type); $sequence->incrementIndex(); - $this->entityManager->persist($sequence); $this->entityManager->flush(); + $this->entityManager->commit(); return $sequence->getIndex(); } diff --git a/src/CoreShop/Component/StorageList/Manager/StorageListPimcoreModelManager.php b/src/CoreShop/Component/StorageList/Manager/StorageListPimcoreModelManager.php index 9f4663e756..8c637af163 100644 --- a/src/CoreShop/Component/StorageList/Manager/StorageListPimcoreModelManager.php +++ b/src/CoreShop/Component/StorageList/Manager/StorageListPimcoreModelManager.php @@ -44,49 +44,47 @@ public function persist(StorageListInterface $storageList): void 'path' => 'storage-list', ]); - $this->connection->transactional(function () use ($storageList, $folder) { - VersionHelper::useVersioning(function () use ($storageList, $folder) { - $tempItems = $storageList->getItems(); + VersionHelper::useVersioning(function () use ($storageList, $folder) { + $tempItems = $storageList->getItems(); - if (!$storageList->getId()) { - $storageList->setItems([]); - - /** - * @psalm-suppress DocblockTypeContradiction - */ - if (!$storageList->getParent()) { - $storageList->setParent($folder); - } - - $storageList->save(); - } + if (!$storageList->getId()) { + $storageList->setItems([]); /** - * @var AbstractPimcoreModel $item + * @psalm-suppress DocblockTypeContradiction */ - foreach ($tempItems as $index => $item) { - $item->setParent( - $this->folderCreationService->createFolderForResource( - $item, - ['prefix' => $storageList->getFullPath()], - ), - ); - $item->setPublished(true); - $item->setKey($index + 1); - $item->save(); + if (!$storageList->getParent()) { + $storageList->setParent($folder); } - $storageList->setItems($tempItems); + $storageList->save(); + } - /** - * @var AbstractPimcoreModel $storageListItem - */ - foreach ($storageList->getItems() as $storageListItem) { - $storageListItem->save(); - } + /** + * @var AbstractPimcoreModel $item + */ + foreach ($tempItems as $index => $item) { + $item->setParent( + $this->folderCreationService->createFolderForResource( + $item, + ['prefix' => $storageList->getFullPath()], + ), + ); + $item->setPublished(true); + $item->setKey($index + 1); + $item->save(); + } - $storageList->save(); - }, false); - }); + $storageList->setItems($tempItems); + + /** + * @var AbstractPimcoreModel $storageListItem + */ + foreach ($storageList->getItems() as $storageListItem) { + $storageListItem->save(); + } + + $storageList->save(); + }, false); } }