From d595963f510bd9f50212778f28500d8ebe601e40 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Wed, 9 Jul 2025 22:07:23 -0600 Subject: [PATCH] Fix TransformImports command --- app/Console/Commands/TransformImports.php | 105 +++++++++++++++------- app/Services/ImportService.php | 1 - 2 files changed, 73 insertions(+), 33 deletions(-) diff --git a/app/Console/Commands/TransformImports.php b/app/Console/Commands/TransformImports.php index b65a05a50..893943904 100644 --- a/app/Console/Commands/TransformImports.php +++ b/app/Console/Commands/TransformImports.php @@ -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; } diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 3f28aec52..f17f4a138 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -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) {