Skip to content

Commit 45e43f8

Browse files
TatevikGrtatevikg1
andauthored
ListMessage get from repository (#350)
Co-authored-by: Tatevik <[email protected]>
1 parent 78359ae commit 45e43f8

File tree

8 files changed

+79
-36
lines changed

8 files changed

+79
-36
lines changed

src/Domain/Messaging/Model/Message.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,4 @@ public function getListMessages(): Collection
193193
{
194194
return $this->listMessages;
195195
}
196-
197-
public function getSubscriberLists(): Collection
198-
{
199-
return $this->listMessages->map(
200-
fn(ListMessage $lm) => $lm->getList()
201-
);
202-
}
203196
}

src/Domain/Messaging/Repository/MessageRepository.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PhpList\Core\Domain\Common\Repository\Interfaces\PaginatableRepositoryInterface;
1010
use PhpList\Core\Domain\Messaging\Model\Filter\MessageFilter;
1111
use PhpList\Core\Domain\Messaging\Model\Message;
12+
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
1213

1314
class MessageRepository extends AbstractRepository implements PaginatableRepositoryInterface
1415
{
@@ -50,4 +51,16 @@ public function getFilteredAfterId(int $lastId, int $limit, ?FilterRequestInterf
5051
->getQuery()
5152
->getResult();
5253
}
54+
55+
/** @return Message[] */
56+
public function getMessagesByList(SubscriberList $list): array
57+
{
58+
return $this->createQueryBuilder('m')
59+
->join('m.listMessages', 'lm')
60+
->join('lm.subscriberList', 'l')
61+
->where('l = :list')
62+
->setParameter('list', $list)
63+
->getQuery()
64+
->getResult();
65+
}
5366
}

src/Domain/Messaging/Service/Manager/ListMessageManager.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,26 @@
99
use PhpList\Core\Domain\Messaging\Model\ListMessage;
1010
use PhpList\Core\Domain\Messaging\Model\Message;
1111
use PhpList\Core\Domain\Messaging\Repository\ListMessageRepository;
12+
use PhpList\Core\Domain\Messaging\Repository\MessageRepository;
1213
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
14+
use PhpList\Core\Domain\Subscription\Repository\SubscriberListRepository;
1315

1416
class ListMessageManager
1517
{
1618
private ListMessageRepository $listMessageRepository;
19+
private MessageRepository $messageRepository;
20+
private SubscriberListRepository $subscriberListRepository;
1721
private EntityManagerInterface $entityManager;
1822

1923
public function __construct(
2024
ListMessageRepository $listMessageRepository,
21-
EntityManagerInterface $entityManager
25+
MessageRepository $messageRepository,
26+
SubscriberListRepository $subscriberListRepository,
27+
EntityManagerInterface $entityManager,
2228
) {
2329
$this->listMessageRepository = $listMessageRepository;
30+
$this->messageRepository = $messageRepository;
31+
$this->subscriberListRepository = $subscriberListRepository;
2432
$this->entityManager = $entityManager;
2533
}
2634

@@ -76,4 +84,14 @@ public function removeAllListAssociationsForMessage(Message $message): void
7684
{
7785
$this->listMessageRepository->removeAllListAssociationsForMessage($message);
7886
}
87+
88+
public function getMessagesByList(SubscriberList $list): array
89+
{
90+
return $this->messageRepository->getMessagesByList($list);
91+
}
92+
93+
public function getListByMessage(Message $message): array
94+
{
95+
return $this->subscriberListRepository->getListsByMessage($message);
96+
}
7997
}

src/Domain/Subscription/Model/SubscriberList.php

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ public function getName(): string
9999
public function setName(string $name): self
100100
{
101101
$this->name = $name;
102-
103102
return $this;
104103
}
105104

@@ -146,7 +145,6 @@ public function isPublic(): bool
146145
public function setPublic(bool $public): self
147146
{
148147
$this->public = $public;
149-
150148
return $this;
151149
}
152150

@@ -158,7 +156,6 @@ public function getCategory(): string
158156
public function setCategory(string $category): self
159157
{
160158
$this->category = $category;
161-
162159
return $this;
163160
}
164161

@@ -170,7 +167,6 @@ public function getOwner(): ?Administrator
170167
public function setOwner(Administrator $owner): self
171168
{
172169
$this->owner = $owner;
173-
174170
return $this;
175171
}
176172

