Преглед на файлове

Fix TransformImports command

Daniel Supernault преди 2 седмици
родител
ревизия
d595963f51
променени са 2 файла, в които са добавени 73 реда и са изтрити 33 реда
  1. 73 32
      app/Console/Commands/TransformImports.php
  2. 0 1
      app/Services/ImportService.php

+ 73 - 32
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;
             }

+ 0 - 1
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) {