2024-10-24 14:48:24 -05:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Jobs;
|
|
|
|
|
|
|
|
|
|
use Throwable;
|
|
|
|
|
use App\Models\User;
|
|
|
|
|
use App\Models\BackupImport;
|
|
|
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
|
|
|
use Illuminate\Foundation\Queue\Queueable;
|
|
|
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
2024-10-24 16:36:54 -05:00
|
|
|
use App\Notifications\ImportSucceededNotification;
|
|
|
|
|
use App\Notifications\ImportFailedNotification;
|
2024-10-24 14:48:24 -05:00
|
|
|
use App\Imports\BackupImport as BackupImportExcel;
|
|
|
|
|
|
|
|
|
|
class BackupImportJob implements ShouldQueue
|
|
|
|
|
{
|
|
|
|
|
use Queueable;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The number of times the job may be attempted.
|
|
|
|
|
*/
|
|
|
|
|
public $tries = 1;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The number of seconds the job can run before timing out.
|
|
|
|
|
*
|
|
|
|
|
* @var int
|
|
|
|
|
*/
|
|
|
|
|
public $timeout = 300;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Indicate if the job should be marked as failed on timeout.
|
|
|
|
|
*
|
|
|
|
|
* @var bool
|
|
|
|
|
*/
|
|
|
|
|
public $failOnTimeout = true;
|
|
|
|
|
|
2024-10-24 16:36:54 -05:00
|
|
|
public User $user;
|
|
|
|
|
|
2024-10-24 14:48:24 -05:00
|
|
|
/**
|
|
|
|
|
* Create a new job instance.
|
|
|
|
|
*/
|
|
|
|
|
public function __construct(
|
|
|
|
|
public BackupImport $backupImport
|
2024-10-24 16:36:54 -05:00
|
|
|
) {
|
|
|
|
|
$this->user = User::find($this->backupImport->user_id);
|
|
|
|
|
}
|
2024-10-24 14:48:24 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Execute the job.
|
|
|
|
|
*/
|
|
|
|
|
public function handle(): void
|
|
|
|
|
{
|
|
|
|
|
Excel::import(new BackupImportExcel($this->backupImport), $this->backupImport->path, config('livewire.temporary_file_upload.disk', null));
|
2024-10-24 16:36:54 -05:00
|
|
|
|
|
|
|
|
$this->user->notify(new ImportSucceededNotification);
|
2024-10-24 14:48:24 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Handle a job failure.
|
|
|
|
|
*/
|
|
|
|
|
public function failed(?Throwable $e): void
|
|
|
|
|
{
|
|
|
|
|
$this->backupImport->update([
|
|
|
|
|
'status' => 'failed',
|
|
|
|
|
'message' => 'Error: '. substr($e->getMessage(), 0, 220),
|
|
|
|
|
'has_errors' => true,
|
|
|
|
|
'completed_at' => now()
|
|
|
|
|
]);
|
2024-10-24 16:36:54 -05:00
|
|
|
|
|
|
|
|
$this->user->notify(new ImportFailedNotification($e->getMessage()));
|
2024-10-24 14:48:24 -05:00
|
|
|
}
|
|
|
|
|
}
|