src/Core/Content/Newsletter/ScheduledTask/NewsletterRecipientTaskHandler.php line 32

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Newsletter\ScheduledTask;
  3. use Shopware\Core\Framework\Context;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  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(handlesNewsletterRecipientTask::class)]
  15. #[Package('customer-order')]
  16. final class NewsletterRecipientTaskHandler extends ScheduledTaskHandler
  17. {
  18.     /**
  19.      * @internal
  20.      */
  21.     public function __construct(EntityRepository $scheduledTaskRepository, private readonly EntityRepository $newsletterRecipientRepository)
  22.     {
  23.         parent::__construct($scheduledTaskRepository);
  24.     }
  25.     public function run(): void
  26.     {
  27.         $criteria $this->getExpiredNewsletterRecipientCriteria();
  28.         $emailRecipient $this->newsletterRecipientRepository->searchIds($criteriaContext::createDefaultContext());
  29.         if (empty($emailRecipient->getIds())) {
  30.             return;
  31.         }
  32.         $emailRecipientIds array_map(fn ($id) => ['id' => $id], $emailRecipient->getIds());
  33.         $this->newsletterRecipientRepository->delete($emailRecipientIdsContext::createDefaultContext());
  34.     }
  35.     private function getExpiredNewsletterRecipientCriteria(): Criteria
  36.     {
  37.         $criteria = new Criteria();
  38.         $dateTime = (new \DateTime())->add(\DateInterval::createFromDateString('-30 days'));
  39.         $criteria->addFilter(new RangeFilter(
  40.             'createdAt',
  41.             [
  42.                 RangeFilter::LTE => $dateTime->format(\DATE_ATOM),
  43.             ]
  44.         ));
  45.         $criteria->addFilter(new EqualsFilter('status''notSet'));
  46.         $criteria->setLimit(999);
  47.         return $criteria;
  48.     }
  49. }