option('tenant'); $limit = (int) $this->option('limit'); $dryRun = (bool) $this->option('dry-run'); $query = Event::query() ->doesntHave('joinTokens') ->orderBy('id'); if ($tenantId) { $query->where('tenant_id', $tenantId); } $processed = 0; $query->chunkById(50, function ($events) use ($joinTokenService, $dryRun, &$processed, $limit) { foreach ($events as $event) { if ($processed >= $limit) { return false; } $processed++; if ($dryRun) { $this->line("[dry-run] Would create invitation for event #{$event->id} ({$event->slug})"); continue; } $joinTokenService->createToken($event, [ 'label' => 'Standard-Link', 'metadata' => [ 'auto_generated' => true, 'backfilled_at' => now()->toIso8601String(), ], ]); $this->line("Created invitation for event #{$event->id} ({$event->slug})"); } return true; }); if ($processed === 0) { $this->info('No events required backfilling.'); } else { $suffix = $dryRun ? ' (dry-run)' : ''; $this->info("Processed {$processed} event(s){$suffix}."); } return self::SUCCESS; } }