0.1.3
This commit is contained in:
71
app/Jobs/ComicUpsert.php
Normal file
71
app/Jobs/ComicUpsert.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Jobs;
|
||||
|
||||
use App\Models\Author;
|
||||
use App\Models\Comic;
|
||||
use App\Models\Image;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Queue\Queueable;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use romanzipp\QueueMonitor\Traits\IsMonitored;
|
||||
|
||||
class ComicUpsert implements ShouldQueue
|
||||
{
|
||||
use IsMonitored, Queueable;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
public function __construct(
|
||||
public array $comic,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*/
|
||||
public function handle(): void
|
||||
{
|
||||
$this->queueProgress(0);
|
||||
Log::info("JOB ComicUpsert START");
|
||||
|
||||
$comicsUpsertArray = [];
|
||||
$authorsUpsertArray = [];
|
||||
|
||||
foreach ($this->comic['list'] as $comic) {
|
||||
$comicsUpsertArray[] = [
|
||||
'pathword' => $comic['path_word'],
|
||||
'uuid' => '',
|
||||
'name' => $comic['name'],
|
||||
'alias' => '{}',
|
||||
'description' => '',
|
||||
'cover' => $comic['cover'],
|
||||
'upstream_updated_at' => $comic['datetime_updated'] ?? null,
|
||||
];
|
||||
|
||||
foreach ($comic['author'] as $author) {
|
||||
$authorsUpsertArray[] = [
|
||||
'name' => $author['name']
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Do an upsert for comics
|
||||
Comic::upsert($comicsUpsertArray, uniqueBy: 'pathword', update: ['upstream_updated_at']);
|
||||
Author::upsert($authorsUpsertArray, uniqueBy: 'name');
|
||||
|
||||
// Had to do a second pass to insert the relationships
|
||||
foreach ($this->comic['list'] as $comic) {
|
||||
// Get the comic id
|
||||
$comicObj = Comic::where('pathword', $comic['path_word'])->first();
|
||||
|
||||
foreach ($comic['author'] as $author) {
|
||||
$authorObj = Author::where('name', $author['name'])->first();
|
||||
$comicObj->authors()->sync($authorObj);
|
||||
}
|
||||
}
|
||||
|
||||
Log::info('JOB ComicUpsert END');
|
||||
$this->queueProgress(100);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user