Extract newsletter bulk delete logic to a controller

Repositories shouldn't inject other repositories. Also, this solves circular DI dependency.

[MAILPOET-5845]
This commit is contained in:
Jan Jakes
2024-01-18 17:31:34 +01:00
committed by Aschepikov
parent 82d5621caf
commit d6da2af55b
10 changed files with 511 additions and 402 deletions

View File

@@ -15,6 +15,7 @@ use MailPoet\Entities\SendingQueueEntity;
use MailPoet\InvalidStateException;
use MailPoet\Listing;
use MailPoet\Newsletter\Listing\NewsletterListingRepository;
use MailPoet\Newsletter\NewsletterDeleteController;
use MailPoet\Newsletter\NewsletterSaveController;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\NewsletterValidator;
@@ -73,6 +74,8 @@ class Newsletters extends APIEndpoint {
/** @var NewsletterSaveController */
private $newsletterSaveController;
private NewsletterDeleteController $newsletterDeleteController;
/** @var NewsletterUrl */
private $newsletterUrl;
@@ -98,6 +101,7 @@ class Newsletters extends APIEndpoint {
Emoji $emoji,
SendPreviewController $sendPreviewController,
NewsletterSaveController $newsletterSaveController,
NewsletterDeleteController $newsletterDeleteController,
NewsletterUrl $newsletterUrl,
Scheduler $scheduler,
NewsletterValidator $newsletterValidator,
@@ -115,6 +119,7 @@ class Newsletters extends APIEndpoint {
$this->emoji = $emoji;
$this->sendPreviewController = $sendPreviewController;
$this->newsletterSaveController = $newsletterSaveController;
$this->newsletterDeleteController = $newsletterDeleteController;
$this->newsletterUrl = $newsletterUrl;
$this->scheduler = $scheduler;
$this->newsletterValidator = $newsletterValidator;
@@ -291,7 +296,7 @@ class Newsletters extends APIEndpoint {
$newsletter = $this->getNewsletter($data);
if ($newsletter instanceof NewsletterEntity) {
$this->wp->doAction('mailpoet_api_newsletters_delete_before', [$newsletter->getId()]);
$this->newslettersRepository->bulkDelete([$newsletter->getId()]);
$this->newsletterDeleteController->bulkDelete([(int)$newsletter->getId()]);
$this->wp->doAction('mailpoet_api_newsletters_delete_after', [$newsletter->getId()]);
return $this->successResponse(null, ['count' => 1]);
} else {
@@ -401,7 +406,7 @@ class Newsletters extends APIEndpoint {
$this->newslettersRepository->bulkRestore($ids);
} elseif ($data['action'] === 'delete') {
$this->wp->doAction('mailpoet_api_newsletters_delete_before', $ids);
$this->newslettersRepository->bulkDelete($ids);
$this->newsletterDeleteController->bulkDelete($ids);
$this->wp->doAction('mailpoet_api_newsletters_delete_after', $ids);
} else {
throw UnexpectedValueException::create()