feat(upload json): upload file and add job to queue

main
seyedmr 3 years ago
parent 68b136d3a1
commit 159e0d36d5
  1. 27
      app/Enums/FileFormatEnum.php
  2. 20
      app/Http/Controllers/V1/ConvertController.php
  3. 8
      app/Interfaces/ChunkerInterface.php
  4. 8
      app/Interfaces/ConverterInterface.php
  5. 9
      app/Jobs/ChunkFile.php
  6. 13
      app/Services/Chunkers/JsonChunker.php
  7. 10
      app/Services/Converters/JsonToDatabaseConverter.php
  8. 2
      routes/api/v1/routes.php

@ -0,0 +1,27 @@
<?php
namespace App\Enums;
use App\Services\Chunkers\JsonChunker;
use App\Services\Converters\JsonToDatabaseConverter;
enum FileFormatEnum: string
{
case JSON = 'json';
public function chunker($path): \Generator
{
$chunker = match ($this) {
self::JSON => JsonChunker::class
};
return $chunker->handle($path);
}
public function converter()
{
return match($this){
self::JSON => new JsonToDatabaseConverter()
};
}
}

@ -2,13 +2,31 @@
namespace App\Http\Controllers\V1; namespace App\Http\Controllers\V1;
use App\Enums\FileFormatEnum;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Jobs\ChunkFile;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class ConvertController extends Controller 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
]);
} }
} }

@ -0,0 +1,8 @@
<?php
namespace App\Interfaces;
interface ChunkerInterface
{
public function handle(): \Generator;
}

@ -0,0 +1,8 @@
<?php
namespace App\Interfaces;
interface ConverterInterface
{
public function handle(): void;
}

@ -2,6 +2,7 @@
namespace App\Jobs; namespace App\Jobs;
use App\Enums\FileFormatEnum;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
@ -18,7 +19,11 @@ class ChunkFile implements ShouldQueue
* *
* @return void * @return void
*/ */
public function __construct() public function __construct(
public string $uuid,
public string $path,
public FileFormatEnum $format
)
{ {
// //
} }
@ -30,6 +35,6 @@ class ChunkFile implements ShouldQueue
*/ */
public function handle() public function handle()
{ {
//
} }
} }

@ -0,0 +1,13 @@
<?php
namespace App\Services\Chunkers;
use App\Interfaces\ChunkerInterface;
class JsonChunker implements ChunkerInterface
{
public function handle(): \Generator
{
}
}

@ -0,0 +1,10 @@
<?php
namespace App\Services\Converters;
use App\Interfaces\ConverterInterface;
class JsonToDatabaseConverter implements ConverterInterface
{
}

@ -3,7 +3,7 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::prefix('convert')->group(function () { Route::prefix('convert')->group(function () {
Route::post('json', [ Route::post('{format}', [
\App\Http\Controllers\V1\ConvertController::class, \App\Http\Controllers\V1\ConvertController::class,
'convert' 'convert'
]); ]);

Loading…
Cancel
Save