Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions src/Config/JobConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Queue\Config;

use InvalidArgumentException;
use Queue\Model\Enum\Priority;
use RuntimeException;

/**
Expand Down Expand Up @@ -132,6 +133,10 @@ public function fromArray(array $data, ?string $type = null) {
$field = $this->field($field, $type);
}

if ($field === 'priority' && $value instanceof Priority) {
$value = $value->value;
}

$this->$field = $value;
}

Expand Down Expand Up @@ -219,22 +224,28 @@ public function field(string $name, string $type): string {
}

/**
* @param int|null $priority
* @param \Queue\Model\Enum\Priority|int|null $priority
*
* @return $this
*/
public function setPriority(?int $priority) {
public function setPriority(Priority|int|null $priority) {
if ($priority instanceof Priority) {
$priority = $priority->value;
}
$this->priority = $priority;

return $this;
}

/**
* @param int $priority
* @param \Queue\Model\Enum\Priority|int $priority
*
* @return $this
*/
public function setPriorityOrFail(int $priority) {
public function setPriorityOrFail(Priority|int $priority) {
if ($priority instanceof Priority) {
$priority = $priority->value;
}
$this->priority = $priority;

return $this;
Expand All @@ -243,7 +254,7 @@ public function setPriorityOrFail(int $priority) {
/**
* @return int|null
*/
public function getPriority(): ?int {
public function getPriority(): int|null {
return $this->priority;
}

Expand Down
20 changes: 20 additions & 0 deletions src/Model/Enum/Priority.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);

namespace Queue\Model\Enum;

/**
* Priority levels for queued jobs. 1 is the highest priority, 10 is the lowest.
*/
enum Priority: int {
case Critical = 1;
case Urgent = 2;
case High = 3;
case MediumHigh = 4;
case Medium = 5;
case MediumLow = 6;
case Low = 7;
case VeryLow = 8;
case Deferred = 9;
case Idle = 10;
}
3 changes: 2 additions & 1 deletion tests/TestCase/Model/Table/QueuedJobsTableTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Cake\I18n\DateTime;
use Cake\ORM\TableRegistry;
use Cake\TestSuite\TestCase;
use Queue\Model\Enum\Priority;
use Queue\Model\Table\QueuedJobsTable;
use Queue\Queue\Task\ExampleTask;
use TestApp\Dto\MyTaskDto;
Expand Down Expand Up @@ -694,7 +695,7 @@ public function testPriority() {
$this->assertTrue((bool)$this->QueuedJobs->createJob('Foo', $data));

$data = ['key' => 'k2'];
$this->assertTrue((bool)$this->QueuedJobs->createJob('Foo', $data, ['priority' => 1]));
$this->assertTrue((bool)$this->QueuedJobs->createJob('Foo', $data, ['priority' => Priority::Critical]));

$data = ['key' => 'k3'];
$this->assertTrue((bool)$this->QueuedJobs->createJob('Foo', $data, ['priority' => 6]));
Expand Down