Filter click stats by newsletter send time
MAILPOET-5508
This commit is contained in:
committed by
Aschepikov
parent
44b1ab580f
commit
2987c61d77
@ -48,9 +48,7 @@ class SubscriberStatisticsRepository extends Repository {
|
||||
public function getStatisticsClickCount(SubscriberEntity $subscriber, ?Carbon $startTime = null): int {
|
||||
$queryBuilder = $this->getStatisticsCountQuery(StatisticsClickEntity::class, $subscriber);
|
||||
if ($startTime) {
|
||||
$queryBuilder
|
||||
->andWhere('stats.createdAt >= :dateTime')
|
||||
->setParameter('dateTime', $startTime);
|
||||
$this->applyDateConstraint($queryBuilder, $startTime);
|
||||
}
|
||||
return (int)$queryBuilder
|
||||
->getQuery()
|
||||
@ -60,8 +58,7 @@ class SubscriberStatisticsRepository extends Repository {
|
||||
public function getStatisticsOpenCountQuery(SubscriberEntity $subscriber, ?Carbon $startTime = null): QueryBuilder {
|
||||
$queryBuilder = $this->getStatisticsCountQuery(StatisticsOpenEntity::class, $subscriber);
|
||||
if ($startTime) {
|
||||
$queryBuilder->join(StatisticsNewsletterEntity::class, 'sent_stats', 'WITH', 'stats.newsletter = sent_stats.newsletter AND sent_stats.sentAt >= :dateTime')
|
||||
->setParameter('dateTime', $startTime);
|
||||
$this->applyDateConstraint($queryBuilder, $startTime);
|
||||
}
|
||||
return $queryBuilder;
|
||||
}
|
||||
@ -133,4 +130,11 @@ class SubscriberStatisticsRepository extends Repository {
|
||||
$this->wcHelper
|
||||
);
|
||||
}
|
||||
|
||||
private function applyDateConstraint(QueryBuilder $queryBuilder, Carbon $startTime): QueryBuilder {
|
||||
$queryBuilder->join(StatisticsNewsletterEntity::class, 'sent_stats', 'WITH', 'stats.newsletter = sent_stats.newsletter AND stats.subscriber = sent_stats.subscriber AND sent_stats.sentAt >= :dateTime')
|
||||
->setParameter('dateTime', $startTime);
|
||||
|
||||
return $queryBuilder;
|
||||
}
|
||||
}
|
||||
|
@ -27,26 +27,29 @@ class SubscriberStatisticsRepositoryTest extends \MailPoetTest {
|
||||
public function testItFetchesClickCount(): void {
|
||||
$yearAgo = Carbon::now()->subYear();
|
||||
$monthAgo = Carbon::now()->subMonth();
|
||||
$fiveYearsAgo = Carbon::now()->subYears(5);
|
||||
|
||||
$subscriber = (new Subscriber())->create();
|
||||
|
||||
$newsletter = (new Newsletter())->withSendingQueue()->create();
|
||||
$link = (new NewsletterLink($newsletter))->create();
|
||||
$sendStat = (new StatisticsNewsletters($newsletter, $subscriber))->withSentAt($monthAgo)->create();
|
||||
$click = (new StatisticsClicks($link, $subscriber))
|
||||
->withCreatedAt($monthAgo)
|
||||
->create();
|
||||
|
||||
$newsletter2 = (new Newsletter())->withSendingQueue()->create();
|
||||
$link2 = (new NewsletterLink($newsletter2))->create();
|
||||
$sendStat2 = (new StatisticsNewsletters($newsletter2, $subscriber))->withSentAt($yearAgo)->create();
|
||||
$click2 = (new StatisticsClicks($link2, $subscriber))
|
||||
->withCreatedAt($yearAgo)
|
||||
->create();
|
||||
|
||||
|
||||
$newsletter3 = (new Newsletter())->withSendingQueue()->create();
|
||||
$link3 = (new NewsletterLink($newsletter3))->create();
|
||||
$sendStat3 = (new StatisticsNewsletters($newsletter3, $subscriber))->withSentAt($fiveYearsAgo)->create();
|
||||
$click3 = (new StatisticsClicks($link3, $subscriber))
|
||||
->withCreatedAt(Carbon::now()->subYears(5))
|
||||
->withCreatedAt($fiveYearsAgo)
|
||||
->create();
|
||||
|
||||
$lifetimeCount = $this->repository->getStatisticsClickCount($subscriber, null);
|
||||
|
Reference in New Issue
Block a user