use 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);
}
// ...
}