Replace join query with a simple query
[MAILPOET-6148]
This commit is contained in:
@@ -101,9 +101,8 @@ class NewslettersResponseBuilder {
|
|||||||
$data['children_count'] = $this->newslettersStatsRepository->getChildrenCount($newsletter);
|
$data['children_count'] = $this->newslettersStatsRepository->getChildrenCount($newsletter);
|
||||||
}
|
}
|
||||||
if ($relation === self::RELATION_SCHEDULED) {
|
if ($relation === self::RELATION_SCHEDULED) {
|
||||||
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllByNewsletterAndTaskStatus(
|
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllToProcessByNewsletter(
|
||||||
$newsletter,
|
$newsletter
|
||||||
SendingQueueEntity::STATUS_SCHEDULED
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,9 +169,8 @@ class NewslettersResponseBuilder {
|
|||||||
$data['segments'] = [];
|
$data['segments'] = [];
|
||||||
$data['options'] = $this->buildOptions($newsletter);
|
$data['options'] = $this->buildOptions($newsletter);
|
||||||
$data['total_sent'] = $statistics ? $statistics->getTotalSentCount() : 0;
|
$data['total_sent'] = $statistics ? $statistics->getTotalSentCount() : 0;
|
||||||
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllByNewsletterAndTaskStatus(
|
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllToProcessByNewsletter(
|
||||||
$newsletter,
|
$newsletter
|
||||||
SendingQueueEntity::STATUS_SCHEDULED
|
|
||||||
);
|
);
|
||||||
} elseif ($newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION) {
|
} elseif ($newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION) {
|
||||||
$data['segments'] = $this->buildSegments($newsletter);
|
$data['segments'] = $this->buildSegments($newsletter);
|
||||||
|
@@ -73,14 +73,11 @@ class SendingQueuesRepository extends Repository {
|
|||||||
return $queryBuilder->getQuery()->getOneOrNullResult();
|
return $queryBuilder->getQuery()->getOneOrNullResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function countAllByNewsletterAndTaskStatus(NewsletterEntity $newsletter, string $status): int {
|
public function countAllToProcessByNewsletter(NewsletterEntity $newsletter): int {
|
||||||
return intval($this->entityManager->createQueryBuilder()
|
return intval($this->entityManager->createQueryBuilder()
|
||||||
->select('count(s.task)')
|
->select('sum(s.countToProcess)')
|
||||||
->from(SendingQueueEntity::class, 's')
|
->from(SendingQueueEntity::class, 's')
|
||||||
->join('s.task', 't')
|
|
||||||
->where('t.status = :status')
|
|
||||||
->andWhere('s.newsletter = :newsletter')
|
->andWhere('s.newsletter = :newsletter')
|
||||||
->setParameter('status', $status)
|
|
||||||
->setParameter('newsletter', $newsletter)
|
->setParameter('newsletter', $newsletter)
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult());
|
->getSingleScalarResult());
|
||||||
|
@@ -506,9 +506,12 @@ class Newsletter {
|
|||||||
if ($queue['processed_at'] ?? null) {
|
if ($queue['processed_at'] ?? null) {
|
||||||
$scheduledTask->setProcessedAt($queue['processed_at']);
|
$scheduledTask->setProcessedAt($queue['processed_at']);
|
||||||
}
|
}
|
||||||
if ($queue['meta']) {
|
if (isset($queue['meta'])) {
|
||||||
$sendingQueue->setMeta($queue['meta']);
|
$sendingQueue->setMeta($queue['meta']);
|
||||||
}
|
}
|
||||||
|
if (isset($queue['count_to_process'])) {
|
||||||
|
$sendingQueue->setCountToProcess($queue['count_to_process']);
|
||||||
|
}
|
||||||
$entityManager->persist($sendingQueue);
|
$entityManager->persist($sendingQueue);
|
||||||
$sendingQueue->setNewsletter($newsletter);
|
$sendingQueue->setNewsletter($newsletter);
|
||||||
$scheduledTask->setStatus($queue['status']);
|
$scheduledTask->setStatus($queue['status']);
|
||||||
|
@@ -89,7 +89,7 @@ class AutomationListingCest {
|
|||||||
->withWelcomeTypeForSegment()
|
->withWelcomeTypeForSegment()
|
||||||
->withCreatedAt('2020-01-20 12:00:00')
|
->withCreatedAt('2020-01-20 12:00:00')
|
||||||
->withActiveStatus()
|
->withActiveStatus()
|
||||||
->withScheduledQueue()
|
->withScheduledQueue(['count_to_process' => 2])
|
||||||
->withScheduledQueue()
|
->withScheduledQueue()
|
||||||
->withScheduledQueue(['status' => ScheduledTaskEntity::STATUS_COMPLETED, 'count_processed' => 1])
|
->withScheduledQueue(['status' => ScheduledTaskEntity::STATUS_COMPLETED, 'count_processed' => 1])
|
||||||
->create();
|
->create();
|
||||||
|
@@ -91,7 +91,7 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
verify($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
|
verify($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsCountOfQueuesByNewsletterAndTaskStatus() {
|
public function testItReturnsCountOfQueuesByNewsletter() {
|
||||||
$taskStatus = ScheduledTaskEntity::STATUS_PAUSED;
|
$taskStatus = ScheduledTaskEntity::STATUS_PAUSED;
|
||||||
|
|
||||||
$task1 = $this->createTask();
|
$task1 = $this->createTask();
|
||||||
@@ -105,13 +105,13 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
|
|
||||||
$task3 = $this->createTask();
|
$task3 = $this->createTask();
|
||||||
$task3->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
$task3->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||||
$this->createQueue($task3, $newsletter);
|
$queue3 = $this->createQueue($task3, $newsletter);
|
||||||
|
$queue3->setCountToProcess(5);
|
||||||
|
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
|
|
||||||
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
|
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
|
||||||
// should return the two queues with tasks of the type STATUS_PAUSED and exclude the queue with task of the type STATUS_SCHEDULED
|
$this->assertSame(7, $this->repository->countAllToProcessByNewsletter($newsletter));
|
||||||
$this->assertSame(2, $this->repository->countAllByNewsletterAndTaskStatus($newsletter, $taskStatus));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
|
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
|
||||||
@@ -140,6 +140,7 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
$queue = new SendingQueueEntity();
|
$queue = new SendingQueueEntity();
|
||||||
$queue->setNewsletter($newsletter);
|
$queue->setNewsletter($newsletter);
|
||||||
$queue->setTask($task);
|
$queue->setTask($task);
|
||||||
|
$queue->setCountToProcess(1);
|
||||||
$this->entityManager->persist($queue);
|
$this->entityManager->persist($queue);
|
||||||
|
|
||||||
return $queue;
|
return $queue;
|
||||||
|
Reference in New Issue
Block a user