@@ -223,19 +219,11 @@ public function getUpdatedAt(): ?DateTime
223219
public function updateUpdatedAt(): DomainModel
224220
{
225221
$this->updatedAt = new DateTime();
226-
227222
return $this;
228223
}
229224

230225
public function getListMessages(): Collection
231226
{
232227
return $this->listMessages;
233228
}
234-
235-
public function getMessages(): Collection
236-
{
237-
return $this->listMessages->map(
238-
fn(ListMessage $lm) => $lm->getMessage()
239-
);
240-
}
241229
}

src/Domain/Subscription/Repository/SubscriberListRepository.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use PhpList\Core\Domain\Common\Repository\CursorPaginationTrait;
99
use PhpList\Core\Domain\Common\Repository\Interfaces\PaginatableRepositoryInterface;
1010
use PhpList\Core\Domain\Identity\Model\Administrator;
11+
use PhpList\Core\Domain\Messaging\Model\Message;
1112
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
1213

1314
/**
@@ -32,4 +33,16 @@ public function findWithSubscription($id)
3233
->getQuery()
3334
->getOneOrNullResult();
3435
}
36+
37+
/** @return SubscriberList[] */
38+
public function getListsByMessage(Message $message): array
39+
{
40+
return $this->createQueryBuilder('l')
41+
->join('l.listMessages', 'lm')
42+
->join('lm.message', 'm')
43+
->where('m = :message')
44+
->setParameter('message', $message)
45+
->getQuery()
46+
->getResult();
47+
}
3548
}

src/Domain/Subscription/Service/Provider/SubscriberProvider.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,20 @@
66

77
use PhpList\Core\Domain\Messaging\Model\Message;
88
use PhpList\Core\Domain\Subscription\Model\Subscriber;
9-
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
9+
use PhpList\Core\Domain\Subscription\Repository\SubscriberListRepository;
1010
use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository;
1111

