src/Core/Framework/App/ScheduledTask/DeleteCascadeAppsHandler.php line 46

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\App\ScheduledTask;
  3. use Shopware\Core\Defaults;
  4. use Shopware\Core\Framework\Context;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\RangeFilter;
  8. use Shopware\Core\Framework\Log\Package;
  9. use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler;
  10. use Symfony\Component\Messenger\Attribute\AsMessageHandler;
  11. /**
  12.  * @internal
  13.  */
  14. #[AsMessageHandler(handlesDeleteCascadeAppsTask::class)]
  15. #[Package('core')]
  16. final class DeleteCascadeAppsHandler extends ScheduledTaskHandler
  17. {
  18.     private const HARD_DELETE_AFTER_DAYS 1;
  19.     /**
  20.      * @internal
  21.      */
  22.     public function __construct(
  23.         EntityRepository $scheduledTaskRepository,
  24.         private readonly EntityRepository $aclRoleRepository,
  25.         private readonly EntityRepository $integrationRepository
  26.     ) {
  27.         parent::__construct($scheduledTaskRepository);
  28.     }
  29.     public function run(): void
  30.     {
  31.         $context Context::createDefaultContext();
  32.         $timeExpired = (new \DateTimeImmutable())->modify(sprintf('-%s day'self::HARD_DELETE_AFTER_DAYS))->format(Defaults::STORAGE_DATE_TIME_FORMAT);
  33.         $criteria = new Criteria();
  34.         $criteria->addFilter(new RangeFilter('deletedAt', [
  35.             RangeFilter::LTE => $timeExpired,
  36.         ]));
  37.         $this->deleteIds($this->aclRoleRepository$criteria$context);
  38.         $this->deleteIds($this->integrationRepository$criteria$context);
  39.     }
  40.     private function deleteIds(EntityRepository $repositoryCriteria $criteriaContext $context): void
  41.     {
  42.         $data $repository->searchIds($criteria$context)->getData();
  43.         if (empty($data)) {
  44.             return;
  45.         }
  46.         $deleteIds array_values($data);
  47.         $repository->delete($deleteIds$context);
  48.     }
  49. }