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 {
|
public function getStatisticsClickCount(SubscriberEntity $subscriber, ?Carbon $startTime = null): int {
|
||||||
$queryBuilder = $this->getStatisticsCountQuery(StatisticsClickEntity::class, $subscriber);
|
$queryBuilder = $this->getStatisticsCountQuery(StatisticsClickEntity::class, $subscriber);
|
||||||
if ($startTime) {
|
if ($startTime) {
|
||||||
$queryBuilder
|
$this->applyDateConstraint($queryBuilder, $startTime);
|
||||||
->andWhere('stats.createdAt >= :dateTime')
|
|
||||||
->setParameter('dateTime', $startTime);
|
|
||||||
}
|
}
|
||||||
return (int)$queryBuilder
|
return (int)$queryBuilder
|
||||||
->getQuery()
|
->getQuery()
|
||||||
@ -60,8 +58,7 @@ class SubscriberStatisticsRepository extends Repository {
|
|||||||
public function getStatisticsOpenCountQuery(SubscriberEntity $subscriber, ?Carbon $startTime = null): QueryBuilder {
|
public function getStatisticsOpenCountQuery(SubscriberEntity $subscriber, ?Carbon $startTime = null): QueryBuilder {
|
||||||
$queryBuilder = $this->getStatisticsCountQuery(StatisticsOpenEntity::class, $subscriber);
|
$queryBuilder = $this->getStatisticsCountQuery(StatisticsOpenEntity::class, $subscriber);
|
||||||
if ($startTime) {
|
if ($startTime) {
|
||||||
$queryBuilder->join(StatisticsNewsletterEntity::class, 'sent_stats', 'WITH', 'stats.newsletter = sent_stats.newsletter AND sent_stats.sentAt >= :dateTime')
|
$this->applyDateConstraint($queryBuilder, $startTime);
|
||||||
->setParameter('dateTime', $startTime);
|
|
||||||
}
|
}
|
||||||
return $queryBuilder;
|
return $queryBuilder;
|
||||||
}
|
}
|
||||||
@ -133,4 +130,11 @@ class SubscriberStatisticsRepository extends Repository {
|
|||||||
$this->wcHelper
|
$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 {
|
public function testItFetchesClickCount(): void {
|
||||||
$yearAgo = Carbon::now()->subYear();
|
$yearAgo = Carbon::now()->subYear();
|
||||||
$monthAgo = Carbon::now()->subMonth();
|
$monthAgo = Carbon::now()->subMonth();
|
||||||
|
$fiveYearsAgo = Carbon::now()->subYears(5);
|
||||||
|
|
||||||
$subscriber = (new Subscriber())->create();
|
$subscriber = (new Subscriber())->create();
|
||||||
|
|
||||||
$newsletter = (new Newsletter())->withSendingQueue()->create();
|
$newsletter = (new Newsletter())->withSendingQueue()->create();
|
||||||
$link = (new NewsletterLink($newsletter))->create();
|
$link = (new NewsletterLink($newsletter))->create();
|
||||||
|
$sendStat = (new StatisticsNewsletters($newsletter, $subscriber))->withSentAt($monthAgo)->create();
|
||||||
$click = (new StatisticsClicks($link, $subscriber))
|
$click = (new StatisticsClicks($link, $subscriber))
|
||||||
->withCreatedAt($monthAgo)
|
->withCreatedAt($monthAgo)
|
||||||
->create();
|
->create();
|
||||||
|
|
||||||
$newsletter2 = (new Newsletter())->withSendingQueue()->create();
|
$newsletter2 = (new Newsletter())->withSendingQueue()->create();
|
||||||
$link2 = (new NewsletterLink($newsletter2))->create();
|
$link2 = (new NewsletterLink($newsletter2))->create();
|
||||||
|
$sendStat2 = (new StatisticsNewsletters($newsletter2, $subscriber))->withSentAt($yearAgo)->create();
|
||||||
$click2 = (new StatisticsClicks($link2, $subscriber))
|
$click2 = (new StatisticsClicks($link2, $subscriber))
|
||||||
->withCreatedAt($yearAgo)
|
->withCreatedAt($yearAgo)
|
||||||
->create();
|
->create();
|
||||||
|
|
||||||
|
|
||||||
$newsletter3 = (new Newsletter())->withSendingQueue()->create();
|
$newsletter3 = (new Newsletter())->withSendingQueue()->create();
|
||||||
$link3 = (new NewsletterLink($newsletter3))->create();
|
$link3 = (new NewsletterLink($newsletter3))->create();
|
||||||
|
$sendStat3 = (new StatisticsNewsletters($newsletter3, $subscriber))->withSentAt($fiveYearsAgo)->create();
|
||||||
$click3 = (new StatisticsClicks($link3, $subscriber))
|
$click3 = (new StatisticsClicks($link3, $subscriber))
|
||||||
->withCreatedAt(Carbon::now()->subYears(5))
|
->withCreatedAt($fiveYearsAgo)
|
||||||
->create();
|
->create();
|
||||||
|
|
||||||
$lifetimeCount = $this->repository->getStatisticsClickCount($subscriber, null);
|
$lifetimeCount = $this->repository->getStatisticsClickCount($subscriber, null);
|
||||||
|
Reference in New Issue
Block a user