1212
class SubscriberProvider
1313
{
1414
private SubscriberRepository $subscriberRepository;
15+
private SubscriberListRepository $subscriberListRepository;
1516

16-
public function __construct(SubscriberRepository $subscriberRepository)
17-
{
17+
public function __construct(
18+
SubscriberRepository $subscriberRepository,
19+
SubscriberListRepository $subscriberListRepository,
20+
) {
1821
$this->subscriberRepository = $subscriberRepository;
22+
$this->subscriberListRepository = $subscriberListRepository;
1923
}
2024

2125
/**
@@ -26,13 +30,11 @@ public function __construct(SubscriberRepository $subscriberRepository)
2630
*/
2731
public function getSubscribersForMessage(Message $message): array
2832
{
29-
$listIds = $message->getSubscriberLists()
30-
->map(fn(SubscriberList $list) => $list->getId())
31-
->toArray();
33+
$lists = $this->subscriberListRepository->getListsByMessage($message);
3234

3335
$subscribers = [];
34-
foreach ($listIds as $listId) {
35-
$listSubscribers = $this->subscriberRepository->getSubscribersBySubscribedListId($listId);
36+
foreach ($lists as $list) {
37+
$listSubscribers = $this->subscriberRepository->getSubscribersBySubscribedListId($list->getId());
3638
foreach ($listSubscribers as $subscriber) {
3739
$subscribers[$subscriber->getId()] = $subscriber;
3840
}

tests/Unit/Domain/Messaging/Service/ListMessageManagerTest.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
use PhpList\Core\Domain\Messaging\Model\ListMessage;
1010
use PhpList\Core\Domain\Messaging\Model\Message;
1111
use PhpList\Core\Domain\Messaging\Repository\ListMessageRepository;
12+
use PhpList\Core\Domain\Messaging\Repository\MessageRepository;
1213
use PhpList\Core\Domain\Messaging\Service\Manager\ListMessageManager;
1314
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
15+
use PhpList\Core\Domain\Subscription\Repository\SubscriberListRepository;
1416
use PHPUnit\Framework\MockObject\MockObject;
1517
use PHPUnit\Framework\TestCase;
1618

@@ -26,8 +28,10 @@ protected function setUp(): void
2628
$this->entityManager = $this->createMock(EntityManagerInterface::class);
2729

2830
$this->manager = new ListMessageManager(
29-
$this->listMessageRepository,
30-
$this->entityManager
31+
listMessageRepository: $this->listMessageRepository,
32+
messageRepository: $this->createMock(MessageRepository::class),
33+
subscriberListRepository: $this->createMock(SubscriberListRepository::class),
34+
entityManager: $this->entityManager
3135
);
3236
}
3337

tests/Unit/Domain/Subscription/Service/Provider/SubscriberProviderTest.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,34 @@
88
use PhpList\Core\Domain\Messaging\Model\Message;
99
use PhpList\Core\Domain\Subscription\Model\Subscriber;
1010
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
11+
use PhpList\Core\Domain\Subscription\Repository\SubscriberListRepository;
1112
use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository;
1213
use PhpList\Core\Domain\Subscription\Service\Provider\SubscriberProvider;
1314
use PHPUnit\Framework\MockObject\MockObject;
1415
use PHPUnit\Framework\TestCase;
1516

1617
class SubscriberProviderTest extends TestCase
1718
{
18-
private SubscriberRepository|MockObject $subscriberRepository;
19+
private SubscriberRepository&MockObject $subscriberRepository;
20+
private SubscriberListRepository&MockObject $subscriberListRepository;
1921
private SubscriberProvider $subscriberProvider;
2022

2123
protected function setUp(): void
2224
{
2325
$this->subscriberRepository = $this->createMock(SubscriberRepository::class);
26+
$this->subscriberListRepository = $this->createMock(SubscriberListRepository::class);
2427

25-
$this->subscriberProvider = new SubscriberProvider($this->subscriberRepository);
28+
$this->subscriberProvider = new SubscriberProvider(
29+
$this->subscriberRepository,
30+
$this->subscriberListRepository,
31+
);
2632
}
2733

2834
public function testGetSubscribersForMessageWithNoListsReturnsEmptyArray(): void
2935
{
3036
$message = $this->createMock(Message::class);
3137
$message->method('getId')->willReturn(123);
32-
$message->method('getSubscriberLists')->willReturn(new ArrayCollection());
38+
$this->subscriberListRepository->method('getListsByMessage')->willReturn([]);
3339

3440
$this->subscriberRepository
3541
->expects($this->never())
@@ -48,7 +54,9 @@ public function testGetSubscribersForMessageWithOneListButNoSubscribersReturnsEm
4854

4955
$subscriberList = $this->createMock(SubscriberList::class);
5056
$subscriberList->method('getId')->willReturn(456);
51-
$message->method('getSubscriberLists')->willReturn(new ArrayCollection([$subscriberList]));
57+
$this->subscriberListRepository
58+
->method('getListsByMessage')
59+
->willReturn([$subscriberList]);
5260

5361
$this->subscriberRepository
5462
->expects($this->once())
@@ -69,7 +77,9 @@ public function testGetSubscribersForMessageWithOneListAndSubscribersReturnsSubs
6977

7078
$subscriberList = $this->createMock(SubscriberList::class);
7179
$subscriberList->method('getId')->willReturn(456);
72-
$message->method('getSubscriberLists')->willReturn(new ArrayCollection([$subscriberList]));
80+
$this->subscriberListRepository
81+
->method('getListsByMessage')
82+
->willReturn([$subscriberList]);
7383

7484
$subscriber1 = $this->createMock(Subscriber::class);
7585
$subscriber1->method('getId')->willReturn(1);
@@ -99,7 +109,9 @@ public function testGetSubscribersForMessageWithMultipleListsReturnsUniqueSubscr
99109
$subscriberList1->method('getId')->willReturn(456);
100110
$subscriberList2 = $this->createMock(SubscriberList::class);
101111
$subscriberList2->method('getId')->willReturn(789);
102-
$message->method('getSubscriberLists')->willReturn(new ArrayCollection([$subscriberList1, $subscriberList2]));
112+
$this->subscriberListRepository
113+
->method('getListsByMessage')
114+
->willReturn([$subscriberList1, $subscriberList2]);
103115

104116
$subscriber1 = $this->createMock(Subscriber::class);
105117
$subscriber1->method('getId')->willReturn(1);

0 commit comments

Comments
 (0)