Skip to content

Commit 6051c91

Browse files
committed
MessageStatusEnum
1 parent 936cabc commit 6051c91

File tree

15 files changed

+71
-44
lines changed

15 files changed

+71
-44
lines changed

src/Domain/Messaging/Model/Dto/Message/MessageMetadataDto.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44

55
namespace PhpList\Core\Domain\Messaging\Model\Dto\Message;
66

7+
use PhpList\Core\Domain\Messaging\Model\Message\MessageStatus;
8+
79
class MessageMetadataDto
810
{
911
public function __construct(
10-
public readonly string $status,
12+
public readonly MessageStatus $status,
1113
) {
1214
}
1315
}

src/Domain/Messaging/Model/Message/MessageMetadata.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ class MessageMetadata implements EmbeddableInterface
3333
private ?DateTime $sendStart;
3434

3535
public function __construct(
36-
?string $status = null,
36+
?MessageStatus $status = null,
3737
int $bounceCount = 0,
3838
?DateTime $entered = null,
3939
?DateTime $sent = null,
4040
?DateTime $sendStart = null,
4141
) {
42-
$this->status = $status;
42+
$this->status = $status->value ?? null;
4343
$this->processed = false;
4444
$this->viewed = 0;
4545
$this->bounceCount = $bounceCount;
@@ -48,14 +48,17 @@ public function __construct(
4848
$this->sendStart = $sendStart;
4949
}
5050

51-
public function getStatus(): ?string
51+
/**
52+
* @SuppressWarnings("PHPMD.StaticAccess")
53+
*/
54+
public function getStatus(): ?MessageStatus
5255
{
53-
return $this->status;
56+
return MessageStatus::from($this->status);
5457
}
5558

56-
public function setStatus(string $status): self
59+
public function setStatus(MessageStatus $status): self
5760
{
58-
$this->status = $status;
61+
$this->status = $status->value;
5962
return $this;
6063
}
6164

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Domain\Messaging\Model\Message;
6+
7+
enum MessageStatus: string
8+
{
9+
case Draft = 'draft';
10+
case Prepared = 'prepared';
11+
case Submitted = 'submitted';
12+
case InProcess = 'inprocess';
13+
case Sent = 'sent';
14+
case Suspended = 'suspended';
15+
case Requeued = 'requeued';
16+
17+
public function isFinal(): bool
18+
{
19+
return match ($this) {
20+
self::Sent, self::Suspended => true,
21+
default => false,
22+
};
23+
}
24+
}

src/Domain/Messaging/Service/Builder/MessageBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function build(MessageDtoInterface $createMessageDto, object $context = n
4545
return $context->getExisting();
4646
}
4747

48-
$metadata = new Message\MessageMetadata($createMessageDto->getMetadata()->status);
48+
$metadata = new Message\MessageMetadata(Message\MessageStatus::Draft);
4949

5050
return new Message($format, $schedule, $metadata, $content, $options, $context->getOwner(), $template);
5151
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ public function updateMessage(
4343
return $message;
4444
}
4545

46+
public function updateStatus(Message $message, Message\MessageStatus $status): Message
47+
{
48+
$message->getMetadata()->setStatus($status);
49+
$this->messageRepository->save($message);
50+
51+
return $message;
52+
}
53+
4654
public function delete(Message $message): void
4755
{
4856
$this->messageRepository->remove($message);

src/Domain/Messaging/Service/Processor/CampaignProcessor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public function process(Message $campaign, ?OutputInterface $output = null): voi
6969
usleep(100000);
7070
}
7171

72-
$campaign->getMetadata()->setStatus('sent');
72+
$campaign->getMetadata()->setStatus(Message\MessageStatus::Sent);
7373
$this->entityManager->flush();
7474
}
7575
}

tests/Integration/Domain/Messaging/Repository/MessageRepositoryTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function testMessageIsPersistedAndFetchedCorrectly(): void
4848
$message = new Message(
4949
new MessageFormat(true, 'text'),
5050
new MessageSchedule(1, null, 3, null, null),
51-
new MessageMetadata('done'),
51+
new MessageMetadata(Message\MessageStatus::Sent),
5252
new MessageContent('Hello world!'),
5353
new MessageOptions(),
5454
$admin
@@ -62,7 +62,7 @@ public function testMessageIsPersistedAndFetchedCorrectly(): void
6262

6363
self::assertCount(1, $foundMessages);
6464
self::assertInstanceOf(Message::class, $foundMessages[0]);
65-
self::assertSame('done', $foundMessages[0]->getMetadata()->getStatus());
65+
self::assertSame(Message\MessageStatus::Sent, $foundMessages[0]->getMetadata()->getStatus());
6666
self::assertSame('Hello world!', $foundMessages[0]->getContent()->getSubject());
6767
}
6868

@@ -77,7 +77,7 @@ public function testGetByOwnerIdReturnsOnlyOwnedMessages(): void
7777
$msg1 = new Message(
7878
new MessageFormat(true, MessageFormat::FORMAT_TEXT),
7979
new MessageSchedule(1, null, 3, null, null),
80-
new MessageMetadata('done'),
80+
new MessageMetadata(Message\MessageStatus::Sent),
8181
new MessageContent('Owned by Admin 1!'),
8282
new MessageOptions(),
8383
$admin1

tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function testDeleteSubscriberWithRelatedDataDoesNotThrowDoctrineError():
5858
$msg = new Message(
5959
format: new MessageFormat(true, MessageFormat::FORMAT_TEXT),
6060
schedule: new MessageSchedule(1, null, 3, null, null),
61-
metadata: new MessageMetadata('done'),
61+
metadata: new MessageMetadata(Message\MessageStatus::Sent),
6262
content: new MessageContent('Owned by Admin 1!'),
6363
options: new MessageOptions(),
6464
owner: $admin

tests/Unit/Domain/Messaging/Service/Builder/MessageBuilderTest.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpList\Core\Tests\Unit\Domain\Service\Builder;
5+
namespace PhpList\Core\Tests\Unit\Domain\Messaging\Service\Builder;
66

7-
use Error;
87
use InvalidArgumentException;
98
use PhpList\Core\Domain\Identity\Model\Administrator;
109
use PhpList\Core\Domain\Messaging\Model\Dto\CreateMessageDto;
@@ -64,7 +63,7 @@ private function createRequest(): CreateMessageDto
6463
formatOptions: []
6564
),
6665
metadata: new MessageMetadataDto(
67-
status: 'draft'
66+
status: Message\MessageStatus::Draft
6867
),
6968
options: new MessageOptionsDto(
7069
fromField: '',
@@ -117,16 +116,6 @@ public function testBuildsNewMessage(): void
117116
$this->builder->build($request, $context);
118117
}
119118

120-
public function testThrowsExceptionOnInvalidRequest(): void
121-
{
122-
$this->expectException(Error::class);
123-
124-
$this->builder->build(
125-
$this->createMock(CreateMessageDto::class),
126-
new MessageContext($this->createMock(Administrator::class))
127-
);
128-
}
129-
130119
public function testThrowsExceptionOnInvalidContext(): void
131120
{
132121
$this->expectException(InvalidArgumentException::class);

tests/Unit/Domain/Messaging/Service/Builder/MessageContentBuilderTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpList\Core\Tests\Unit\Domain\Service\Builder;
5+
namespace PhpList\Core\Tests\Unit\Domain\Messaging\Service\Builder;
66

77
use InvalidArgumentException;
88
use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageContentDto;

0 commit comments

Comments
 (0)