Extract global moving logic to a Mover class

parent bc7a09b6
...@@ -7,8 +7,7 @@ use Modules\Media\Entities\File; ...@@ -7,8 +7,7 @@ use Modules\Media\Entities\File;
use Modules\Media\Http\Requests\MoveMediaRequest; use Modules\Media\Http\Requests\MoveMediaRequest;
use Modules\Media\Repositories\FileRepository; use Modules\Media\Repositories\FileRepository;
use Modules\Media\Repositories\FolderRepository; use Modules\Media\Repositories\FolderRepository;
use Modules\Media\Services\Movers\FileMover; use Modules\Media\Services\Movers\Mover;
use Modules\Media\Services\Movers\FolderMover;
class MoveMediaController extends Controller class MoveMediaController extends Controller
{ {
...@@ -21,25 +20,19 @@ class MoveMediaController extends Controller ...@@ -21,25 +20,19 @@ class MoveMediaController extends Controller
*/ */
private $folder; private $folder;
/** /**
* @var FolderMover * @var Mover
*/ */
private $folderMover; private $mover;
/**
* @var FileMover
*/
private $fileMover;
public function __construct( public function __construct(
FileRepository $file, FileRepository $file,
FolderRepository $folder, FolderRepository $folder,
FolderMover $folderMover, Mover $mover
FileMover $fileMover
) )
{ {
$this->file = $file; $this->file = $file;
$this->folder = $folder; $this->folder = $folder;
$this->folderMover = $folderMover; $this->mover = $mover;
$this->fileMover = $fileMover;
} }
public function __invoke(MoveMediaRequest $request) public function __invoke(MoveMediaRequest $request)
...@@ -48,18 +41,7 @@ class MoveMediaController extends Controller ...@@ -48,18 +41,7 @@ class MoveMediaController extends Controller
$failedMoves = 0; $failedMoves = 0;
foreach ($request->get('files') as $file) { foreach ($request->get('files') as $file) {
$file = $this->file->find($file['id']); $failedMoves = $this->mover->move($this->file->find($file['id']), $destination);
// $this->>mover->move($file, $destination)
if ($file->is_folder === false) {
if ($this->fileMover->move($file, $destination) === false) {
$failedMoves++;
}
}
if ($file->is_folder === true) {
if ($this->folderMover->move($file, $destination) === false) {
$failedMoves++;
}
}
} }
return response()->json([ return response()->json([
......
...@@ -59,6 +59,7 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos ...@@ -59,6 +59,7 @@ class EloquentFileRepository extends EloquentBaseRepository implements FileRepos
'mimetype' => $file->getClientMimeType(), 'mimetype' => $file->getClientMimeType(),
'filesize' => $file->getFileInfo()->getSize(), 'filesize' => $file->getFileInfo()->getSize(),
'folder_id' => $parentId, 'folder_id' => $parentId,
'is_folder' => 0,
]; ];
event($event = new FileIsCreating($data)); event($event = new FileIsCreating($data));
......
<?php
namespace Modules\Media\Services\Movers;
use Modules\Media\Entities\File;
class Mover
{
/**
* @var FileMover
*/
private $fileMover;
/**
* @var FolderMover
*/
private $folderMover;
public function __construct(FileMover $fileMover, FolderMover $folderMover)
{
$this->fileMover = $fileMover;
$this->folderMover = $folderMover;
}
public function move(File $file, File $destination) : int
{
$failedMoves = 0;
if ($file->is_folder === false && $this->fileMover->move($file, $destination) === false) {
$failedMoves++;
}
if ($file->is_folder === true && $this->folderMover->move($file, $destination) === false) {
$failedMoves++;
}
return $failedMoves;
}
}
<?php
namespace Modules\Media\Tests;
use Modules\Media\Repositories\FolderRepository;
use Modules\Media\Services\FileService;
use Modules\Media\Services\Movers\Mover;
final class MoverTest extends MediaTestCase
{
/**
* @var Mover
*/
private $mover;
public function setUp()
{
parent::setUp();
$this->resetDatabase();
$this->mover = app(Mover::class);
//$this->file = app(FileRepository::class);
$this->app['config']->set('asgard.media.config.files-path', '/assets/media/');
}
public function tearDown()
{
if ($this->app['files']->isDirectory(public_path('assets')) === true) {
$this->app['files']->deleteDirectory(public_path('assets'));
}
}
/** @test */
public function it_detects_its_a_file_to_move()
{
$folderRepository = app(FolderRepository::class);
$parentFolder = $folderRepository->create(['name' => 'My Folder', 'parent_id' => 0]);
$file = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->create('my-file.pdf'));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file.pdf')));
$failedAmount = $this->mover->move($file, $parentFolder);
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-file.pdf')));
$this->assertSame(0, $failedAmount);
}
/** @test */
public function it_detects_its_a_folder_to_move()
{
$folderRepository = app(FolderRepository::class);
$parentFolder = $folderRepository->create(['name' => 'My Folder', 'parent_id' => 0]);
$childFolder = $folderRepository->create(['name' => 'Child Folder', 'parent_id' => 0]);
$this->assertTrue($this->app['files']->isDirectory(public_path('/assets/media/child-folder')));
$failedAmount = $this->mover->move($childFolder, $parentFolder);
$this->assertTrue($this->app['files']->isDirectory(public_path('/assets/media/my-folder/child-folder')));
$this->assertSame(0, $failedAmount);
}
/** @test */
public function it_counts_amount_of_failed_moves()
{
$folderRepository = app(FolderRepository::class);
$folder = $folderRepository->create(['name' => 'My Folder', 'parent_id' => 0]);
$file = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'), $folder->id);
$fileTwo = app(FileService::class)->store(\Illuminate\Http\UploadedFile::fake()->image('my-file.jpg'));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file.jpg')));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-file.jpg')));
$this->assertEquals('/assets/media/my-folder/my-file.jpg', $file->path->getRelativeUrl());
$this->assertEquals('/assets/media/my-file.jpg', $fileTwo->path->getRelativeUrl());
$failedAmount = $this->mover->move($fileTwo, $folder);
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-file.jpg')));
$this->assertTrue($this->app['files']->exists(public_path('/assets/media/my-folder/my-file.jpg')));
$this->assertEquals('/assets/media/my-folder/my-file.jpg', $file->path->getRelativeUrl());
$this->assertEquals('/assets/media/my-file.jpg', $fileTwo->path->getRelativeUrl());
$this->assertSame(1, $failedAmount);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment