Create endpoints to cancel and reschedule tasks

[MAILPOET-5755]
This commit is contained in:
 Ján Mikláš
2024-06-18 14:34:16 +02:00
committed by Ján Mikláš
parent 65d347bf85
commit 88c0836443
3 changed files with 91 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\API\JSON\v1;
use MailPoet\API\JSON\Endpoint as APIEndpoint;
use MailPoet\API\JSON\Error as APIError;
use MailPoet\Config\AccessControl;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
class Help extends APIEndpoint {
public $permissions = [
'global' => AccessControl::PERMISSION_MANAGE_HELP,
];
/** @var ScheduledTasksRepository */
private $scheduledTasksRepository;
public function __construct(
ScheduledTasksRepository $scheduledTasksRepository
) {
$this->scheduledTasksRepository = $scheduledTasksRepository;
}
public function cancelTask($data) {
$task = $this->validateAndFindTask($data);
if (!($task instanceof ScheduledTaskEntity)) {
return $task;
}
try {
$this->scheduledTasksRepository->cancelTask($task);
return $this->successResponse();
} catch (\Exception $e) {
return $this->handleException($e->getMessage());
}
}
public function rescheduleTask($data) {
$task = $this->validateAndFindTask($data);
if (!($task instanceof ScheduledTaskEntity)) {
return $task;
}
try {
$this->scheduledTasksRepository->rescheduleTask($task);
return $this->successResponse();
} catch (\Exception $e) {
return $this->handleException($e->getMessage());
}
}
private function validateAndFindTask($data) {
if (!isset($data['id'])) {
return $this->handleException(__('Missing mandatory argument `id`.', 'mailpoet'));
}
$id = $data['id'];
$task = $this->scheduledTasksRepository->findOneById($id);
if (!$task) {
return $this->handleException(__('Task not found.', 'mailpoet'));
}
return $task;
}
private function handleException($message): \MailPoet\API\JSON\ErrorResponse {
return $this->errorResponse([
ApiError::BAD_REQUEST => $message,
]);
}
}