Implement creator studio and upload updates

This commit is contained in:
2026-04-04 10:12:02 +02:00
parent 1da7d3bf88
commit 0b216b7ecd
15107 changed files with 31206 additions and 626514 deletions

View File

@@ -0,0 +1,83 @@
<?php
declare(strict_types=1);
namespace App\Console\Commands;
use App\Models\Artwork;
use App\Services\Images\ArtworkSquareThumbnailBackfillService;
use Illuminate\Console\Command;
use Throwable;
final class GenerateMissingSquareThumbnailsCommand extends Command
{
protected $signature = 'artworks:generate-missing-sq-thumbs
{--id= : Generate only for this artwork ID}
{--limit= : Stop after processing this many artworks}
{--force : Regenerate even if an sq variant row already exists}
{--dry-run : Report what would be generated without writing files}';
protected $description = 'Generate missing smart square artwork thumbnails';
public function handle(ArtworkSquareThumbnailBackfillService $backfill): int
{
$artworkId = $this->option('id') !== null ? max(1, (int) $this->option('id')) : null;
$limit = $this->option('limit') !== null ? max(1, (int) $this->option('limit')) : null;
$force = (bool) $this->option('force');
$dryRun = (bool) $this->option('dry-run');
$query = Artwork::query()
->whereNotNull('hash')
->where('hash', '!=', '')
->orderBy('id');
if ($artworkId !== null) {
$query->whereKey($artworkId);
}
$processed = 0;
$generated = 0;
$planned = 0;
$skipped = 0;
$failed = 0;
$query->chunkById(100, function ($artworks) use ($backfill, $force, $dryRun, $limit, &$processed, &$generated, &$planned, &$skipped, &$failed) {
foreach ($artworks as $artwork) {
if ($limit !== null && $processed >= $limit) {
return false;
}
try {
$result = $backfill->ensureSquareThumbnail($artwork, $force, $dryRun);
$status = (string) ($result['status'] ?? 'skipped');
if ($status === 'generated') {
$generated++;
} elseif ($status === 'dry_run') {
$planned++;
} else {
$skipped++;
}
} catch (Throwable $e) {
$failed++;
$this->warn(sprintf('Artwork %d failed: %s', (int) $artwork->getKey(), $e->getMessage()));
}
$processed++;
}
return true;
});
$this->info(sprintf(
'Square thumbnail backfill complete. processed=%d generated=%d planned=%d skipped=%d failed=%d',
$processed,
$generated,
$planned,
$skipped,
$failed,
));
return $failed > 0 ? self::FAILURE : self::SUCCESS;
}
}