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);
|
||||
}
|
||||
if ($relation === self::RELATION_SCHEDULED) {
|
||||
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllByNewsletterAndTaskStatus(
|
||||
$newsletter,
|
||||
SendingQueueEntity::STATUS_SCHEDULED
|
||||
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllToProcessByNewsletter(
|
||||
$newsletter
|
||||
);
|
||||
}
|
||||
|
||||
@@ -170,9 +169,8 @@ class NewslettersResponseBuilder {
|
||||
$data['segments'] = [];
|
||||
$data['options'] = $this->buildOptions($newsletter);
|
||||
$data['total_sent'] = $statistics ? $statistics->getTotalSentCount() : 0;
|
||||
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllByNewsletterAndTaskStatus(
|
||||
$newsletter,
|
||||
SendingQueueEntity::STATUS_SCHEDULED
|
||||
$data['total_scheduled'] = $this->sendingQueuesRepository->countAllToProcessByNewsletter(
|
||||
$newsletter
|
||||
);
|
||||
} elseif ($newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION) {
|
||||
$data['segments'] = $this->buildSegments($newsletter);
|
||||
|
@@ -73,14 +73,11 @@ class SendingQueuesRepository extends Repository {
|
||||
return $queryBuilder->getQuery()->getOneOrNullResult();
|
||||
}
|
||||
|
||||
public function countAllByNewsletterAndTaskStatus(NewsletterEntity $newsletter, string $status): int {
|
||||
public function countAllToProcessByNewsletter(NewsletterEntity $newsletter): int {
|
||||
return intval($this->entityManager->createQueryBuilder()
|
||||
->select('count(s.task)')
|
||||
->select('sum(s.countToProcess)')
|
||||
->from(SendingQueueEntity::class, 's')
|
||||
->join('s.task', 't')
|
||||
->where('t.status = :status')
|
||||
->andWhere('s.newsletter = :newsletter')
|
||||
->setParameter('status', $status)
|
||||
->setParameter('newsletter', $newsletter)
|
||||
->getQuery()
|
||||
->getSingleScalarResult());
|
||||
@@ -141,21 +138,21 @@ class SendingQueuesRepository extends Repository {
|
||||
|
||||
return $this->doctrineRepository->createQueryBuilder('q')
|
||||
->select('
|
||||
n.type as newsletterType,
|
||||
q.meta as sendingQueueMeta,
|
||||
CASE
|
||||
n.type as newsletterType,
|
||||
q.meta as sendingQueueMeta,
|
||||
CASE
|
||||
WHEN COUNT(s.id) > 0 THEN true
|
||||
ELSE false
|
||||
END as sentToSegment,
|
||||
CASE
|
||||
CASE
|
||||
WHEN t.processedAt >= :sevenDaysAgo THEN true
|
||||
ELSE false
|
||||
END as sentLast7Days,
|
||||
CASE
|
||||
CASE
|
||||
WHEN t.processedAt >= :thirtyDaysAgo THEN true
|
||||
ELSE false
|
||||
END as sentLast30Days,
|
||||
CASE
|
||||
CASE
|
||||
WHEN t.processedAt >= :threeMonthsAgo THEN true
|
||||
ELSE false
|
||||
END as sentLast3Months')
|
||||
|
@@ -506,9 +506,12 @@ class Newsletter {
|
||||
if ($queue['processed_at'] ?? null) {
|
||||
$scheduledTask->setProcessedAt($queue['processed_at']);
|
||||
}
|
||||
if ($queue['meta']) {
|
||||
if (isset($queue['meta'])) {
|
||||
$sendingQueue->setMeta($queue['meta']);
|
||||
}
|
||||
if (isset($queue['count_to_process'])) {
|
||||
$sendingQueue->setCountToProcess($queue['count_to_process']);
|
||||
}
|
||||
$entityManager->persist($sendingQueue);
|
||||
$sendingQueue->setNewsletter($newsletter);
|
||||
$scheduledTask->setStatus($queue['status']);
|
||||
|
@@ -89,7 +89,7 @@ class AutomationListingCest {
|
||||
->withWelcomeTypeForSegment()
|
||||
->withCreatedAt('2020-01-20 12:00:00')
|
||||
->withActiveStatus()
|
||||
->withScheduledQueue()
|
||||
->withScheduledQueue(['count_to_process' => 2])
|
||||
->withScheduledQueue()
|
||||
->withScheduledQueue(['status' => ScheduledTaskEntity::STATUS_COMPLETED, 'count_processed' => 1])
|
||||
->create();
|
||||
|
@@ -91,7 +91,7 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
||||
verify($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
|
||||
}
|
||||
|
||||
public function testItReturnsCountOfQueuesByNewsletterAndTaskStatus() {
|
||||
public function testItReturnsCountOfQueuesByNewsletter() {
|
||||
$taskStatus = ScheduledTaskEntity::STATUS_PAUSED;
|
||||
|
||||
$task1 = $this->createTask();
|
||||
@@ -105,13 +105,13 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
||||
|
||||
$task3 = $this->createTask();
|
||||
$task3->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
$this->createQueue($task3, $newsletter);
|
||||
$queue3 = $this->createQueue($task3, $newsletter);
|
||||
$queue3->setCountToProcess(5);
|
||||
|
||||
$this->entityManager->flush();
|
||||
|
||||
$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(2, $this->repository->countAllByNewsletterAndTaskStatus($newsletter, $taskStatus));
|
||||
$this->assertSame(7, $this->repository->countAllToProcessByNewsletter($newsletter));
|
||||
}
|
||||
|
||||
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
|
||||
@@ -140,6 +140,7 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
||||
$queue = new SendingQueueEntity();
|
||||
$queue->setNewsletter($newsletter);
|
||||
$queue->setTask($task);
|
||||
$queue->setCountToProcess(1);
|
||||
$this->entityManager->persist($queue);
|
||||
|
||||
return $queue;
|
||||
|
Reference in New Issue
Block a user