controller refactoring part 25

This commit is contained in:
Peter Papp
2021-07-22 07:49:25 +02:00
parent 6d8a7a429c
commit 5167f082f7
50 changed files with 252 additions and 481 deletions
@@ -6,37 +6,46 @@ use Intervention\Image\ImageManagerStatic as Image;
class CreateImageThumbnailAction
{
private array $availableFormats = [
'image/gif',
'image/jpeg',
'image/jpg',
'image/png',
'image/webp'
];
/**
* Create image thumbnail from gif, jpeg, jpg, png, webp or svg
* Create image thumbnail from uploaded image
*/
public function __invoke(
string $file_path,
string $filename,
string $user_id
): string | null {
$availableFormats = ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'];
$mimeType = Storage::disk('local')->mimeType($file_path);
// Create thumbnail from image
if (in_array(Storage::disk('local')->mimeType($file_path), $availableFormats)) {
if (in_array($mimeType, $this->availableFormats)) {
// Get thumbnail name
$thumbnail = "thumbnail-$filename";
// Create intervention image
$image = Image::make(Storage::disk('local')->path($file_path))
$image = Image::make(Storage::disk('local')
->path($file_path))
->orientate();
// Resize image
$image->resize(512, null, function ($constraint) {
$constraint->aspectRatio();
})->stream();
$image->resize(512, null, fn ($constraint) => $constraint->aspectRatio())->stream();
// Store thumbnail to disk
Storage::put("files/$user_id/$thumbnail", $image);
}
// Return thumbnail as svg file
if (Storage::disk('local')->mimeType($file_path) === 'image/svg+xml') {
$thumbnail = $filename;
if ($mimeType === 'image/svg+xml') {
return $filename;
}
return $thumbnail ?? null;
@@ -16,7 +16,7 @@ class MoveFileToExternalStorageAction
string $file,
string $user_id
): void {
$disk_local = \Storage::disk('local');
$disk_local = Storage::disk('local');
// Get file size
$filesize = $disk_local->size("files/$user_id/$file");
@@ -24,7 +24,7 @@ class MoveFileToExternalStorageAction
// If file is bigger than 5.2MB then run multipart upload
if ($filesize > 5242880) {
// Get driver
$driver = \Storage::getDriver();
$driver = Storage::getDriver();
// Get adapter
$adapter = $driver->getAdapter();
@@ -0,0 +1,27 @@
<?php
namespace Domain\Localization\Actions;
use Domain\Localization\Models\Language;
use Domain\Settings\Models\Setting;
class SeedDefaultLanguageAction
{
/**
* Store default VueFileManager language into database
*/
public function __invoke(): void
{
Language::create([
'name' => 'English',
'locale' => 'en',
]);
Setting::create([
'name' => 'language',
'value' => 'en',
]);
}
}
@@ -0,0 +1,19 @@
<?php
namespace Domain\Pages\Actions;
use Domain\Pages\Models\Page;
class SeedDefaultPagesAction
{
/**
* Store default pages content like Terms of Service, Privacy Policy and Cookie Policy into database
*/
public function __invoke(): void
{
collect(config('content.pages'))
->each(fn ($page) => Page::updateOrCreate($page));
}
}
@@ -0,0 +1,21 @@
<?php
namespace Domain\Settings\Actions;
use Domain\Settings\Models\Setting;
class SeedDefaultSettingsAction
{
/**
* Store default VueFileManager settings into database
*/
public function __invoke(
string $license
): void {
collect(
config('content.content.' . strtolower($license))
)->each(fn ($content) => Setting::forceCreate($content));
}
}
@@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
class GetIAppController
class GetAppImageController
{
/**
* Get system image
@@ -0,0 +1,26 @@
<?php
namespace Domain\SetupWizard\Actions;
use Illuminate\Support\Facades\Storage;
class CreateDiskDirectoriesAction
{
/**
* Create default folders which application to process files.
*/
public function __invoke(): void
{
collect(['avatars', 'chunks', 'system', 'files', 'temp', 'zip'])
->each(function ($directory) {
// Create directory for local driver
Storage::disk('local')
->makeDirectory($directory);
// Create directory for external driver
Storage::makeDirectory($directory);
});
}
}
@@ -2,12 +2,14 @@
namespace Domain\SetupWizard\Controllers;
use App\Users\Models\User;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
use Domain\Pages\Actions\SeedDefaultPagesAction;
use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Domain\SetupWizard\Services\SetupService;
/**
* Create and login admin account
@@ -15,9 +17,10 @@ use Domain\SetupWizard\Services\SetupService;
class CreateAdminAccountController extends Controller
{
public function __construct(
public SetupService $setup,
) {
}
public SeedDefaultPagesAction $seedDefaultPages,
public SeedDefaultLanguageAction $seedDefaultLanguage,
public SeedDefaultSettingsAction $seedDefaultSettingsAction,
) {}
public function __invoke(
Request $request
@@ -70,9 +73,9 @@ class CreateAdminAccountController extends Controller
});
// Set up application
$this->setup->seed_default_pages();
$this->setup->seed_default_settings($request->input('license'));
$this->setup->seed_default_language();
($this->seedDefaultPages)();
($this->seedDefaultSettingsAction)($request->input('license'));
($this->seedDefaultLanguage)();
// Login account
if (Auth::attempt($request->only(['email', 'password']))) {
@@ -1,66 +0,0 @@
<?php
namespace Domain\SetupWizard\Services;
use Domain\Pages\Models\Page;
use Domain\Settings\Models\Setting;
use Illuminate\Support\Facades\Storage;
use Domain\Localization\Models\Language;
class SetupService
{
/**
* Create default folders which application to process files.
*/
public function create_directories()
{
collect(['avatars', 'chunks', 'system', 'files', 'temp', 'zip'])
->each(function ($directory) {
// Create directory for local driver
Storage::disk('local')
->makeDirectory($directory);
// Create directory for external driver
Storage::makeDirectory($directory);
});
}
/**
* Store default pages content like Terms of Service, Privacy Policy and Cookie Policy into database
*/
public function seed_default_pages()
{
collect(config('content.pages'))
->each(function ($page) {
Page::updateOrCreate($page);
});
}
/**
* Store default VueFileManager settings into database
*
* @param $license
*/
public function seed_default_settings($license)
{
collect(config('content.content.' . strtolower($license)))
->each(function ($content) {
Setting::forceCreate($content);
});
}
/**
* Store default VueFileManager settings into database
*/
public function seed_default_language()
{
Language::create([
'name' => 'English',
'locale' => 'en',
]);
Setting::create([
'name' => 'language',
'value' => 'en',
]);
}
}
@@ -5,8 +5,9 @@ use Domain\Sharing\Models\Share;
class ProtectShareRecordAction
{
public function __invoke(Share $shared): void
{
public function __invoke(
Share $shared
): void {
if ($shared->is_protected) {
$abort_message = "Sorry, you don't have permission";
@@ -3,7 +3,7 @@ namespace Domain\Sharing\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Domain\Zipping\Models\Zip;
use Domain\Zip\Models\Zip;
use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
@@ -31,12 +31,8 @@ class ShareController extends Controller
SendViaEmailAction $sendLinkToEmailAction,
): ShareResource {
$shared = Share::create([
'password' => $request->has('password')
? bcrypt($request->input('password'))
: null,
'type' => $request->input('type') === 'folder'
? 'folder'
: 'file',
'password' => $request->has('password') ? bcrypt($request->input('password')) : null,
'type' => $request->input('type') === 'folder' ? 'folder' : 'file',
'is_protected' => $request->input('isPassword'),
'permission' => $request->input('permission') ?? null,
'expire_in' => $request->input('expiration') ?? null,
@@ -1,8 +1,8 @@
<?php
namespace Domain\Zipping\Actions;
namespace Domain\Zip\Actions;
use Illuminate\Support\Str;
use Domain\Zipping\Models\Zip;
use Domain\Zip\Models\Zip;
use Domain\Sharing\Models\Share;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
@@ -1,8 +1,8 @@
<?php
namespace Domain\Zipping\Actions;
namespace Domain\Zip\Actions;
use Illuminate\Support\Str;
use Domain\Zipping\Models\Zip;
use Domain\Zip\Models\Zip;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Auth;
@@ -1,7 +1,7 @@
<?php
namespace Domain\Zipping\Controllers;
namespace Domain\Zip\Controllers;
use Domain\Zipping\Models\Zip;
use Domain\Zip\Models\Zip;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
@@ -1,7 +1,7 @@
<?php
namespace Domain\Zipping\Controllers;
namespace Domain\Zip\Controllers;
use Domain\Zipping\Models\Zip;
use Domain\Zip\Models\Zip;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
use Domain\Traffic\Actions\RecordDownloadAction;
@@ -1,12 +1,12 @@
<?php
namespace Domain\Zipping\Controllers;
namespace Domain\Zip\Controllers;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
use Domain\Zipping\Actions\ZipFilesAction;
use Domain\Zip\Actions\ZipFilesAction;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction;
@@ -18,11 +18,11 @@ class VisitorZipFilesController extends Controller
public function __construct(
private ProtectShareRecordAction $protectShareRecord,
private VerifyAccessToItemAction $verifyAccessToItem,
private ZipFilesAction $zipFiles,
) {
}
public function __invoke(
ZipFilesAction $zipFiles,
Request $request,
Share $shared,
): Response {
@@ -43,7 +43,7 @@ class VisitorZipFilesController extends Controller
->whereIn('id', $request->items)
->get();
$zip = ($zipFiles)($files, $shared);
$zip = ($this->zipFiles)($files, $shared);
// Get file
return response([
@@ -1,11 +1,11 @@
<?php
namespace Domain\Zipping\Controllers;
namespace Domain\Zip\Controllers;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Domain\Zipping\Actions\ZipFolderAction;
use Domain\Zip\Actions\ZipFolderAction;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction;
@@ -17,11 +17,11 @@ class VisitorZipFolderController extends Controller
public function __construct(
private ProtectShareRecordAction $protectShareRecord,
private VerifyAccessToItemAction $verifyAccessToItem,
private ZipFolderAction $zipFolder,
) {
}
public function __invoke(
ZipFolderAction $zipFolder,
string $id,
Share $shared,
): Response {
@@ -39,7 +39,7 @@ class VisitorZipFolderController extends Controller
abort(404, 'Requested folder doesn\'t exists.');
}
$zip = ($zipFolder)($id, $shared);
$zip = ($this->zipFolder)($id, $shared);
// Get file
return response([
@@ -1,24 +1,28 @@
<?php
namespace Domain\Zipping\Controllers;
namespace Domain\Zip\Controllers;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Domain\Zipping\Actions\ZipFilesAction;
use Domain\Zip\Actions\ZipFilesAction;
class ZipFilesController extends Controller
{
public function __construct(
private ZipFilesAction $zipFiles,
) {
}
public function __invoke(
Request $request,
ZipFilesAction $zipFiles,
): Response {
$files = File::whereUserId(Auth::id())
->whereIn('id', $request->input('items'))
->get();
$zip = ($zipFiles)($files);
$zip = ($this->zipFiles)($files);
return response([
'url' => route('zip', $zip->id),
@@ -1,17 +1,21 @@
<?php
namespace Domain\Zipping\Controllers;
namespace Domain\Zip\Controllers;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Domain\Zipping\Actions\ZipFolderAction;
use Domain\Zip\Actions\ZipFolderAction;
class ZipFolderController extends Controller
{
public function __construct(
private ZipFolderAction $zipFolder,
) {
}
public function __invoke(
string $id,
ZipFolderAction $zipFolder,
): Response {
$folder = Folder::whereUserId(Auth::id())
->where('id', $id);
@@ -20,7 +24,7 @@ class ZipFolderController extends Controller
abort(404, "Requested folder doesn't exists.");
}
$zip = ($zipFolder)($id);
$zip = ($this->zipFolder)($id);
return response([
'url' => route('zip', $zip->id),
@@ -1,5 +1,5 @@
<?php
namespace Domain\Zipping\Models;
namespace Domain\Zip\Models;
use App\Users\Models\User;
use Illuminate\Support\Str;
@@ -8,6 +8,9 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* @property mixed basename
*/
class Zip extends Model
{
use HasFactory;