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\Services\MediaPathService;
use App\Status; use App\Status;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Storage;
use Illuminate\Database\QueryException; use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Storage;
class TransformImports extends Command class TransformImports extends Command
{ {
@ -72,10 +72,28 @@ class TransformImports extends Command
continue; continue;
} }
$idk = ImportService::getId($ip->user_id, $ip->creation_year, $ip->creation_month, $ip->creation_day); if ($id > 999999) {
if (! $idk) {
$ip->skip_missing_media = true; $ip->skip_missing_media = true;
$ip->save(); $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; continue;
} }
@ -104,18 +122,9 @@ class TransformImports extends Command
continue; continue;
} }
$caption = $ip->caption ?? ""; $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();
$mediaRecords = [];
foreach ($ip->media as $ipm) { foreach ($ip->media as $ipm) {
$fileName = last(explode('/', $ipm['uri'])); $fileName = last(explode('/', $ipm['uri']));
$ext = last(explode('.', $fileName)); $ext = last(explode('.', $fileName));
@ -125,25 +134,23 @@ class TransformImports extends Command
$ip->skip_missing_media = true; $ip->skip_missing_media = true;
$ip->save(); $ip->save();
continue; continue 2;
} }
$size = Storage::size($og); $size = Storage::size($og);
$mime = Storage::mimeType($og); $mime = Storage::mimeType($og);
$newFile = Str::random(40).'.'.$ext; $newFile = Str::random(40).'.'.$ext;
$np = $basePath.'/'.$newFile; $np = $basePath.'/'.$newFile;
Storage::move($og, $np); Storage::move($og, $np);
$media = new Media;
$media->profile_id = $pid; $mediaRecords[] = [
$media->user_id = $id; 'media_path' => $np,
$media->status_id = $status->id; 'mime' => $mime,
$media->media_path = $np; 'size' => $size,
$media->mime = $mime; ];
$media->size = $size;
$media->save();
} }
try { try {
DB::transaction(function () use ($ip, $status, $profile, $id) { DB::transaction(function () use ($ip, $profile, $id, $pid, $caption, $mediaRecords) {
$uniqueIdData = ImportService::getUniqueCreationId( $uniqueIdData = ImportService::getUniqueCreationId(
$id, $id,
$ip->creation_year, $ip->creation_year,
@ -152,10 +159,38 @@ class TransformImports extends Command
$ip->id $ip->id
); );
if (!$uniqueIdData) { if (! $uniqueIdData) {
throw new \Exception("Could not generate unique creation_id for ImportPost ID {$ip->id}"); 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->status_id = $status->id;
$ip->creation_id = $uniqueIdData['incr']; $ip->creation_id = $uniqueIdData['incr'];
@ -181,21 +216,27 @@ class TransformImports extends Command
ImportService::getPostCount($profile->id, true); ImportService::getPostCount($profile->id, true);
} catch (QueryException $e) { } 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->skip_missing_media = true;
$ip->save(); $ip->save();
$status->delete(); foreach ($mediaRecords as $mediaData) {
Media::where('status_id', $status->id)->delete(); if (Storage::exists($mediaData['media_path'])) {
Storage::delete($mediaData['media_path']);
}
}
continue; continue;
} catch (\Exception $e) { } 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->skip_missing_media = true;
$ip->save(); $ip->save();
$status->delete(); foreach ($mediaRecords as $mediaData) {
Media::where('status_id', $status->id)->delete(); if (Storage::exists($mediaData['media_path'])) {
Storage::delete($mediaData['media_path']);
}
}
continue; continue;
} }

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

Loading…
Cancel
Save