Skip to content

Commit

Permalink
rework media seed, move file job
Browse files Browse the repository at this point in the history
  • Loading branch information
iamgergo committed Mar 23, 2022
1 parent 8972fa8 commit 7450509
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 18 deletions.
32 changes: 32 additions & 0 deletions database/seeders/RootTestDataSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

namespace Cone\Root\Database\Seeders;

use Cone\Root\Jobs\MoveFile;
use Cone\Root\Jobs\PerformConversions;
use Cone\Root\Models\Medium;
use Cone\Root\Models\User;
use Illuminate\Database\Seeder;

Expand All @@ -13,10 +16,39 @@ class RootTestDataSeeder extends Seeder
* @return void
*/
public function run(): void
{
$this->seedUsers();
$this->seedMedia();
}

/**
* Seed the user models.
*
* @return void
*/
protected function seedUsers(): void
{
User::factory()->create([
'name' => 'Root Admin',
'email' => '[email protected]',
]);
}

/**
* Seed the media models.
*
* @return void
*/
protected function seedMedia(): void
{
$path = __DIR__.'/../../stubs/placeholder.png';

foreach (range(1, 10) as $key) {
$medium = Medium::createFrom($path);

MoveFile::withChain([
new PerformConversions($medium),
])->dispatch($medium, $path);
}
}
}
5 changes: 3 additions & 2 deletions src/Fields/Media.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Closure;
use Cone\Root\Http\Controllers\MediaController;
use Cone\Root\Http\Requests\ResourceRequest;
use Cone\Root\Http\Requests\RootRequest;
use Cone\Root\Models\Medium;
use Illuminate\Database\Eloquent\Model;
Expand Down Expand Up @@ -90,10 +91,10 @@ public function mapOption(Request $request, Model $model, Model $related): array
/**
* Map the items.
*
* @param \Cone\Root\Http\Requests\RootRequest $request
* @param \Cone\Root\Http\Requests\ResourceRequest $request
* @return array
*/
public function mapItems(RootRequest $request): array
public function mapItems(ResourceRequest $request): array
{
$model = $request->resource()->getModelInstance();

Expand Down
16 changes: 8 additions & 8 deletions src/Http/Controllers/MediaController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Cone\Root\Http\Controllers;

use Cone\Root\Http\Requests\RootRequest;
use Cone\Root\Http\Requests\ResourceRequest;
use Cone\Root\Jobs\MoveFile;
use Cone\Root\Jobs\PerformConversions;
use Illuminate\Http\JsonResponse;
Expand All @@ -14,10 +14,10 @@ class MediaController extends Controller
/**
* Display a listing of the resource.
*
* @param \Cone\Root\Http\Requests\RootRequest $request
* @param \Cone\Root\Http\Requests\ResourceRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(RootRequest $request): JsonResponse
public function index(ResourceRequest $request): JsonResponse
{
$field = $request->resolved();

Expand All @@ -27,10 +27,10 @@ public function index(RootRequest $request): JsonResponse
/**
* Store a newly created resource in storage.
*
* @param \Cone\Root\Http\Requests\RootRequest $request
* @param \Cone\Root\Http\Requests\ResourceRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(RootRequest $request): JsonResponse
public function store(ResourceRequest $request): JsonResponse
{
$field = $request->resolved();

Expand All @@ -47,18 +47,18 @@ public function store(RootRequest $request): JsonResponse
$medium = $field->store($request, $path);

MoveFile::withChain($medium->convertable() ? [new PerformConversions($medium)] : [])
->dispatch($medium, $path);
->dispatch($medium, $path, false);

return new JsonResponse($medium, JsonResponse::HTTP_CREATED);
}

/**
* Remove the specified resource from storage.
*
* @param \Cone\Root\Http\Requests\RootRequest $request
* @param \Cone\Root\Http\Requests\ResourceRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function destroy(RootRequest $request): JsonResponse
public function destroy(ResourceRequest $request): JsonResponse
{
// $medium->delete();

Expand Down
28 changes: 20 additions & 8 deletions src/Jobs/MoveFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Http\File as Stream;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\File;
Expand Down Expand Up @@ -33,6 +34,13 @@ class MoveFile implements ShouldQueue
*/
public string $path;

/**
* Indicates if the original file should be preserved.
*
* @var bool
*/
public bool $preserve = true;

/**
* Delete the job if its models no longer exist.
*
Expand All @@ -45,12 +53,14 @@ class MoveFile implements ShouldQueue
*
* @param \Cone\Root\Models\Medium $medium
* @param string $path
* @param bool $preserve
* @return void
*/
public function __construct(Medium $medium, string $path)
public function __construct(Medium $medium, string $path, bool $preserve = true)
{
$this->path = $path;
$this->medium = $medium;
$this->preserve = $preserve;
}

/**
Expand All @@ -60,13 +70,17 @@ public function __construct(Medium $medium, string $path)
*/
public function handle(): void
{
Storage::disk($this->medium->disk)->makeDirectory(
dirname($this->medium->getPath())
);
$directory = dirname($this->medium->getPath());

Storage::disk($this->medium->disk)->makeDirectory($directory);

Storage::disk($this->medium->disk)->move(
$this->path, $this->medium->getPath()
Storage::disk($this->medium->disk)->putFileAs(
$directory, new Stream($this->path), basename($this->medium->getPath())
);

if (! $this->preserve && ! filter_var($this->path, FILTER_VALIDATE_URL)) {
File::delete($this->path);
}
}

/**
Expand All @@ -78,8 +92,6 @@ public function handle(): void
public function failed(Throwable $exception): void
{
$this->medium->delete();

File::delete($this->path);
}
}

Binary file added stubs/placeholder.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7450509

Please sign in to comment.