Fix TransformImports command

pull/6061/head
Daniel Supernault 4 months ago
parent a8d1d0f2eb
commit d595963f51
No known key found for this signature in database
GPG Key ID: 23740873EE6F76A1

@ -10,10 +10,10 @@ use App\Services\ImportService;
use App\Services\MediaPathService;
use App\Status;
use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Storage;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Storage;
class TransformImports extends Command
{
@ -72,10 +72,28 @@ class TransformImports extends Command
continue;
}
$idk = ImportService::getId($ip->user_id, $ip->creation_year, $ip->creation_month, $ip->creation_day);
if (! $idk) {
if ($id > 999999) {
$ip->skip_missing_media = true;
$ip->save();
continue;
}
if ($ip->creation_year < 9 || $ip->creation_year > (int) now()->addYear()->format('y')) {
$ip->skip_missing_media = true;
$ip->save();
continue;
}
if ($ip->creation_month < 1 || $ip->creation_month > 12) {
$ip->skip_missing_media = true;
$ip->save();
continue;
}
if ($ip->creation_day < 1 || $ip->creation_day > 31) {
$ip->skip_missing_media = true;
$ip->save();
continue;
}
@ -104,18 +122,9 @@ class TransformImports extends Command
continue;
}
$caption = $ip->caption ?? "";
$status = new Status;
$status->profile_id = $pid;
$status->caption = $caption;
$status->type = $ip->post_type;
$status->scope = 'public';
$status->visibility = 'public';
$status->id = $idk['id'];
$status->created_at = now()->parse($ip->creation_date);
$status->saveQuietly();
$caption = $ip->caption ?? '';
$mediaRecords = [];
foreach ($ip->media as $ipm) {
$fileName = last(explode('/', $ipm['uri']));
$ext = last(explode('.', $fileName));
@ -125,25 +134,23 @@ class TransformImports extends Command
$ip->skip_missing_media = true;
$ip->save();
continue;
continue 2;
}
$size = Storage::size($og);
$mime = Storage::mimeType($og);
$newFile = Str::random(40).'.'.$ext;
$np = $basePath.'/'.$newFile;
Storage::move($og, $np);
$media = new Media;
$media->profile_id = $pid;
$media->user_id = $id;
$media->status_id = $status->id;
$media->media_path = $np;
$media->mime = $mime;
$media->size = $size;
$media->save();
$mediaRecords[] = [
'media_path' => $np,
'mime' => $mime,
'size' => $size,
];
}
try {
DB::transaction(function () use ($ip, $status, $profile, $id) {
DB::transaction(function () use ($ip, $profile, $id, $pid, $caption, $mediaRecords) {
$uniqueIdData = ImportService::getUniqueCreationId(
$id,
$ip->creation_year,
@ -152,10 +159,38 @@ class TransformImports extends Command
$ip->id
);
if (!$uniqueIdData) {
if (! $uniqueIdData) {
throw new \Exception("Could not generate unique creation_id for ImportPost ID {$ip->id}");
}
$uid = str_pad($id, 6, 0, STR_PAD_LEFT);
$yearStr = str_pad($uniqueIdData['year'], 2, 0, STR_PAD_LEFT);
$monthStr = str_pad($uniqueIdData['month'], 2, 0, STR_PAD_LEFT);
$dayStr = str_pad($uniqueIdData['day'], 2, 0, STR_PAD_LEFT);
$zone = $yearStr.$monthStr.$dayStr.str_pad($uniqueIdData['incr'], 3, 0, STR_PAD_LEFT);
$statusId = '1'.$uid.$zone;
$status = new Status;
$status->profile_id = $pid;
$status->caption = $caption;
$status->type = $ip->post_type;
$status->scope = 'public';
$status->visibility = 'public';
$status->id = $statusId;
$status->created_at = now()->parse($ip->creation_date);
$status->saveQuietly();
foreach ($mediaRecords as $mediaData) {
$media = new Media;
$media->profile_id = $pid;
$media->user_id = $id;
$media->status_id = $status->id;
$media->media_path = $mediaData['media_path'];
$media->mime = $mediaData['mime'];
$media->size = $mediaData['size'];
$media->save();
}
$ip->status_id = $status->id;
$ip->creation_id = $uniqueIdData['incr'];
@ -181,21 +216,27 @@ class TransformImports extends Command
ImportService::getPostCount($profile->id, true);
} catch (QueryException $e) {
$this->error("Database error for ImportPost ID {$ip->id}: " . $e->getMessage());
$this->error("Database error for ImportPost ID {$ip->id}: ".$e->getMessage());
$ip->skip_missing_media = true;
$ip->save();
$status->delete();
Media::where('status_id', $status->id)->delete();
foreach ($mediaRecords as $mediaData) {
if (Storage::exists($mediaData['media_path'])) {
Storage::delete($mediaData['media_path']);
}
}
continue;
} catch (\Exception $e) {
$this->error("Error processing ImportPost ID {$ip->id}: " . $e->getMessage());
$this->error("Error processing ImportPost ID {$ip->id}: ".$e->getMessage());
$ip->skip_missing_media = true;
$ip->save();
$status->delete();
Media::where('status_id', $status->id)->delete();
foreach ($mediaRecords as $mediaData) {
if (Storage::exists($mediaData['media_path'])) {
Storage::delete($mediaData['media_path']);
}
}
continue;
}

@ -41,7 +41,6 @@ class ImportService
$incr = $maxExistingIncr + 1;
// If we've exceeded 999 for this day, try next day
if ($incr > 999) {
[$newYear, $newMonth, $newDay] = self::getNextValidDate($year, $month, $day);
if (! $newYear) {

Loading…
Cancel
Save