Skip to content

Commit 29e567c

Browse files
committed
uniqueByMessageId
1 parent 6e983d9 commit 29e567c

4 files changed

Lines changed: 23 additions & 2 deletions

File tree

src/Domain/Analytics/Repository/UserMessageViewRepository.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ public function countByMessageId(int $messageId): int
2323
->getSingleScalarResult();
2424
}
2525

26+
public function uniqueByMessageId(int $messageId): int
27+
{
28+
return (int) $this->createQueryBuilder('umv')
29+
->select('COUNT(DISTINCT umv.ip)')
30+
->where('umv.messageId = :messageId')
31+
->setParameter('messageId', $messageId)
32+
->getQuery()
33+
->getSingleScalarResult();
34+
}
35+
2636
/**
2737
* Counts views between two dates.
2838
*

src/Domain/Analytics/Service/AnalyticsService.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public function getCampaignStatistics(int $limit = 50, int $lastId = 0): array
5656
$campaignStats = [];
5757
foreach ($messages as $message) {
5858
$views = $this->userMessageViewManager->countViewsByMessageId($message->getId());
59+
$uniqueViews = $this->userMessageViewManager->countUniqueViewsByMessageId($message->getId());
5960
$linkTracks = $this->linkTrackManager->getLinkTracksByMessageId($message->getId());
6061

6162
$totalClicks = 0;
@@ -79,7 +80,7 @@ public function getCampaignStatistics(int $limit = 50, int $lastId = 0): array
7980
'sent' => $sentCount,
8081
'bounces' => $bounces,
8182
'forwards' => $forwards,
82-
'uniqueViews' => $views,
83+
'uniqueViews' => $uniqueViews,
8384
'totalClicks' => $totalClicks,
8485
'uniqueClicks' => $uniqueClicks,
8586
];

src/Domain/Analytics/Service/Manager/UserMessageViewManager.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public function countViewsByMessageId(int $messageId): int
2525
return $this->userMessageViewRepository->countByMessageId($messageId);
2626
}
2727

28+
public function countUniqueViewsByMessageId(int $messageId): int
29+
{
30+
return $this->userMessageViewRepository->uniqueByMessageId($messageId);
31+
}
32+
2833
public function countViewsBetween(DateTimeInterface $start, DateTimeInterface $end): int
2934
{
3035
return $this->userMessageViewRepository->countBetween($start, $end);

tests/Unit/Domain/Analytics/Service/AnalyticsServiceTest.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ public function testGetCampaignStatistics(): void
9898
->with($messageId)
9999
->willReturn(10);
100100

101+
$this->userMessageViewManager->expects(self::once())
102+
->method('countUniqueViewsByMessageId')
103+
->with($messageId)
104+
->willReturn(3);
105+
101106
$this->linkTrackManager->expects(self::once())
102107
->method('getLinkTracksByMessageId')
103108
->with($messageId)
@@ -128,7 +133,7 @@ public function testGetCampaignStatistics(): void
128133
self::assertSame(15, $campaign['sent']);
129134
self::assertSame(3, $campaign['bounces']);
130135
self::assertSame(2, $campaign['forwards']);
131-
self::assertSame(10, $campaign['uniqueViews']);
136+
self::assertSame(3, $campaign['uniqueViews']);
132137
self::assertSame(5, $campaign['totalClicks']);
133138
self::assertSame(2, $campaign['uniqueClicks']);
134139
}

0 commit comments

Comments
 (0)