Files
ai-web/app/Jobs/RunCrawlRuleJob.php

50 lines
1.3 KiB
PHP
Raw Permalink Normal View History

2026-02-18 12:56:36 +08:00
<?php
declare(strict_types=1);
namespace App\Jobs;
use App\Enums\CrawlTriggerType;
use App\Models\CrawlRule;
use App\Services\Crawler\CrawlExecutionService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\SerializesModels;
class RunCrawlRuleJob implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
public function __construct(
public readonly int $ruleId,
public readonly string $triggerType,
public readonly ?int $createdBy = null,
public readonly ?int $retryFromRunId = null,
) {
}
public function handle(CrawlExecutionService $executionService): void
{
$rule = CrawlRule::query()->find($this->ruleId);
if (! $rule instanceof CrawlRule) {
return;
}
$trigger = CrawlTriggerType::tryFrom($this->triggerType) ?? CrawlTriggerType::Manual;
$metrics = [];
if ($this->retryFromRunId !== null) {
$metrics['retry_from_run_id'] = $this->retryFromRunId;
}
$executionService->runRule($rule, $trigger, $this->createdBy, $metrics);
}
}