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

View File

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

View File

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

View File

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

View File

@ -250,11 +250,6 @@ parameters:
count: 1
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\\.$#"
count: 5

View File

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

View File

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