Replace Newsletter delete,trash,replace by new bulkMethods

[MAILPOET-2898][MAILPOET-2758]
This commit is contained in:
Rostislav Wolny
2020-06-10 12:54:59 +02:00
committed by Veljko V
parent 3a462a7a6c
commit a8d11bf045
7 changed files with 39 additions and 27 deletions

View File

@ -202,15 +202,12 @@ class Newsletters extends APIEndpoint {
public function restore($data = []) { public function restore($data = []) {
$id = (isset($data['id']) ? (int)$data['id'] : false); $id = (isset($data['id']) ? (int)$data['id'] : false);
$newsletter = Newsletter::findOne($id); $newsletter = $this->newslettersRepository->findOneById($id);
if ($newsletter instanceof Newsletter) { if ($newsletter instanceof NewsletterEntity) {
$newsletter->restore(); $this->newslettersRepository->bulkRestore([$id]);
$this->newslettersRepository->refresh($newsletter);
$newsletter = Newsletter::findOne($newsletter->id);
if(!$newsletter instanceof Newsletter) return $this->errorResponse();
return $this->successResponse( return $this->successResponse(
$newsletter->asArray(), $this->newslettersResponseBuilder->build($newsletter),
['count' => 1] ['count' => 1]
); );
} else { } else {
@ -222,14 +219,12 @@ class Newsletters extends APIEndpoint {
public function trash($data = []) { public function trash($data = []) {
$id = (isset($data['id']) ? (int)$data['id'] : false); $id = (isset($data['id']) ? (int)$data['id'] : false);
$newsletter = Newsletter::findOne($id); $newsletter = $this->newslettersRepository->findOneById($id);
if ($newsletter instanceof Newsletter) { if ($newsletter instanceof NewsletterEntity) {
$newsletter->trash(); $this->newslettersRepository->bulkTrash([$id]);
$this->newslettersRepository->refresh($newsletter);
$newsletter = Newsletter::findOne($newsletter->id);
if(!$newsletter instanceof Newsletter) return $this->errorResponse();
return $this->successResponse( return $this->successResponse(
$newsletter->asArray(), $this->newslettersResponseBuilder->build($newsletter),
['count' => 1] ['count' => 1]
); );
} else { } else {
@ -241,9 +236,9 @@ class Newsletters extends APIEndpoint {
public function delete($data = []) { public function delete($data = []) {
$id = (isset($data['id']) ? (int)$data['id'] : false); $id = (isset($data['id']) ? (int)$data['id'] : false);
$newsletter = Newsletter::findOne($id); $newsletter = $this->newslettersRepository->findOneById($id);
if ($newsletter instanceof Newsletter) { if ($newsletter instanceof NewsletterEntity) {
$newsletter->delete(); $this->newslettersRepository->bulkDelete([$id]);
return $this->successResponse(null, ['count' => 1]); return $this->successResponse(null, ['count' => 1]);
} else { } else {
return $this->errorResponse([ return $this->errorResponse([

View File

@ -12,6 +12,7 @@ use MailPoet\Models\Newsletter as NewsletterModel;
use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel; use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel;
use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\Models\SendingQueue as SendingQueueModel;
use MailPoet\Newsletter\Links\Links as NewsletterLinks; use MailPoet\Newsletter\Links\Links as NewsletterLinks;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking; use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking;
use MailPoet\Newsletter\Renderer\Renderer; use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
@ -39,6 +40,9 @@ class Newsletter {
/** @var Renderer */ /** @var Renderer */
private $renderer; private $renderer;
/** @var NewslettersRepository */
private $newslettersRepository;
/** @var Emoji */ /** @var Emoji */
private $emoji; private $emoji;
@ -63,6 +67,7 @@ class Newsletter {
} }
$this->emoji = $emoji; $this->emoji = $emoji;
$this->renderer = ContainerWrapper::getInstance()->get(Renderer::class); $this->renderer = ContainerWrapper::getInstance()->get(Renderer::class);
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
} }
public function getNewsletterFromQueue($queue) { public function getNewsletterFromQueue($queue) {
@ -137,7 +142,7 @@ class Newsletter {
'no posts in post notification, deleting it', 'no posts in post notification, deleting it',
['newsletter_id' => $newsletter->id, 'task_id' => $sendingTask->taskId] ['newsletter_id' => $newsletter->id, 'task_id' => $sendingTask->taskId]
); );
$newsletter->delete(); $this->newslettersRepository->bulkDelete([(int)$newsletter->id]);
return false; return false;
} }
// extract and save newsletter posts // extract and save newsletter posts

View File

@ -87,6 +87,13 @@ abstract class Repository {
$this->entityManager->remove($entity); $this->entityManager->remove($entity);
} }
/**
* @param T $entity
*/
public function refresh($entity) {
$this->entityManager->refresh($entity);
}
public function flush() { public function flush() {
$this->entityManager->flush(); $this->entityManager->flush();
} }

View File

@ -211,6 +211,9 @@ class NewslettersRepository extends Repository {
} }
public function bulkDelete(array $ids) { public function bulkDelete(array $ids) {
if (empty($ids)) {
return 0;
}
$this->entityManager->getConnection()->beginTransaction(); $this->entityManager->getConnection()->beginTransaction();
try { try {
// Delete children // Delete children

View File

@ -250,11 +250,6 @@ parameters:
count: 1 count: 1
path: ../../tests/integration/Cron/Workers/SendingQueue/MigrationTest.php path: ../../tests/integration/Cron/Workers/SendingQueue/MigrationTest.php
-
message: "#^Cannot call method delete\\(\\) on MailPoet\\\\Models\\\\Newsletter\\|false\\.$#"
count: 1
path: ../../tests/integration/Cron/Workers/SendingQueue/SendingQueueTest.php
- -
message: "#^Cannot access property \\$status on MailPoet\\\\Models\\\\Newsletter\\|false\\.$#" message: "#^Cannot access property \\$status on MailPoet\\\\Models\\\\Newsletter\\|false\\.$#"
count: 5 count: 5

View File

@ -42,6 +42,7 @@ use MailPoetVendor\Idiorm\ORM;
class NewslettersTest extends \MailPoetTest { class NewslettersTest extends \MailPoetTest {
public $postNotification; public $postNotification;
/** @var Newsletter */
public $newsletter; public $newsletter;
/** @var Newsletters */ /** @var Newsletters */
private $endpoint; private $endpoint;
@ -49,9 +50,13 @@ class NewslettersTest extends \MailPoetTest {
/** @var CronHelper */ /** @var CronHelper */
private $cronHelper; private $cronHelper;
/** @var NewslettersRepository */
private $newsletterRepository;
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class); $this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
$this->newsletterRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
$this->endpoint = Stub::copy( $this->endpoint = Stub::copy(
ContainerWrapper::getInstance()->get(Newsletters::class), ContainerWrapper::getInstance()->get(Newsletters::class),
[ [
@ -319,7 +324,7 @@ class NewslettersTest extends \MailPoetTest {
} }
public function testItCanRestoreANewsletter() { public function testItCanRestoreANewsletter() {
$this->newsletter->trash(); $this->newsletterRepository->bulkTrash([$this->newsletter->id]);
$trashedNewsletter = Newsletter::findOne($this->newsletter->id); $trashedNewsletter = Newsletter::findOne($this->newsletter->id);
expect($trashedNewsletter->deletedAt)->notNull(); expect($trashedNewsletter->deletedAt)->notNull();

View File

@ -62,6 +62,8 @@ class SendingQueueTest extends \MailPoetTest {
private $statsNotificationsWorker; private $statsNotificationsWorker;
/** @var LoggerFactory */ /** @var LoggerFactory */
private $loggerFactory; private $loggerFactory;
/** @var NewslettersRepository */
private $newslettersRepository;
public function _before() { public function _before() {
parent::_before(); parent::_before();
@ -118,6 +120,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]), Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
$this->cronHelper $this->cronHelper
); );
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
} }
private function getDirectUnsubscribeURL() { private function getDirectUnsubscribeURL() {
@ -261,8 +264,7 @@ class SendingQueueTest extends \MailPoetTest {
expect($queue)->notEquals(false); expect($queue)->notEquals(false);
// delete newsletter // delete newsletter
Newsletter::findOne($this->newsletter->id) $this->newslettersRepository->bulkDelete([$this->newsletter->id]);
->delete();
// queue no longer exists // queue no longer exists
$this->sendingQueueWorker->process(); $this->sendingQueueWorker->process();