From 159e0d36d5c17bdf02227c1585b8c0dcc2f5e3a6 Mon Sep 17 00:00:00 2001 From: seyedmr Date: Fri, 18 Nov 2022 18:54:02 +0330 Subject: [PATCH] feat(upload json): upload file and add job to queue --- app/Enums/FileFormatEnum.php | 27 +++++++++++++++++++ app/Http/Controllers/V1/ConvertController.php | 20 +++++++++++++- app/Interfaces/ChunkerInterface.php | 8 ++++++ app/Interfaces/ConverterInterface.php | 8 ++++++ app/Jobs/ChunkFile.php | 9 +++++-- app/Services/Chunkers/JsonChunker.php | 13 +++++++++ .../Converters/JsonToDatabaseConverter.php | 10 +++++++ routes/api/v1/routes.php | 2 +- 8 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 app/Enums/FileFormatEnum.php create mode 100644 app/Interfaces/ChunkerInterface.php create mode 100644 app/Interfaces/ConverterInterface.php create mode 100644 app/Services/Chunkers/JsonChunker.php create mode 100644 app/Services/Converters/JsonToDatabaseConverter.php diff --git a/app/Enums/FileFormatEnum.php b/app/Enums/FileFormatEnum.php new file mode 100644 index 0000000..60ab4cb --- /dev/null +++ b/app/Enums/FileFormatEnum.php @@ -0,0 +1,27 @@ + JsonChunker::class + }; + + return $chunker->handle($path); + } + + public function converter() + { + return match($this){ + self::JSON => new JsonToDatabaseConverter() + }; + } +} diff --git a/app/Http/Controllers/V1/ConvertController.php b/app/Http/Controllers/V1/ConvertController.php index 303daf7..04744e7 100644 --- a/app/Http/Controllers/V1/ConvertController.php +++ b/app/Http/Controllers/V1/ConvertController.php @@ -2,13 +2,31 @@ namespace App\Http\Controllers\V1; +use App\Enums\FileFormatEnum; use App\Http\Controllers\Controller; +use App\Jobs\ChunkFile; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; class ConvertController extends Controller { - public function convert() + public function convert(FileFormatEnum $format, Request $request) { + Storage::put( + $request->file('file')->getClientOriginalName(), + $request->file('file')->getContent(), + ); + ChunkFile::dispatch( + Str::uuid(), + $request->file('file')->getClientOriginalName(), + $format + ); + + return response([ + 'msg' => 'done', + 'seccess' => true + ]); } } diff --git a/app/Interfaces/ChunkerInterface.php b/app/Interfaces/ChunkerInterface.php new file mode 100644 index 0000000..4910f75 --- /dev/null +++ b/app/Interfaces/ChunkerInterface.php @@ -0,0 +1,8 @@ +group(function () { - Route::post('json', [ + Route::post('{format}', [ \App\Http\Controllers\V1\ConvertController::class, 'convert' ]);