Skip to content

Commit fa22d99

Browse files
committed
Ref: FilterRequestInterface
1 parent 9e77ca5 commit fa22d99

26 files changed

Lines changed: 204 additions & 88 deletions

src/Domain/Analytics/Service/AnalyticsService.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PhpList\Core\Domain\Analytics\Repository\UserMessageViewRepository;
1010
use PhpList\Core\Domain\Analytics\Service\Manager\LinkTrackManager;
1111
use PhpList\Core\Domain\Analytics\Service\Manager\UserMessageViewManager;
12+
use PhpList\Core\Domain\Messaging\Model\Filter\MessageFilter;
1213
use PhpList\Core\Domain\Messaging\Repository\MessageRepository;
1314
use PhpList\Core\Domain\Messaging\Repository\UserMessageBounceRepository;
1415
use PhpList\Core\Domain\Messaging\Repository\UserMessageForwardRepository;
@@ -48,7 +49,9 @@ public function __construct(
4849
*/
4950
public function getCampaignStatistics(int $limit = 50, int $lastId = 0): array
5051
{
51-
$messages = $this->messageRepository->getFilteredAfterId($lastId, $limit)->getItems();
52+
$messages = $this->messageRepository
53+
->getFilteredAfterId((new MessageFilter())->setLastId($lastId)->setLimit($limit))
54+
->getItems();
5255

5356
$campaignStats = [];
5457
foreach ($messages as $message) {
@@ -105,7 +108,8 @@ public function getCampaignStatistics(int $limit = 50, int $lastId = 0): array
105108
*/
106109
public function getViewOpensStatistics(int $limit = 50, int $lastId = 0): array
107110
{
108-
$messagesResult = $this->messageRepository->getFilteredAfterId($lastId, $limit);
111+
$messagesResult = $this->messageRepository
112+
->getFilteredAfterId((new MessageFilter())->setLastId($lastId)->setLimit($limit));
109113

110114
$viewStats = [];
111115
foreach ($messagesResult->getItems() as $message) {
@@ -445,7 +449,9 @@ public function getCampaignPerformance(): array
445449
*/
446450
public function getRecentCampaigns(int $limit = 5): array
447451
{
448-
$messages = $this->messageRepository->getFilteredAfterId(0, $limit)->getItems();
452+
$messages = $this->messageRepository
453+
->getFilteredAfterId((new MessageFilter())->setLastId(0)->setLimit($limit))
454+
->getItems();
449455
$recentCampaigns = [];
450456
foreach ($messages as $message) {
451457
$views = $this->userMessageViewManager->countViewsByMessageId($message->getId());

src/Domain/Common/Model/Filter/FilterRequestInterface.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@
66

77
interface FilterRequestInterface
88
{
9-
9+
public function getLastId(): int;
10+
public function getLimit(): int;
11+
public function setLastId(int $lastId): self;
12+
public function setLimit(int $limit): self;
1013
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Domain\Common\Model\Filter;
6+
7+
trait PaginatedFilterTrait
8+
{
9+
private int $lastId = 0;
10+
private int $limit = 50;
11+
12+
public function setLastId(int $lastId): self
13+
{
14+
$this->lastId = $lastId;
15+
16+
return $this;
17+
}
18+
19+
public function getLastId(): int
20+
{
21+
return $this->lastId;
22+
}
23+
24+
public function setLimit(int $limit): self
25+
{
26+
$this->limit = $limit;
27+
28+
return $this;
29+
}
30+
31+
public function getLimit(): int
32+
{
33+
return $this->limit;
34+
}
35+
}

src/Domain/Common/Repository/CursorPaginationTrait.php

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace PhpList\Core\Domain\Common\Repository;
66

7-
use BadMethodCallException;
87
use PhpList\Core\Domain\Common\Model\Filter\FilterRequestInterface;
98
use PhpList\Core\Domain\Common\Model\PaginatedResult;
109

@@ -40,20 +39,8 @@ public function getAfterId(int $lastId, int $limit): PaginatedResult
4039
);
4140
}
4241

43-
/**
44-
* Get filtered + paginated messages for a given owner and status.
45-
*
46-
* @throws BadMethodCallException
47-
* */
48-
public function getFilteredAfterId(
49-
int $lastId,
50-
int $limit,
51-
?FilterRequestInterface $filter = null
52-
): PaginatedResult {
53-
if ($filter === null) {
54-
return $this->getAfterId($lastId, $limit);
55-
}
56-
57-
throw new BadMethodCallException('getFilteredAfterId method not implemented');
42+
public function getFilteredAfterId(FilterRequestInterface $filter): PaginatedResult
43+
{
44+
return $this->getAfterId($filter->getLastId(), $filter->getLimit());
5845
}
5946
}

src/Domain/Common/Repository/Interfaces/PaginatableRepositoryInterface.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,5 @@
99

1010
interface PaginatableRepositoryInterface
1111
{
12-
public function getFilteredAfterId(
13-
int $lastId,
14-
int $limit,
15-
?FilterRequestInterface $filter = null
16-
): PaginatedResult;
12+
public function getFilteredAfterId(FilterRequestInterface $filter): PaginatedResult;
1713
}

src/Domain/Configuration/Model/Filter/EventLogFilter.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,21 @@
66

77
use DateTimeInterface;
88
use PhpList\Core\Domain\Common\Model\Filter\FilterRequestInterface;
9+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilterTrait;
910

1011
class EventLogFilter implements FilterRequestInterface
1112
{
13+
use PaginatedFilterTrait;
14+
1215
public function __construct(
1316
private readonly ?string $page = null,
1417
private readonly ?DateTimeInterface $dateFrom = null,
1518
private readonly ?DateTimeInterface $dateTo = null,
19+
int $lastId = 0,
20+
int $limit = 50,
1621
) {
22+
$this->setLastId($lastId);
23+
$this->setLimit($limit);
1724
}
1825

1926
public function getPage(): ?string

src/Domain/Configuration/Repository/EventLogRepository.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,12 @@ class EventLogRepository extends AbstractRepository implements PaginatableReposi
2121
* @return PaginatedResult<EventLog>
2222
* @throws InvalidArgumentException
2323
*/
24-
public function getFilteredAfterId(
25-
int $lastId,
26-
int $limit,
27-
?FilterRequestInterface $filter = null
28-
): PaginatedResult {
24+
public function getFilteredAfterId(FilterRequestInterface $filter): PaginatedResult
25+
{
26+
$lastId = $filter->getLastId();
27+
$limit = $filter->getLimit();
2928
$queryBuilder = $this->createQueryBuilder('e');
3029

31-
if ($filter === null) {
32-
return $queryBuilder->getQuery()->getResult();
33-
}
34-
3530
if (!$filter instanceof EventLogFilter) {
3631
throw new InvalidArgumentException('Expected EventLogFilter.');
3732
}

src/Domain/Configuration/Service/Manager/EventLogManager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ public function get(
4343
?DateTimeInterface $dateFrom = null,
4444
?DateTimeInterface $dateTo = null
4545
): array {
46-
$filter = new EventLogFilter($page, $dateFrom, $dateTo);
46+
$filter = new EventLogFilter($page, $dateFrom, $dateTo, $lastId, $limit);
4747

48-
return $this->repository->getFilteredAfterId($lastId, $limit, $filter)->getItems();
48+
return $this->repository->getFilteredAfterId($filter)->getItems();
4949
}
5050

5151
public function delete(EventLog $log): void

src/Domain/Identity/Model/Filter/AdminAttributeValueFilter.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
namespace PhpList\Core\Domain\Identity\Model\Filter;
66

77
use PhpList\Core\Domain\Common\Model\Filter\FilterRequestInterface;
8+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilterTrait;
89

910
class AdminAttributeValueFilter implements FilterRequestInterface
1011
{
12+
use PaginatedFilterTrait;
13+
1114
private ?int $adminId = null;
1215

1316
public function setAdminId(?int $adminId): self

src/Domain/Identity/Repository/AdminAttributeValueRepository.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,10 @@ public function findOneByAdminIdAndAttributeId(int $adminId, int $definitionId):
3232
* @return PaginatedResult<SubscriberAttributeValue>
3333
* @throws InvalidArgumentException
3434
*/
35-
public function getFilteredAfterId(
36-
int $lastId,
37-
int $limit,
38-
?FilterRequestInterface $filter = null
39-
): PaginatedResult {
35+
public function getFilteredAfterId(FilterRequestInterface $filter): PaginatedResult
36+
{
37+
$lastId = $filter->getLastId();
38+
$limit = $filter->getLimit();
4039
if (!$filter instanceof AdminAttributeValueFilter) {
4140
throw new InvalidArgumentException('Expected AdminAttributeValueFilter.');
4241
}

0 commit comments

Comments
 (0)