-
app/Enums/TaskStatus.php
Open in GitHubenum TaskStatus: string { case OPEN = 'open'; case PENDING = 'pending'; case SUCCESS = 'success'; case FAILED = 'failed'; }
-
app/Models/Task.php
Open in GitHubuse App\Enums\TaskStatus; use Illuminate\Database\Eloquent\Model; class Task extends Model { protected $fillable = [ 'status', 'exception', 'should_run_at', ]; protected $casts = [ 'status' => TaskStatus::class, 'should_run_at' => 'datetime', ]; public static function openTask(): ?self { return self::query()->where('status', TaskStatus::OPEN->value)->latest()->first(); } public function wasRunSuccessfully(): bool { return $this->status === TaskStatus::SUCCESS; } public function updateStatus(TaskStatus $status): void { $this->status = $status; $this->save(); } public function markPending(): void { $this->updateStatus(TaskStatus::PENDING); } public function markFailed(?string $exception = null): void { $this->status = TaskStatus::FAILED; $this->exception = $exception; $this->save(); } public function markSuccessful(): void { $this->updateStatus(TaskStatus::SUCCESS); } // ... }