Something went wrong. Try again.
Build Reactive Signals for Bluesky's AT Protocol Firehose in Laravel
Something went wrong. Try again.
3.0 kB · 110 lines
PHP
at dev
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111<?php
namespace SocialDept\AtpSignals\Commands;
use Illuminate\Console\Command;use Illuminate\Support\Collection;use SocialDept\AtpSignals\Services\SignalRegistry;
class ListSignalsCommand extends Command{ protected $signature = 'signal:list';
protected $description = 'List all registered Signals';
public function handle(SignalRegistry $registry): int { $signals = $this->discoverSignals($registry);
if ($signals->isEmpty()) { $this->displayNoSignalsWarning();
return self::SUCCESS; }
$this->displaySignalCount($signals->count());
foreach ($signals as $signal) { $this->displaySignalDetails($signal); }
return self::SUCCESS; }
private function discoverSignals(SignalRegistry $registry): Collection { $registry->discover();
return $registry->all(); }
private function displayNoSignalsWarning(): void { $this->warn('No signals registered.'); $this->info('Create signals in app/Signals or register them in config/signal.php'); }
private function displaySignalCount(int $count): void { $this->components->info("Found {$count} ".str('signal')->plural($count)); $this->newLine(); }
private function displaySignalDetails(object $signal): void { $className = class_basename($signal); $fullClassName = get_class($signal);
$this->line(" <fg=green>•</> <options=bold>{$className}</>"); $this->line(" <fg=gray>Class:</> {$fullClassName}");
$this->displayEventTypes($signal); $this->displayCollections($signal); $this->displayDids($signal); $this->displayQueueInfo($signal);
$this->newLine(); }
private function displayEventTypes(object $signal): void { $eventTypes = collect($signal->eventTypes()) ->map(fn ($type) => "<fg=cyan>{$type}</>") ->join(', ');
$this->line(" <fg=gray>Events:</> {$eventTypes}"); }
private function displayCollections(object $signal): void { $collections = $signal->collections() ? collect($signal->collections())->map(fn ($col) => "<fg=yellow>{$col}</>")->join(', ') : '<fg=gray>All collections</>';
$this->line(" <fg=gray>Collections:</> {$collections}"); }
private function displayDids(object $signal): void { if (! $signal->dids()) { return; }
$dids = collect($signal->dids()) ->map(fn ($did) => "<fg=magenta>{$did}</>") ->join(', ');
$this->line(" <fg=gray>DIDs:</> {$dids}"); }
private function displayQueueInfo(object $signal): void { if (! $signal->shouldQueue()) { return; }
$queue = $signal->queue() ?? 'default';
$this->line(" <fg=gray>Queue:</> <fg=blue>{$queue}</>"); }}