Add endpoint for subscriber statistics

[MAILPOET-3069]
This commit is contained in:
Pavel Dohnal
2020-08-05 15:11:22 +02:00
committed by Veljko V
parent c1c5885398
commit d96d207c53
4 changed files with 141 additions and 0 deletions

View File

@ -0,0 +1,48 @@
<?php
namespace MailPoet\Subscribers\Statistics;
use MailPoet\Doctrine\Repository;
use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Entities\StatisticsNewsletterEntity;
use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Entities\SubscriberEntity;
/**
* @extends Repository<SubscriberEntity>
*/
class SubscriberStatisticsRepository extends Repository {
protected function getEntityClassName() {
return SubscriberEntity::class;
}
public function getStatistics(SubscriberEntity $subscriber) {
return new SubscriberStatistics(
$this->getStatisticsClickCount($subscriber),
$this->getStatisticsOpenCount($subscriber),
$this->getTotalSentCount($subscriber)
);
}
private function getStatisticsClickCount(SubscriberEntity $subscriber): int {
return $this->getStatisticsCount(StatisticsClickEntity::class, $subscriber);
}
private function getStatisticsOpenCount(SubscriberEntity $subscriber): int {
return $this->getStatisticsCount(StatisticsOpenEntity::class, $subscriber);
}
private function getTotalSentCount(SubscriberEntity $subscriber): int {
return $this->getStatisticsCount(StatisticsNewsletterEntity::class, $subscriber);
}
private function getStatisticsCount($entityName, SubscriberEntity $subscriber): int {
return (int)$this->entityManager->createQueryBuilder()
->select('COUNT(DISTINCT stats.newsletter) as cnt')
->from($entityName, 'stats')
->where('stats.subscriber = :subscriber')
->setParameter('subscriber', $subscriber)
->getQuery()
->getSingleScalarResult();
}
}