Skip to content

Commit 0b03053

Browse files
committed
Embargo check
1 parent 228a1ae commit 0b03053

File tree

5 files changed

+30
-6
lines changed

5 files changed

+30
-6
lines changed

src/Domain/Messaging/Command/ProcessQueueCommand.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace PhpList\Core\Domain\Messaging\Command;
66

7+
use DateTimeImmutable;
8+
use PhpList\Core\Domain\Messaging\Model\Message\MessageStatus;
79
use PhpList\Core\Domain\Messaging\Repository\MessageRepository;
810
use PhpList\Core\Domain\Messaging\Service\MessageProcessingPreparator;
911
use PhpList\Core\Domain\Messaging\Service\Processor\CampaignProcessor;
@@ -54,7 +56,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
5456
$this->messagePreparator->ensureSubscribersHaveUuid($output);
5557
$this->messagePreparator->ensureCampaignsHaveUuid($output);
5658

57-
$campaigns = $this->messageRepository->findBy(['status' => 'submitted']);
59+
$campaigns = $this->messageRepository->getByStatusAndEmbargo(
60+
status: MessageStatus::Submitted,
61+
embargo: new DateTimeImmutable()
62+
);
5863

5964
foreach ($campaigns as $campaign) {
6065
$this->campaignProcessor->process($campaign, $output);

src/Domain/Messaging/Model/Message/MessageMetadata.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use DateTime;
88
use Doctrine\ORM\Mapping as ORM;
9+
use InvalidArgumentException;
910
use PhpList\Core\Domain\Common\Model\Interfaces\EmbeddableInterface;
1011

1112
#[ORM\Embeddable]
@@ -58,7 +59,11 @@ public function getStatus(): ?MessageStatus
5859

5960
public function setStatus(MessageStatus $status): self
6061
{
62+
if (!$this->getStatus()->canTransitionTo($status)) {
63+
throw new InvalidArgumentException('Invalid status transition');
64+
}
6165
$this->status = $status->value;
66+
6267
return $this;
6368
}
6469

src/Domain/Messaging/Repository/MessageRepository.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace PhpList\Core\Domain\Messaging\Repository;
66

7+
use DateTimeImmutable;
78
use PhpList\Core\Domain\Common\Model\Filter\FilterRequestInterface;
89
use PhpList\Core\Domain\Common\Repository\AbstractRepository;
910
use PhpList\Core\Domain\Common\Repository\Interfaces\PaginatableRepositoryInterface;
@@ -74,4 +75,15 @@ public function incrementBounceCount(int $messageId): void
7475
->getQuery()
7576
->execute();
7677
}
78+
79+
public function getByStatusAndEmbargo(Message\MessageStatus $status, DateTimeImmutable $embargo): array
80+
{
81+
return $this->createQueryBuilder('m')
82+
->where('m.status = :status')
83+
->andWhere('m.embargo IS NULL OR m.embargo <= :embargo')
84+
->setParameter('status', $status->value)
85+
->setParameter('embargo', $embargo)
86+
->getQuery()
87+
->getResult();
88+
}
7789
}

src/Domain/Messaging/Service/Manager/MessageManager.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace PhpList\Core\Domain\Messaging\Service\Manager;
66

7-
use InvalidArgumentException;
87
use PhpList\Core\Domain\Identity\Model\Administrator;
98
use PhpList\Core\Domain\Messaging\Model\Dto\MessageContext;
109
use PhpList\Core\Domain\Messaging\Model\Dto\MessageDtoInterface;
@@ -46,10 +45,6 @@ public function updateMessage(
4645

4746
public function updateStatus(Message $message, Message\MessageStatus $status): Message
4847
{
49-
if (!$message->getMetadata()->getStatus()->canTransitionTo($status)) {
50-
throw new InvalidArgumentException('Invalid status transition');
51-
}
52-
5348
$message->getMetadata()->setStatus($status);
5449
$this->messageRepository->save($message);
5550

src/Domain/Messaging/Service/Processor/CampaignProcessor.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ public function __construct(
3838

3939
public function process(Message $campaign, ?OutputInterface $output = null): void
4040
{
41+
$campaign->getMetadata()->setStatus(Message\MessageStatus::Prepared);
42+
$this->entityManager->flush();
43+
4144
$subscribers = $this->subscriberProvider->getSubscribersForMessage($campaign);
45+
46+
$campaign->getMetadata()->setStatus(Message\MessageStatus::InProcess);
47+
$this->entityManager->flush();
48+
4249
// phpcs:ignore Generic.Commenting.Todo
4350
// @todo check $ISPrestrictions logic
4451
foreach ($subscribers as $subscriber) {

0 commit comments

Comments
 (0)