From d4a80c72302f67ccd923ac17b636bf28cfd82a7b Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 25 Oct 2023 10:50:51 -0300 Subject: [PATCH] Move SendingQueueEntity::toArray() to SendingQueuesResponseBuilder::build() Based on a suggestion during the review of the PR, it was decided that it makes more sense for the code that was created as SendingQueueEntity::toArray() tp be moved to SendingQueuesResponseBuilder::build(). It is used only to build the format that is send in the API response. [MAILPOET-4368] --- .../SendingQueuesResponseBuilder.php | 41 +++++++++++++++++++ mailpoet/lib/API/JSON/v1/SendingQueue.php | 10 ++++- mailpoet/lib/DI/ContainerConfigurator.php | 1 + mailpoet/lib/Entities/SendingQueueEntity.php | 32 --------------- .../SendingQueuesResponseBuilderTest.php} | 13 ++++-- 5 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 mailpoet/lib/API/JSON/ResponseBuilders/SendingQueuesResponseBuilder.php rename mailpoet/tests/integration/{Entities/SendingQueueEntityTest.php => API/JSON/ResponseBuilders/SendingQueuesResponseBuilderTest.php} (79%) diff --git a/mailpoet/lib/API/JSON/ResponseBuilders/SendingQueuesResponseBuilder.php b/mailpoet/lib/API/JSON/ResponseBuilders/SendingQueuesResponseBuilder.php new file mode 100644 index 0000000000..4404ec6998 --- /dev/null +++ b/mailpoet/lib/API/JSON/ResponseBuilders/SendingQueuesResponseBuilder.php @@ -0,0 +1,41 @@ +getTask() instanceof ScheduledTaskEntity) { + throw new \RuntimeException('Invalid state. SendingQueue has no ScheduledTask associated.'); + } + + return [ + 'id' => $sendingQueue->getId(), + 'type' => $sendingQueue->getTask()->getType(), + 'status' => $sendingQueue->getTask()->getStatus(), + 'priority' => $sendingQueue->getTask()->getPriority(), + 'scheduled_at' => $this->getFormattedDateOrNull($sendingQueue->getTask()->getScheduledAt()), + 'processed_at' => $this->getFormattedDateOrNull($sendingQueue->getTask()->getProcessedAt()), + 'created_at' => $this->getFormattedDateOrNull($sendingQueue->getTask()->getCreatedAt()), + 'updated_at' => $this->getFormattedDateOrNull($sendingQueue->getTask()->getUpdatedAt()), + 'deleted_at' => $this->getFormattedDateOrNull($sendingQueue->getTask()->getDeletedAt()), + 'in_progress' => $sendingQueue->getTask()->getInProgress(), + 'reschedule_count' => $sendingQueue->getTask()->getRescheduleCount(), + 'meta' => $sendingQueue->getMeta(), + 'task_id' => $sendingQueue->getTask()->getId(), + 'newsletter_id' => ($sendingQueue->getNewsletter() instanceof NewsletterEntity) ? $sendingQueue->getNewsletter()->getId() : null, + 'newsletter_rendered_body' => $sendingQueue->getNewsletterRenderedBody(), + 'newsletter_rendered_subject' => $sendingQueue->getNewsletterRenderedSubject(), + 'count_total' => $sendingQueue->getCountTotal(), + 'count_processed' => $sendingQueue->getCountProcessed(), + 'count_to_process' => $sendingQueue->getCountToProcess(), + ]; + } + + private function getFormattedDateOrNull(?\DateTimeInterface $date): ?string { + return $date ? $date->format('Y-m-d H:i:s') : null; + } +} diff --git a/mailpoet/lib/API/JSON/v1/SendingQueue.php b/mailpoet/lib/API/JSON/v1/SendingQueue.php index a21f3996ff..3d4265b02b 100644 --- a/mailpoet/lib/API/JSON/v1/SendingQueue.php +++ b/mailpoet/lib/API/JSON/v1/SendingQueue.php @@ -5,6 +5,7 @@ namespace MailPoet\API\JSON\v1; use MailPoet\API\JSON\Endpoint as APIEndpoint; use MailPoet\API\JSON\Error as APIError; use MailPoet\API\JSON\Response; +use MailPoet\API\JSON\ResponseBuilders\SendingQueuesResponseBuilder; use MailPoet\Config\AccessControl; use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger; use MailPoet\Cron\CronTrigger; @@ -60,6 +61,9 @@ class SendingQueue extends APIEndpoint { /** @var DaemonTrigger */ private $actionSchedulerDaemonTriggerAction; + /** @var SendingQueuesResponseBuilder */ + private $sendingQueuesResponseBuilder; + public function __construct( SubscribersFeature $subscribersFeature, NewslettersRepository $newsletterRepository, @@ -70,7 +74,8 @@ class SendingQueue extends APIEndpoint { Scheduler $scheduler, SettingsController $settings, DaemonTrigger $actionSchedulerDaemonTriggerAction, - NewsletterValidator $newsletterValidator + NewsletterValidator $newsletterValidator, + SendingQueuesResponseBuilder $sendingQueuesResponseBuilder ) { $this->subscribersFeature = $subscribersFeature; $this->subscribersFinder = $subscribersFinder; @@ -82,6 +87,7 @@ class SendingQueue extends APIEndpoint { $this->settings = $settings; $this->actionSchedulerDaemonTriggerAction = $actionSchedulerDaemonTriggerAction; $this->newsletterValidator = $newsletterValidator; + $this->sendingQueuesResponseBuilder = $sendingQueuesResponseBuilder; } public function add($data = []) { @@ -202,7 +208,7 @@ class SendingQueue extends APIEndpoint { } else { $this->triggerSending($newsletter); return $this->successResponse( - ($newsletter->getLatestQueue() instanceof SendingQueueEntity) ? $newsletter->getLatestQueue()->toArray() : null + ($newsletter->getLatestQueue() instanceof SendingQueueEntity) ? $this->sendingQueuesResponseBuilder->build($newsletter->getLatestQueue()) : null ); } } diff --git a/mailpoet/lib/DI/ContainerConfigurator.php b/mailpoet/lib/DI/ContainerConfigurator.php index 2576e50880..7722bd6325 100644 --- a/mailpoet/lib/DI/ContainerConfigurator.php +++ b/mailpoet/lib/DI/ContainerConfigurator.php @@ -104,6 +104,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\API\JSON\ResponseBuilders\SegmentsResponseBuilder::class)->setPublic(true); $container->autowire(\MailPoet\API\JSON\ResponseBuilders\DynamicSegmentsResponseBuilder::class)->setPublic(true); $container->autowire(\MailPoet\API\JSON\ResponseBuilders\ScheduledTaskSubscriberResponseBuilder::class)->setPublic(true); + $container->autowire(\MailPoet\API\JSON\ResponseBuilders\SendingQueuesResponseBuilder::class)->setPublic(true); // REST API $container->autowire(\MailPoet\API\REST\API::class)->setPublic(true); $container->autowire(\MailPoet\API\REST\EndpointContainer::class) diff --git a/mailpoet/lib/Entities/SendingQueueEntity.php b/mailpoet/lib/Entities/SendingQueueEntity.php index 0ef02e4295..8358dee6b1 100644 --- a/mailpoet/lib/Entities/SendingQueueEntity.php +++ b/mailpoet/lib/Entities/SendingQueueEntity.php @@ -223,36 +223,4 @@ class SendingQueueEntity { public function setNewsletter(NewsletterEntity $newsletter) { $this->newsletter = $newsletter; } - - public function toArray(): array { - if (!$this->getTask() instanceof ScheduledTaskEntity) { - throw new \RuntimeException('Invalid state. SendingQueue has no ScheduledTask associated.'); - } - - return [ - 'id' => $this->getId(), - 'type' => $this->getTask()->getType(), - 'status' => $this->getTask()->getStatus(), - 'priority' => $this->getTask()->getPriority(), - 'scheduled_at' => $this->getFormattedDateOrNull($this->getTask()->getScheduledAt()), - 'processed_at' => $this->getFormattedDateOrNull($this->getTask()->getProcessedAt()), - 'created_at' => $this->getFormattedDateOrNull($this->getTask()->getCreatedAt()), - 'updated_at' => $this->getFormattedDateOrNull($this->getTask()->getUpdatedAt()), - 'deleted_at' => $this->getFormattedDateOrNull($this->getTask()->getDeletedAt()), - 'in_progress' => $this->getTask()->getInProgress(), - 'reschedule_count' => $this->getTask()->getRescheduleCount(), - 'meta' => $this->getMeta(), - 'task_id' => $this->getTask()->getId(), - 'newsletter_id' => ($this->getNewsletter() instanceof NewsletterEntity) ? $this->getNewsletter()->getId() : null, - 'newsletter_rendered_body' => $this->getNewsletterRenderedBody(), - 'newsletter_rendered_subject' => $this->getNewsletterRenderedSubject(), - 'count_total' => $this->getCountTotal(), - 'count_processed' => $this->getCountProcessed(), - 'count_to_process' => $this->getCountToProcess(), - ]; - } - - private function getFormattedDateOrNull(?\DateTimeInterface $date): ?string { - return $date ? $date->format('Y-m-d H:i:s') : null; - } } diff --git a/mailpoet/tests/integration/Entities/SendingQueueEntityTest.php b/mailpoet/tests/integration/API/JSON/ResponseBuilders/SendingQueuesResponseBuilderTest.php similarity index 79% rename from mailpoet/tests/integration/Entities/SendingQueueEntityTest.php rename to mailpoet/tests/integration/API/JSON/ResponseBuilders/SendingQueuesResponseBuilderTest.php index 33ced892e6..06fe018ca7 100644 --- a/mailpoet/tests/integration/Entities/SendingQueueEntityTest.php +++ b/mailpoet/tests/integration/API/JSON/ResponseBuilders/SendingQueuesResponseBuilderTest.php @@ -1,7 +1,8 @@ sendingQueuesResponseBuilder = $this->diContainer->get(SendingQueuesResponseBuilder::class); $scheduledAt = new Carbon('2018-10-10 10:00:00'); $this->newsletter = $newsletterFactory->create(); $this->scheduledTask = $scheduledTaskFactory->create(Sending::TASK_TYPE, ScheduledTaskEntity::STATUS_SCHEDULED, $scheduledAt); @@ -33,7 +38,7 @@ class SendingQueueEntityTest extends \MailPoetTest { $this->assertInstanceOf(SendingQueueEntity::class, $this->sendingQueue); } - public function testToArrayReturnsExpectedResult() { + public function testBuildReturnsExpectedResult() { $expectedResult = [ 'id' => $this->sendingQueue->getId(), 'type' => 'sending', @@ -56,6 +61,6 @@ class SendingQueueEntityTest extends \MailPoetTest { 'count_to_process' => 0, ]; - $this->assertSame($expectedResult, $this->sendingQueue->toArray()); + $this->assertSame($expectedResult, $this->sendingQueuesResponseBuilder->build($this->sendingQueue)); } }