Add NewsletterListingRepository, use it for newsletters data

[MAILPOET-2645]
This commit is contained in:
Jan Jakeš
2020-02-27 14:46:36 +01:00
committed by Jack Kitterhing
parent f1e044aa28
commit 51882b43cf
5 changed files with 197 additions and 49 deletions

View File

@ -76,6 +76,45 @@ class NewslettersResponseBuilder {
return $data;
}
public function buildForListing(NewsletterEntity $newsletter): array {
$data = [
'id' => (string)$newsletter->getId(), // (string) for BC
'hash' => $newsletter->getHash(),
'subject' => $newsletter->getSubject(),
'type' => $newsletter->getType(),
'status' => $newsletter->getStatus(),
'sent_at' => ($sentAt = $newsletter->getSentAt()) ? $sentAt->format(self::DATE_FORMAT) : null,
'updated_at' => $newsletter->getUpdatedAt()->format(self::DATE_FORMAT),
'deleted_at' => ($deletedAt = $newsletter->getDeletedAt()) ? $deletedAt->format(self::DATE_FORMAT) : null,
'segments' => [],
'queue' => false,
'statistics' => false,
];
if ($newsletter->getType() === NewsletterEntity::TYPE_STANDARD) {
$data['segments'] = $this->buildSegments($newsletter);
$data['statistics'] = $this->newslettersStatsRepository->getStatistics($newsletter)->asArray();
$data['queue'] = ($queue = $newsletter->getLatestQueue()) ? $this->buildQueue($queue) : false; // false for BC
} elseif (in_array($newsletter->getType(), [NewsletterEntity::TYPE_WELCOME, NewsletterEntity::TYPE_AUTOMATIC], true)) {
$data['segments'] = [];
$data['statistics'] = $this->newslettersStatsRepository->getStatistics($newsletter)->asArray();
$data['options'] = $this->buildOptions($newsletter);
$data['total_sent'] = $this->newslettersStatsRepository->getTotalSentCount($newsletter);
$data['total_scheduled'] = (int)SendingQueue::findTaskByNewsletterId($newsletter->getId())
->where('tasks.status', SendingQueue::STATUS_SCHEDULED)
->count();
} elseif ($newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION) {
$data['segments'] = $this->buildSegments($newsletter);
$data['children_count'] = $this->newslettersStatsRepository->getChildrenCount($newsletter);
$data['options'] = $this->buildOptions($newsletter);
} elseif ($newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY) {
$data['segments'] = $this->buildSegments($newsletter);
$data['statistics'] = $this->newslettersStatsRepository->getStatistics($newsletter)->asArray();
$data['queue'] = ($queue = $newsletter->getLatestQueue()) ? $this->buildQueue($queue) : false; // false for BC
}
return $data;
}
private function buildSegments(NewsletterEntity $newsletter) {
$output = [];
foreach ($newsletter->getNewsletterSegments() as $newsletterSegment) {