ref
This commit is contained in:
@@ -257,8 +257,8 @@ class Binding implements BindingProcessor
|
||||
);
|
||||
|
||||
$binder->bindImplementation(
|
||||
'Espo\\Core\\Job\\JobSchedulerCreator',
|
||||
'Espo\\Core\\Job\\JobScheduler\\Creators\\EntityJobSchedulerCreator',
|
||||
'Espo\\Core\\Job\\JobScheduler\\Creator',
|
||||
'Espo\\Core\\Job\\JobScheduler\\Creators\\EntityCreator',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ namespace Espo\Core\Job;
|
||||
|
||||
use Espo\Core\Field\DateTime as DateTimeField;
|
||||
use Espo\Core\Job\Job\Data;
|
||||
use Espo\Core\Job\JobScheduler\Creator;
|
||||
|
||||
use ReflectionClass;
|
||||
use DateTimeInterface;
|
||||
@@ -53,7 +54,7 @@ class JobScheduler
|
||||
private ?DateInterval $delay = null;
|
||||
|
||||
public function __construct(
|
||||
private JobSchedulerCreator $creator,
|
||||
private Creator $creator,
|
||||
) {}
|
||||
|
||||
/**
|
||||
@@ -179,7 +180,7 @@ class JobScheduler
|
||||
|
||||
$data = $this->data ?? Data::create();
|
||||
|
||||
$creatorData = new JobScheduler\Data(
|
||||
$creatorData = new Creator\Data(
|
||||
className: $this->className,
|
||||
queue: $this->queue,
|
||||
group: $this->group,
|
||||
|
||||
+5
-3
@@ -27,12 +27,14 @@
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Job;
|
||||
namespace Espo\Core\Job\JobScheduler;
|
||||
|
||||
use Espo\Core\Job\JobScheduler\Creator\Data;
|
||||
|
||||
/**
|
||||
* @since 9.2.0
|
||||
*/
|
||||
interface JobSchedulerCreator
|
||||
interface Creator
|
||||
{
|
||||
public function create(JobScheduler\Data $data): void;
|
||||
public function create(Data $data): void;
|
||||
}
|
||||
+1
-1
@@ -27,7 +27,7 @@
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Job\JobScheduler;
|
||||
namespace Espo\Core\Job\JobScheduler\Creator;
|
||||
|
||||
use Espo\Core\Field\DateTime;
|
||||
use Espo\Core\Job\Job;
|
||||
+16
-14
@@ -30,30 +30,32 @@
|
||||
namespace Espo\Core\Job\JobScheduler\Creators;
|
||||
|
||||
use Espo\Core\Field\DateTime;
|
||||
use Espo\Core\Job\JobScheduler;
|
||||
use Espo\Core\Job\JobSchedulerCreator;
|
||||
use Espo\Core\Job\JobScheduler\Creator;
|
||||
use Espo\Entities\Job;
|
||||
use Espo\ORM\EntityManager;
|
||||
|
||||
class EntityJobSchedulerCreator implements JobSchedulerCreator
|
||||
class EntityCreator implements Creator
|
||||
{
|
||||
public function __construct(
|
||||
private EntityManager $entityManager,
|
||||
) {}
|
||||
|
||||
public function create(JobScheduler\Data $data): void
|
||||
public function create(Creator\Data $data): void
|
||||
{
|
||||
$time = $data->time ?? DateTime::createNow();
|
||||
|
||||
$this->entityManager->createEntity(Job::ENTITY_TYPE, [
|
||||
'name' => $data->className,
|
||||
'className' => $data->className,
|
||||
'queue' => $data->queue,
|
||||
'group' => $data->group,
|
||||
'targetType' => $data->data->getTargetType(),
|
||||
'targetId' => $data->data->getTargetId(),
|
||||
'data' => $data->data->getRaw(),
|
||||
'executeTime' => $time->toString(),
|
||||
]);
|
||||
$job = $this->entityManager->getRDBRepositoryByClass(Job::class)->getNew();
|
||||
|
||||
$job
|
||||
->setName($data->className)
|
||||
->setClassName($data->className)
|
||||
->setQueue($data->queue)
|
||||
->setGroup($data->group)
|
||||
->setData($data->data)
|
||||
->setTargetId($data->data->getTargetId())
|
||||
->setTargetType($data->data->getTargetType())
|
||||
->setExecuteTime($time);
|
||||
|
||||
$this->entityManager->saveEntity($job);
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
namespace Espo\Entities;
|
||||
|
||||
use Espo\Core\Field\DateTime;
|
||||
use Espo\Core\Job\Job as JobJob;
|
||||
use Espo\Core\Job\Job\Status;
|
||||
use Espo\Core\Job\JobDataLess;
|
||||
@@ -212,4 +213,48 @@ class Job extends Entity
|
||||
{
|
||||
return $this->set('executedAt', DateTimeUtil::getSystemNowString());
|
||||
}
|
||||
|
||||
public function setName(?string $name): self
|
||||
{
|
||||
return $this->set('name', $name);
|
||||
}
|
||||
|
||||
public function setClassName(?string $className): self
|
||||
{
|
||||
return $this->set('className', $className);
|
||||
}
|
||||
|
||||
public function setQueue(?string $queue): self
|
||||
{
|
||||
return $this->set('queue', $queue);
|
||||
}
|
||||
|
||||
public function setGroup(?string $group): self
|
||||
{
|
||||
return $this->set('group', $group);
|
||||
}
|
||||
|
||||
public function setTargetId(?string $targetId): self
|
||||
{
|
||||
return $this->set('targetId', $targetId);
|
||||
}
|
||||
|
||||
public function setTargetType(?string $targetType): self
|
||||
{
|
||||
return $this->set('targetType', $targetType);
|
||||
}
|
||||
|
||||
public function setData(?JobJob\Data $data): self
|
||||
{
|
||||
if (!$data) {
|
||||
return $this->set('data', $data);
|
||||
}
|
||||
|
||||
return $this->set('data', $data->getRaw());
|
||||
}
|
||||
|
||||
public function setExecuteTime(?DateTime $executeTime): self
|
||||
{
|
||||
return $this->setValueObject('executeTime', $executeTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace tests\unit\Espo\Core\Job;
|
||||
|
||||
use Espo\Core\Field\DateTime as DateTimeField;
|
||||
use Espo\Core\Job\JobScheduler;
|
||||
use Espo\Core\Job\JobSchedulerCreator;
|
||||
use Espo\Core\Job\JobScheduler\Creator;
|
||||
use Espo\Core\Job\QueueName;
|
||||
use Espo\Core\Job\Job\Data;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
@@ -42,11 +42,11 @@ use DateInterval;
|
||||
|
||||
class JobSchedulerTest extends TestCase
|
||||
{
|
||||
private ?JobSchedulerCreator $creator = null;
|
||||
private ?JobScheduler\Creator $creator = null;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->creator = $this->createMock(JobSchedulerCreator::class);
|
||||
$this->creator = $this->createMock(JobScheduler\Creator::class);
|
||||
}
|
||||
|
||||
public function testSchedule1(): void
|
||||
@@ -57,7 +57,7 @@ class JobSchedulerTest extends TestCase
|
||||
|
||||
$delay = DateInterval::createFromDateString('1 minute');
|
||||
|
||||
$expectedData = new JobScheduler\Data(
|
||||
$expectedData = new Creator\Data(
|
||||
className: TestJob::class,
|
||||
queue: QueueName::Q0,
|
||||
group: null,
|
||||
@@ -87,7 +87,7 @@ class JobSchedulerTest extends TestCase
|
||||
|
||||
$time = new DateTimeImmutable();
|
||||
|
||||
$expectedData = new JobScheduler\Data(
|
||||
$expectedData = new Creator\Data(
|
||||
className: TestJob::class,
|
||||
queue: null,
|
||||
group: 'g-1',
|
||||
|
||||
Reference in New Issue
Block a user