*/ public array $backoff = [30, 180, 600]; public function __construct( public readonly int $collectionId, public readonly ?int $actorUserId = null, public readonly string $context = 'default', ) { $this->onQueue((string) config('collections.v5.queue.name', 'collections')); } public function handle(CollectionRankingService $ranking): void { $collection = Collection::query()->find($this->collectionId); if (! $collection) { return; } $actor = $this->actorUserId ? User::query()->find($this->actorUserId) : null; $fresh = $ranking->refresh($collection, $this->context); app(CollectionHistoryService::class)->record( $fresh, $actor, 'recommendation_refreshed', 'Collection recommendations refreshed.', null, [ 'context' => $this->context, 'recommendation_tier' => $fresh->recommendation_tier, 'ranking_bucket' => $fresh->ranking_bucket, 'search_boost_tier' => $fresh->search_boost_tier, ] ); } }