diff --git a/mailpoet/lib/API/JSON/ResponseBuilders/NewslettersResponseBuilder.php b/mailpoet/lib/API/JSON/ResponseBuilders/NewslettersResponseBuilder.php index 66ee9d56fb..5eb0f48204 100644 --- a/mailpoet/lib/API/JSON/ResponseBuilders/NewslettersResponseBuilder.php +++ b/mailpoet/lib/API/JSON/ResponseBuilders/NewslettersResponseBuilder.php @@ -5,8 +5,8 @@ namespace MailPoet\API\JSON\ResponseBuilders; use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SendingQueueEntity; -use MailPoet\Models\SendingQueue; use MailPoet\Newsletter\NewslettersRepository; +use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Statistics\NewsletterStatistics; use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository; use MailPoet\Newsletter\Url as NewsletterUrl; @@ -35,16 +35,21 @@ class NewslettersResponseBuilder { /** @var NewsletterUrl */ private $newsletterUrl; + /** @var SendingQueuesRepository */ + private $sendingQueuesRepository; + public function __construct( EntityManager $entityManager, NewslettersRepository $newslettersRepository, NewsletterStatisticsRepository $newslettersStatsRepository, - NewsletterUrl $newsletterUrl + NewsletterUrl $newsletterUrl, + SendingQueuesRepository $sendingQueuesRepository ) { $this->newslettersStatsRepository = $newslettersStatsRepository; $this->newslettersRepository = $newslettersRepository; $this->entityManager = $entityManager; $this->newsletterUrl = $newsletterUrl; + $this->sendingQueuesRepository = $sendingQueuesRepository; } public function build(NewsletterEntity $newsletter, $relations = []) { @@ -86,9 +91,10 @@ class NewslettersResponseBuilder { $data['children_count'] = $this->newslettersStatsRepository->getChildrenCount($newsletter); } if ($relation === self::RELATION_SCHEDULED) { - $data['total_scheduled'] = (int)SendingQueue::findTaskByNewsletterId($newsletter->getId()) - ->where('tasks.status', SendingQueue::STATUS_SCHEDULED) - ->count(); + $data['total_scheduled'] = $this->sendingQueuesRepository->countAllByNewsletterAndTaskStatus( + $newsletter, + SendingQueueEntity::STATUS_SCHEDULED + ); } if ($relation === self::RELATION_STATISTICS) { @@ -150,9 +156,10 @@ class NewslettersResponseBuilder { $data['segments'] = []; $data['options'] = $this->buildOptions($newsletter); $data['total_sent'] = $statistics ? $statistics->getTotalSentCount() : 0; - $data['total_scheduled'] = (int)SendingQueue::findTaskByNewsletterId($newsletter->getId()) - ->where('tasks.status', SendingQueue::STATUS_SCHEDULED) - ->count(); + $data['total_scheduled'] = $this->sendingQueuesRepository->countAllByNewsletterAndTaskStatus( + $newsletter, + SendingQueueEntity::STATUS_SCHEDULED + ); } elseif ($newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION) { $data['segments'] = $this->buildSegments($newsletter); $data['children_count'] = $this->newslettersStatsRepository->getChildrenCount($newsletter); diff --git a/mailpoet/tests/integration/API/JSON/ResponseBuilders/NewslettersResponseBuilderTest.php b/mailpoet/tests/integration/API/JSON/ResponseBuilders/NewslettersResponseBuilderTest.php index 1b60199c4d..1cb2bac203 100644 --- a/mailpoet/tests/integration/API/JSON/ResponseBuilders/NewslettersResponseBuilderTest.php +++ b/mailpoet/tests/integration/API/JSON/ResponseBuilders/NewslettersResponseBuilderTest.php @@ -6,6 +6,7 @@ use Codeception\Util\Stub; use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\NewsletterEntity; use MailPoet\Newsletter\NewslettersRepository; +use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Statistics\NewsletterStatistics; use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository; use MailPoet\Newsletter\Url; @@ -41,7 +42,8 @@ class NewslettersResponseBuilderTest extends \MailPoetTest { ]); $newsletterRepository = Stub::make(NewslettersRepository::class); $newsletterUrl = $this->diContainer->get(Url::class); - $responseBuilder = new NewslettersResponseBuilder($em, $newsletterRepository, $newsletterStatsRepository, $newsletterUrl); + $sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class); + $responseBuilder = new NewslettersResponseBuilder($em, $newsletterRepository, $newsletterStatsRepository, $newsletterUrl, $sendingQueuesRepository); $response = $responseBuilder->build($newsletter, [ NewslettersResponseBuilder::RELATION_CHILDREN_COUNT, NewslettersResponseBuilder::RELATION_TOTAL_SENT, diff --git a/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php b/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php index de2471c8ca..f92f974594 100644 --- a/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php +++ b/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php @@ -33,6 +33,7 @@ use MailPoet\Newsletter\Preview\SendPreviewException; use MailPoet\Newsletter\Scheduler\PostNotificationScheduler; use MailPoet\Newsletter\Scheduler\Scheduler; use MailPoet\Newsletter\Segment\NewsletterSegmentRepository; +use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository; use MailPoet\Newsletter\Url; use MailPoet\Router\Router; @@ -107,7 +108,8 @@ class NewslettersTest extends \MailPoetTest { $this->diContainer->get(EntityManager::class), $this->makeEmpty(WCHelper::class) ), - $this->diContainer->get(Url::class) + $this->diContainer->get(Url::class), + $this->diContainer->get(SendingQueuesRepository::class) ), ] );