Add job for function upload record to csv

This commit is contained in:
paoloGuagnano
2024-02-23 16:00:48 +01:00
parent 4a042f01ac
commit e7b7f3f31c
11 changed files with 230 additions and 186 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Http\Requests\FileRequest;
use App\Http\Requests\StorefileRequest;
use App\Http\Requests\UpdatefileRequest;
use App\Jobs\ImportCSVFileJob;
use App\Models\file;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -14,28 +15,14 @@ class FileController extends Controller
{
public function uploadFile(FileRequest $request): RedirectResponse
{
//save file in storage/app/public/file_temp
$filename = 'new_file.'.$request->file("filetoinsert")->getClientOriginalExtension();
$request->file("filetoinsert")->storeAs('file_temp', $filename);
// Leggi il contenuto del file CSV
$contenutoCSV = Storage::get('file_temp/new_file.csv');
// Analizza il contenuto CSV
$righeCSV = str_getcsv($contenutoCSV, "\n");
// Converte le righe CSV in un array associativo
$dati = [];
foreach ($righeCSV as $riga) {
$dati[] = str_getcsv($riga);
}
// Converte l'array in formato JSON
$json = json_encode($dati);
// Stampa il JSON
echo $json;
//get file path
$filepath = storage_path('app/public/file_temp/new_file.csv');
dispatch(new ImportCSVFileJob($filepath));
return redirect('/words');
}

View File

@@ -18,7 +18,7 @@ class FileRequest extends FormRequest
public function rules(): array
{
return [
'filetoinsert' => ['required', 'mimes:txt']//, File::types(['csv'])]
'filetoinsert' => ['required', 'mimes:csv']//, File::types(['csv'])]
];
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Models\Word;
use Illuminate\Support\Facades\Storage;
class ImportCSVFileJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $filepath;
/**
* Create a new job instance.
*/
public function __construct($filepath)
{
$this->filepath = $filepath;
}
/**
* Execute the job.
*/
public function handle(): void
{
$mapping = [
'name' => 0, 'translation' => 1,
];
$fileStream = fopen($this->filepath, 'r');
$skipHeader = true;
while ($row = fgetcsv($fileStream)) {
if ($skipHeader) {
$skipHeader = false;
continue;
}
Word::updateOrCreate(
[
'name' => $row[$mapping['name']],
'translation' => $row[$mapping['translation']],
]
);
}
fclose($fileStream);
Storage::delete($this->filepath);
}
}