Move prefetch newsletter methods to repository
[MAILPOET-2946]
This commit is contained in:
@ -6,6 +6,7 @@ use MailPoet\Entities\NewsletterEntity;
|
|||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Newsletter\Statistics\NewsletterStatistics;
|
use MailPoet\Newsletter\Statistics\NewsletterStatistics;
|
||||||
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
|
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
|
||||||
use MailPoet\Newsletter\Url as NewsletterUrl;
|
use MailPoet\Newsletter\Url as NewsletterUrl;
|
||||||
@ -25,14 +26,19 @@ class NewslettersResponseBuilder {
|
|||||||
/** @var NewsletterStatisticsRepository */
|
/** @var NewsletterStatisticsRepository */
|
||||||
private $newslettersStatsRepository;
|
private $newslettersStatsRepository;
|
||||||
|
|
||||||
|
/** @var NewslettersRepository */
|
||||||
|
private $newslettersRepository;
|
||||||
|
|
||||||
/** @var EntityManager */
|
/** @var EntityManager */
|
||||||
private $entityManager;
|
private $entityManager;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
EntityManager $entityManager,
|
EntityManager $entityManager,
|
||||||
|
NewslettersRepository $newslettersRepository,
|
||||||
NewsletterStatisticsRepository $newslettersStatsRepository
|
NewsletterStatisticsRepository $newslettersStatsRepository
|
||||||
) {
|
) {
|
||||||
$this->newslettersStatsRepository = $newslettersStatsRepository;
|
$this->newslettersStatsRepository = $newslettersStatsRepository;
|
||||||
|
$this->newslettersRepository = $newslettersRepository;
|
||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,8 +99,8 @@ class NewslettersResponseBuilder {
|
|||||||
public function buildForListing(array $newsletters): array {
|
public function buildForListing(array $newsletters): array {
|
||||||
$statistics = $this->newslettersStatsRepository->getBatchStatistics($newsletters);
|
$statistics = $this->newslettersStatsRepository->getBatchStatistics($newsletters);
|
||||||
$latestQueues = $this->getBatchLatestQueuesWithTasks($newsletters);
|
$latestQueues = $this->getBatchLatestQueuesWithTasks($newsletters);
|
||||||
$this->prefetchOptions($newsletters);
|
$this->newslettersRepository->prefetchOptions($newsletters);
|
||||||
$this->prefetchSegments($newsletters);
|
$this->newslettersRepository->prefetchSegments($newsletters);
|
||||||
|
|
||||||
$data = [];
|
$data = [];
|
||||||
foreach ($newsletters as $newsletter) {
|
foreach ($newsletters as $newsletter) {
|
||||||
@ -255,28 +261,4 @@ class NewslettersResponseBuilder {
|
|||||||
}
|
}
|
||||||
return $latestQueues;
|
return $latestQueues;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function prefetchOptions(array $newsletters) {
|
|
||||||
$this->entityManager->createQueryBuilder()
|
|
||||||
->select('PARTIAL n.{id}, o, opf')
|
|
||||||
->from(NewsletterEntity::class, 'n')
|
|
||||||
->join('n.options', 'o')
|
|
||||||
->join('o.optionField', 'opf')
|
|
||||||
->where('n.id IN (:newsletters)')
|
|
||||||
->setParameter('newsletters', $newsletters)
|
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function prefetchSegments(array $newsletters) {
|
|
||||||
$this->entityManager->createQueryBuilder()
|
|
||||||
->select('PARTIAL n.{id}, ns, s')
|
|
||||||
->from(NewsletterEntity::class, 'n')
|
|
||||||
->join('n.newsletterSegments', 'ns')
|
|
||||||
->join('ns.segment', 's')
|
|
||||||
->where('n.id IN (:newsletters)')
|
|
||||||
->setParameter('newsletters', $newsletters)
|
|
||||||
->getQuery()
|
|
||||||
->getResult();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -322,6 +322,30 @@ class NewslettersRepository extends Repository {
|
|||||||
return count($ids);
|
return count($ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function prefetchOptions(array $newsletters) {
|
||||||
|
$this->entityManager->createQueryBuilder()
|
||||||
|
->select('PARTIAL n.{id}, o, opf')
|
||||||
|
->from(NewsletterEntity::class, 'n')
|
||||||
|
->join('n.options', 'o')
|
||||||
|
->join('o.optionField', 'opf')
|
||||||
|
->where('n.id IN (:newsletters)')
|
||||||
|
->setParameter('newsletters', $newsletters)
|
||||||
|
->getQuery()
|
||||||
|
->getResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function prefetchSegments(array $newsletters) {
|
||||||
|
$this->entityManager->createQueryBuilder()
|
||||||
|
->select('PARTIAL n.{id}, ns, s')
|
||||||
|
->from(NewsletterEntity::class, 'n')
|
||||||
|
->join('n.newsletterSegments', 'ns')
|
||||||
|
->join('ns.segment', 's')
|
||||||
|
->where('n.id IN (:newsletters)')
|
||||||
|
->setParameter('newsletters', $newsletters)
|
||||||
|
->getQuery()
|
||||||
|
->getResult();
|
||||||
|
}
|
||||||
|
|
||||||
private function fetchChildrenIds(array $parentIds) {
|
private function fetchChildrenIds(array $parentIds) {
|
||||||
$ids = $this->entityManager->createQueryBuilder()->select('n.id')
|
$ids = $this->entityManager->createQueryBuilder()->select('n.id')
|
||||||
->from(NewsletterEntity::class, 'n')
|
->from(NewsletterEntity::class, 'n')
|
||||||
|
Reference in New Issue
Block a user