From 3860faf851b2e60974b60c14dc2113b44025ca67 Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Wed, 21 Jul 2021 12:01:44 +0200 Subject: [PATCH] controller refactoring part 19 --- routes/api.php | 4 +- src/App/Console/Kernel.php | 30 +++---- ...ontroller.php => UploadFileController.php} | 2 +- src/Domain/Zipping/Models/Zip.php | 3 - .../Actions/DeleteExpiredShareLinksAction.php | 29 ++++++ .../Actions/DeleteFailedFilesAction.php | 44 +++++++++ .../Scheduler/Actions/DeleteOldZipsAction.php | 27 ++++++ .../Actions/DeleteUnverifiedUsersAction.php | 21 +++++ .../Scheduler/Actions/SchedulerService.php | 89 ------------------- tests/Support/Scheduler/SchedulerTest.php | 17 ++-- 10 files changed, 146 insertions(+), 120 deletions(-) rename src/Domain/Files/Controllers/{UploadFilesController.php => UploadFileController.php} (92%) create mode 100644 src/Support/Scheduler/Actions/DeleteExpiredShareLinksAction.php create mode 100644 src/Support/Scheduler/Actions/DeleteFailedFilesAction.php create mode 100644 src/Support/Scheduler/Actions/DeleteOldZipsAction.php create mode 100644 src/Support/Scheduler/Actions/DeleteUnverifiedUsersAction.php delete mode 100644 src/Support/Scheduler/Actions/SchedulerService.php diff --git a/routes/api.php b/routes/api.php index ced8528d..105e497e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -8,7 +8,7 @@ use Domain\Trash\Controllers\DumpTrashController; use App\Users\Controllers\ResetPasswordController; use Domain\Zipping\Controllers\ZipFilesController; use App\Users\Controllers\ForgotPasswordController; -use Domain\Files\Controllers\UploadFilesController; +use Domain\Files\Controllers\UploadFileController; use Domain\Folders\Controllers\FavouriteController; use Domain\Plans\Controllers\ActivePlansController; use Domain\Zipping\Controllers\ZipFolderController; @@ -72,7 +72,7 @@ Route::group(['middleware' => ['auth:sanctum']], function () { // User master,editor routes Route::group(['middleware' => ['auth:sanctum']], function () { Route::post('/create-folder', CreateFolderController::class); - Route::post('/upload', UploadFilesController::class); + Route::post('/upload', UploadFileController::class); Route::patch('/rename/{id}', [EditItemsController::class, 'rename_item']); Route::post('/remove', [EditItemsController::class, 'delete_item']); diff --git a/src/App/Console/Kernel.php b/src/App/Console/Kernel.php index f43c5a3f..f0508e1a 100644 --- a/src/App/Console/Kernel.php +++ b/src/App/Console/Kernel.php @@ -4,8 +4,11 @@ namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use App\Console\Commands\SetupDevEnvironment; use App\Console\Commands\SetupProdEnvironment; -use Domain\SetupWizard\Services\SchedulerService; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; +use Support\Scheduler\Actions\DeleteExpiredShareLinksAction; +use Support\Scheduler\Actions\DeleteFailedFilesAction; +use Support\Scheduler\Actions\DeleteOldZipsAction; +use Support\Scheduler\Actions\DeleteUnverifiedUsersAction; class Kernel extends ConsoleKernel { @@ -21,30 +24,25 @@ class Kernel extends ConsoleKernel /** * Define the application's command schedule. - * - * @param \Illuminate\Console\Scheduling\Schedule $schedule - * @return void */ - protected function schedule(Schedule $schedule) + protected function schedule(Schedule $schedule): void { - $scheduler = resolve(SchedulerService::class); + $schedule->call( + fn () => resolve(DeleteExpiredShareLinksAction::class)() + )->everyTenMinutes(); - $schedule->call(function () use ($scheduler) { - $scheduler->delete_expired_shared_links(); - })->everyTenMinutes(); + $schedule->call( + fn () => resolve(DeleteUnverifiedUsersAction::class)() + )->daily(); - $schedule->call(function () use ($scheduler) { - $scheduler->delete_old_zips(); + $schedule->call(function () { + resolve(DeleteOldZipsAction::class)(); if (! is_storage_driver(['local'])) { - $scheduler->delete_failed_files(); + resolve(DeleteFailedFilesAction::class)(); } })->everySixHours(); - $schedule->call(function () use ($scheduler) { - $scheduler->delete_unverified_users(); - })->daily(); - // Run queue jobs every minute $schedule->command('queue:work --stop-when-empty') ->everyMinute() diff --git a/src/Domain/Files/Controllers/UploadFilesController.php b/src/Domain/Files/Controllers/UploadFileController.php similarity index 92% rename from src/Domain/Files/Controllers/UploadFilesController.php rename to src/Domain/Files/Controllers/UploadFileController.php index 083d1107..ac072b7a 100644 --- a/src/Domain/Files/Controllers/UploadFilesController.php +++ b/src/Domain/Files/Controllers/UploadFileController.php @@ -6,7 +6,7 @@ use App\Http\Controllers\Controller; use Domain\Files\Requests\UploadRequest; use Domain\Files\Actions\UploadFileAction; -class UploadFilesController extends Controller +class UploadFileController extends Controller { /** * Upload file for authenticated master|editor user diff --git a/src/Domain/Zipping/Models/Zip.php b/src/Domain/Zipping/Models/Zip.php index 3929477d..76724dcb 100644 --- a/src/Domain/Zipping/Models/Zip.php +++ b/src/Domain/Zipping/Models/Zip.php @@ -8,9 +8,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Factories\HasFactory; -/** - * @method static where(string $string, mixed $token) - */ class Zip extends Model { use HasFactory; diff --git a/src/Support/Scheduler/Actions/DeleteExpiredShareLinksAction.php b/src/Support/Scheduler/Actions/DeleteExpiredShareLinksAction.php new file mode 100644 index 00000000..5b4e7db3 --- /dev/null +++ b/src/Support/Scheduler/Actions/DeleteExpiredShareLinksAction.php @@ -0,0 +1,29 @@ +get() + ->each(function ($share) { + // Get dates + $created_at = Carbon::parse($share->created_at); + + // If time was over, then delete share record + if ($created_at->diffInHours(now()) >= $share->expire_in) { + $share->delete(); + } + }); + } +} \ No newline at end of file diff --git a/src/Support/Scheduler/Actions/DeleteFailedFilesAction.php b/src/Support/Scheduler/Actions/DeleteFailedFilesAction.php new file mode 100644 index 00000000..ac2b0224 --- /dev/null +++ b/src/Support/Scheduler/Actions/DeleteFailedFilesAction.php @@ -0,0 +1,44 @@ +allFiles('files'), + $local_disk->allFiles('chunks'), + ])->collapse(); + + $files->each(function ($file) use ($local_disk) { + // Get the file's last modification time. + $last_modified = $local_disk + ->lastModified($file); + + // Get diffInHours + $diff = Carbon::parse($last_modified) + ->diffInHours(now()); + + // Delete if file is in local storage more than 24 hours + if ($diff >= 24) { + Log::info("Failed file or chunk $file deleted."); + + // Delete file from local storage + $local_disk->delete($file); + } + }); + } +} \ No newline at end of file diff --git a/src/Support/Scheduler/Actions/DeleteOldZipsAction.php b/src/Support/Scheduler/Actions/DeleteOldZipsAction.php new file mode 100644 index 00000000..a1edef46 --- /dev/null +++ b/src/Support/Scheduler/Actions/DeleteOldZipsAction.php @@ -0,0 +1,27 @@ +subDay()->toDateTimeString()) + ->get() + ->each(function ($zip) { + // Delete zip file + Storage::disk('local')->delete("zip/$zip->basename"); + + // Delete zip record + $zip->delete(); + }); + } +} \ No newline at end of file diff --git a/src/Support/Scheduler/Actions/DeleteUnverifiedUsersAction.php b/src/Support/Scheduler/Actions/DeleteUnverifiedUsersAction.php new file mode 100644 index 00000000..1c71c5e9 --- /dev/null +++ b/src/Support/Scheduler/Actions/DeleteUnverifiedUsersAction.php @@ -0,0 +1,21 @@ +subDays(30)->toDateString()) + ->where('email_verified_at', null) + ->get() + ->each(fn ($user) => $user->delete()); + } +} \ No newline at end of file diff --git a/src/Support/Scheduler/Actions/SchedulerService.php b/src/Support/Scheduler/Actions/SchedulerService.php deleted file mode 100644 index 8b647366..00000000 --- a/src/Support/Scheduler/Actions/SchedulerService.php +++ /dev/null @@ -1,89 +0,0 @@ -subDay()->toDateTimeString()) - ->get() - ->each(function ($zip) { - // Delete zip file - Storage::disk('local')->delete("zip/$zip->basename"); - - // Delete zip record - $zip->delete(); - }); - } - - /** - * Get and delete expired shared links - */ - public function delete_expired_shared_links(): void - { - Share::whereNotNull('expire_in') - ->get() - ->each(function ($share) { - // Get dates - $created_at = Carbon::parse($share->created_at); - - // If time was over, then delete share record - if ($created_at->diffInHours(now()) >= $share->expire_in) { - $share->delete(); - } - }); - } - - /** - * Get and delete failed files older than 24 hours - */ - public function delete_failed_files(): void - { - $local_disk = Storage::disk('local'); - - // Get all files from storage - $files = collect([ - //$local_disk->allFiles('files'), - $local_disk->allFiles('chunks'), - ])->collapse(); - - $files->each(function ($file) use ($local_disk) { - // Get the file's last modification time. - $last_modified = $local_disk - ->lastModified($file); - - // Get diffInHours - $diff = Carbon::parse($last_modified) - ->diffInHours(now()); - - // Delete if file is in local storage more than 24 hours - if ($diff >= 24) { - Log::info("Failed file or chunk $file deleted."); - - // Delete file from local storage - $local_disk->delete($file); - } - }); - } - - /** - * Delete unverified users older than 30 days - */ - public function delete_unverified_users(): void - { - User::where('created_at', '<=', now()->subDays(30)->toDateString()) - ->where('email_verified_at', null) - ->get() - ->each(fn ($user) => $user->delete()); - } -} diff --git a/tests/Support/Scheduler/SchedulerTest.php b/tests/Support/Scheduler/SchedulerTest.php index 2624ecf6..29cba0d4 100644 --- a/tests/Support/Scheduler/SchedulerTest.php +++ b/tests/Support/Scheduler/SchedulerTest.php @@ -2,12 +2,15 @@ namespace Tests\Support\Scheduler; use Storage; +use Support\Scheduler\Actions\DeleteExpiredShareLinksAction; +use Support\Scheduler\Actions\DeleteFailedFilesAction; +use Support\Scheduler\Actions\DeleteOldZipsAction; +use Support\Scheduler\Actions\DeleteUnverifiedUsersAction; use Tests\TestCase; use App\Users\Models\User; use Domain\Zipping\Models\Zip; use Domain\Sharing\Models\Share; use Illuminate\Http\UploadedFile; -use Support\Scheduler\Actions\SchedulerService; class SchedulerTest extends TestCase { @@ -22,8 +25,7 @@ class SchedulerTest extends TestCase 'created_at' => now()->subDay(), ]); - resolve(SchedulerService::class) - ->delete_expired_shared_links(); + resolve(DeleteExpiredShareLinksAction::class)(); $this->assertDatabaseMissing('shares', [ 'id' => $share->id, @@ -45,8 +47,7 @@ class SchedulerTest extends TestCase 'created_at' => now()->subDay(), ]); - resolve(SchedulerService::class) - ->delete_old_zips(); + resolve(DeleteOldZipsAction::class)(); $this->assertDatabaseMissing('zips', [ 'id' => $zip->id, @@ -71,8 +72,7 @@ class SchedulerTest extends TestCase Storage::putFileAs($folder, $file, 'fake-file.zip'); }); - resolve(SchedulerService::class) - ->delete_failed_files(); + resolve(DeleteFailedFilesAction::class)(); collect(['chunks']) ->each(function ($folder) { @@ -104,8 +104,7 @@ class SchedulerTest extends TestCase 'created_at' => now()->subDays(31), ]); - resolve(SchedulerService::class) - ->delete_unverified_users(); + resolve(DeleteUnverifiedUsersAction::class)(); $this->assertDatabaseMissing('users', [ 'id' => $expiredUser->id,