option('dry-run'); $overwrite = (bool) $this->option('overwrite'); $checked = 0; $missing = 0; $created = 0; $overwriteCandidates = 0; $overwritten = 0; $skipped = 0; $failed = 0; $missingSources = 0; File::query() ->where(function ($query): void { $query->where('mime_type', 'like', 'image/%') ->orWhere('path', 'like', '%.jpg') ->orWhere('path', 'like', '%.jpeg') ->orWhere('path', 'like', '%.png') ->orWhere('path', 'like', '%.webp'); }) ->orderBy('id') ->chunkById(100, function ($files) use ($fileService, $dryRun, $overwrite, &$checked, &$missing, &$created, &$overwriteCandidates, &$overwritten, &$skipped, &$failed, &$missingSources): void { foreach ($files as $file) { if (!$fileService->isImageFile($file) || !$file->path || $fileService->isThumbnailPath($file->path)) { $skipped++; continue; } $checked++; if (!Storage::disk('public')->exists($file->path)) { $skipped++; $missingSources++; if ($this->getOutput()->isVerbose()) { $this->warn("Нет исходного файла: #{$file->id} {$file->path}"); } continue; } $thumbnailPath = $fileService->thumbnailPath($file->path); if (Storage::disk('public')->exists($thumbnailPath)) { if (!$overwrite) { continue; } $overwriteCandidates++; if ($dryRun) { $this->line("Будет перезаписана миниатюра: #{$file->id} {$thumbnailPath}"); continue; } if ($fileService->ensureThumbnail($file, true)) { $overwritten++; $this->line("Перезаписана миниатюра: #{$file->id} {$thumbnailPath}"); } else { $failed++; $this->warn("Не удалось перезаписать миниатюру: #{$file->id} {$file->path}"); } continue; } $missing++; if ($dryRun) { $this->line("Нет миниатюры: #{$file->id} {$thumbnailPath}"); continue; } if ($fileService->ensureThumbnail($file)) { $created++; $this->line("Создана миниатюра: #{$file->id} {$thumbnailPath}"); } else { $failed++; $this->warn("Не удалось создать миниатюру: #{$file->id} {$file->path}"); } } }); $this->info("Проверено фото: {$checked}. Нет миниатюр: {$missing}. Создано: {$created}. К перезаписи: {$overwriteCandidates}. Перезаписано: {$overwritten}. Пропущено: {$skipped}. Нет исходников: {$missingSources}. Ошибок: {$failed}."); return $failed > 0 ? self::FAILURE : self::SUCCESS; } }