From 6ee891a3873ee25546ac86a9f0861362a7451bd1 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Mon, 8 Jun 2020 17:27:33 +0200 Subject: [PATCH] Add scheduled task subscriber entity and repository [MAILPOET-2898] --- lib/DI/ContainerConfigurator.php | 1 + .../ScheduledTaskSubscriberEntity.php | 116 ++++++++++++++++++ .../ScheduledTaskSubscribersRepository.php | 15 +++ tasks/phpstan/phpstan.neon | 4 + 4 files changed, 136 insertions(+) create mode 100644 lib/Entities/ScheduledTaskSubscriberEntity.php create mode 100644 lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 373b02611d..61541fcfdb 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -290,6 +290,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class); $container->autowire(\MailPoet\Newsletter\Sending\ScheduledTasksRepository::class); + $container->autowire(\MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Sending\SendingQueuesRepository::class); $container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserController::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserRenderer::class)->setPublic(true); diff --git a/lib/Entities/ScheduledTaskSubscriberEntity.php b/lib/Entities/ScheduledTaskSubscriberEntity.php new file mode 100644 index 0000000000..bac6cc341a --- /dev/null +++ b/lib/Entities/ScheduledTaskSubscriberEntity.php @@ -0,0 +1,116 @@ +task = $task; + $this->subscriber = $subscriber; + $this->processed = $processed; + $this->failed = $failed; + $this->error = $error; + } + + public function getProcessed(): int { + return $this->processed; + } + + public function setProcessed(int $processed) { + $this->processed = $processed; + } + + public function getFailed(): int { + return $this->failed; + } + + public function setFailed(int $failed) { + $this->failed = $failed; + } + + /** + * @return string|null + */ + public function getError() { + return $this->error; + } + + /** + * @param string|null $error + */ + public function setError($error) { + $this->error = $error; + } + + /** + * @return ScheduledTaskEntity|null + */ + public function getTask() { + $this->safelyLoadToOneAssociation('task'); + return $this->task; + } + + public function setTask(ScheduledTaskEntity $task) { + $this->task = $task; + } + + /** + * @return SubscriberEntity|null + */ + public function getSubscriber() { + $this->safelyLoadToOneAssociation('subscriber'); + return $this->subscriber; + } + + public function setSubscriber(SubscriberEntity $subscriber) { + $this->subscriber = $subscriber; + } +} diff --git a/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php b/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php new file mode 100644 index 0000000000..be141158b7 --- /dev/null +++ b/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php @@ -0,0 +1,15 @@ + + */ +class ScheduledTaskSubscribersRepository extends Repository { + protected function getEntityClassName() { + return ScheduledTaskSubscriberEntity::class; + } +} diff --git a/tasks/phpstan/phpstan.neon b/tasks/phpstan/phpstan.neon index 0f63cf8c43..b7292a1a00 100644 --- a/tasks/phpstan/phpstan.neon +++ b/tasks/phpstan/phpstan.neon @@ -17,6 +17,10 @@ parameters: - '#Parameter \#1 \$function of function call_user_func_array expects callable(): mixed, .wc_.*. given.#' - '#Parameter \#1 \$reader of class MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver constructor expects MailPoetVendor\\Doctrine\\Common\\Annotations\\AnnotationReader, MailPoetVendor\\Doctrine\\Common\\Annotations\\CachedReader given#' - '/(with|has) no (return )?typehint specified/' # exclude level 6 errors + - # Primary keys ScheduledTaskSubscriberEntity of are foreign keys and foreign keys may be null because of missing related record + message: '#Property MailPoet\\Entities\\[a-zA-Z]+::$[a-z]+ type mapping mismatch: property can contain MailPoet\\Entities\\[a-zA-Z]+|null but database expects MailPoet\\Entities\\[a-zA-Z]+.#' + path: ../../lib/Entities/ScheduledTaskSubscriberEntity.php + count: 2 # Doctrine repository annotates return values as object|null, we override them to specific generics (T|null) - '#Method MailPoet\\Doctrine\\Repository::findOneBy(Id)?\(\) should return T of object\|null but returns object\|null\.#'