lthn.io/app/Core/Seo/Console/Commands/GenerateServiceOgImages.php
Claude 41a90cbff8
feat: lthn.io API serving live chain data
Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.

Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 17:17:42 +01:00

119 lines
3.3 KiB
PHP

<?php
declare(strict_types=1);
/*
* Core PHP Framework
*
* Licensed under the European Union Public Licence (EUPL) v1.2.
* See LICENSE file for details.
*/
namespace Core\Seo\Console\Commands;
use Core\Seo\Services\ServiceOgImageService;
use Illuminate\Console\Command;
/**
* Generate Service OG Images Command
*
* Pre-generates Open Graph images for all service landing pages.
* Run this after deployment or when service branding changes.
*/
class GenerateServiceOgImages extends Command
{
protected $signature = 'og:generate-services
{service? : Specific service to generate (biohost, socialhost, etc.)}
{--force : Regenerate even if images exist}';
protected $description = 'Generate Open Graph images for service landing pages';
public function handle(ServiceOgImageService $ogService): int
{
$specificService = $this->argument('service');
$force = $this->option('force');
if ($specificService) {
return $this->generateSingle($ogService, $specificService, $force);
}
return $this->generateAll($ogService, $force);
}
protected function generateSingle(ServiceOgImageService $ogService, string $service, bool $force): int
{
if (! $ogService->isValidService($service)) {
$this->error("Invalid service: {$service}");
$this->line('Valid services: '.implode(', ', array_keys($ogService->getServices())));
return self::FAILURE;
}
if (! $force && $ogService->exists($service)) {
$this->info("Image already exists for {$service}. Use --force to regenerate.");
return self::SUCCESS;
}
$this->info("Generating OG image for {$service}...");
$url = $ogService->generate($service);
if ($url) {
$this->info("Generated: {$url}");
return self::SUCCESS;
}
$this->error("Failed to generate image for {$service}");
return self::FAILURE;
}
protected function generateAll(ServiceOgImageService $ogService, bool $force): int
{
$services = $ogService->getServices();
$this->info('Generating OG images for '.count($services).' services...');
$this->newLine();
$bar = $this->output->createProgressBar(count($services));
$bar->start();
$results = [];
foreach (array_keys($services) as $service) {
if (! $force && $ogService->exists($service)) {
$results[$service] = 'skipped (exists)';
$bar->advance();
continue;
}
$url = $ogService->generate($service);
$results[$service] = $url ? 'generated' : 'failed';
$bar->advance();
}
$bar->finish();
$this->newLine(2);
// Display results
$this->table(
['Service', 'Status'],
collect($results)->map(fn ($status, $service) => [$service, $status])->toArray()
);
$failed = collect($results)->filter(fn ($s) => $s === 'failed')->count();
if ($failed > 0) {
$this->error("{$failed} image(s) failed to generate.");
return self::FAILURE;
}
$this->info('All OG images generated successfully.');
return self::SUCCESS;
}
}