onQueue($queue); } } public function backoff(): array { return [5, 30, 120]; } public function handle(VisionService $vision, ArtworkMaturityService $maturity): void { if (! $vision->isEnabled()) { return; } $artwork = Artwork::query()->with(['categories.contentType'])->find($this->artworkId); if (! $artwork) { return; } $detailed = $vision->analyzeArtworkMaturityDetailed($artwork, $this->hash); $assessment = (array) ($detailed['assessment'] ?? []); if ($assessment === []) { $assessment = [ 'status' => ArtworkMaturityService::AI_STATUS_FAILED, 'advisory' => 'Vision maturity analysis returned no assessment payload.', ]; } $maturity->applyAiAssessment($artwork->fresh(), $assessment); } public function failed(\Throwable $exception): void { $artwork = Artwork::query()->find($this->artworkId); if ($artwork) { app(ArtworkMaturityService::class)->applyAiAssessment($artwork, [ 'status' => ArtworkMaturityService::AI_STATUS_FAILED, 'advisory' => $exception->getMessage(), ]); } Log::warning('DetectArtworkMaturityJob failed', [ 'artwork_id' => $this->artworkId, 'hash' => $this->hash, 'error' => $exception->getMessage(), ]); } }