controller refactoring part 19

This commit is contained in:
Peter Papp
2021-07-21 12:01:44 +02:00
parent 76e1cd1113
commit 3860faf851
10 changed files with 146 additions and 120 deletions

View File

@@ -8,7 +8,7 @@ use Domain\Trash\Controllers\DumpTrashController;
use App\Users\Controllers\ResetPasswordController; use App\Users\Controllers\ResetPasswordController;
use Domain\Zipping\Controllers\ZipFilesController; use Domain\Zipping\Controllers\ZipFilesController;
use App\Users\Controllers\ForgotPasswordController; use App\Users\Controllers\ForgotPasswordController;
use Domain\Files\Controllers\UploadFilesController; use Domain\Files\Controllers\UploadFileController;
use Domain\Folders\Controllers\FavouriteController; use Domain\Folders\Controllers\FavouriteController;
use Domain\Plans\Controllers\ActivePlansController; use Domain\Plans\Controllers\ActivePlansController;
use Domain\Zipping\Controllers\ZipFolderController; use Domain\Zipping\Controllers\ZipFolderController;
@@ -72,7 +72,7 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
// User master,editor routes // User master,editor routes
Route::group(['middleware' => ['auth:sanctum']], function () { Route::group(['middleware' => ['auth:sanctum']], function () {
Route::post('/create-folder', CreateFolderController::class); 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::patch('/rename/{id}', [EditItemsController::class, 'rename_item']);
Route::post('/remove', [EditItemsController::class, 'delete_item']); Route::post('/remove', [EditItemsController::class, 'delete_item']);

View File

@@ -4,8 +4,11 @@ namespace App\Console;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
use App\Console\Commands\SetupDevEnvironment; use App\Console\Commands\SetupDevEnvironment;
use App\Console\Commands\SetupProdEnvironment; use App\Console\Commands\SetupProdEnvironment;
use Domain\SetupWizard\Services\SchedulerService;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; 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 class Kernel extends ConsoleKernel
{ {
@@ -21,30 +24,25 @@ class Kernel extends ConsoleKernel
/** /**
* Define the application's command schedule. * 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) { $schedule->call(
$scheduler->delete_expired_shared_links(); fn () => resolve(DeleteUnverifiedUsersAction::class)()
})->everyTenMinutes(); )->daily();
$schedule->call(function () use ($scheduler) { $schedule->call(function () {
$scheduler->delete_old_zips(); resolve(DeleteOldZipsAction::class)();
if (! is_storage_driver(['local'])) { if (! is_storage_driver(['local'])) {
$scheduler->delete_failed_files(); resolve(DeleteFailedFilesAction::class)();
} }
})->everySixHours(); })->everySixHours();
$schedule->call(function () use ($scheduler) {
$scheduler->delete_unverified_users();
})->daily();
// Run queue jobs every minute // Run queue jobs every minute
$schedule->command('queue:work --stop-when-empty') $schedule->command('queue:work --stop-when-empty')
->everyMinute() ->everyMinute()

View File

@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use Domain\Files\Requests\UploadRequest; use Domain\Files\Requests\UploadRequest;
use Domain\Files\Actions\UploadFileAction; use Domain\Files\Actions\UploadFileAction;
class UploadFilesController extends Controller class UploadFileController extends Controller
{ {
/** /**
* Upload file for authenticated master|editor user * Upload file for authenticated master|editor user

View File

@@ -8,9 +8,6 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* @method static where(string $string, mixed $token)
*/
class Zip extends Model class Zip extends Model
{ {
use HasFactory; use HasFactory;

View File

@@ -0,0 +1,29 @@
<?php
namespace Support\Scheduler\Actions;
use Carbon\Carbon;
use Domain\Sharing\Models\Share;
class DeleteExpiredShareLinksAction
{
/**
* Get and delete expired shared links
*/
public function __invoke(): 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();
}
});
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace Support\Scheduler\Actions;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class DeleteFailedFilesAction
{
/**
* Get and delete failed files older than 24 hours
*/
public function __invoke(): 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);
}
});
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Support\Scheduler\Actions;
use Domain\Zipping\Models\Zip;
use Illuminate\Support\Facades\Storage;
class DeleteOldZipsAction
{
/**
* Delete old zips
*/
public function __invoke(): void
{
Zip::where('created_at', '<=', now()->subDay()->toDateTimeString())
->get()
->each(function ($zip) {
// Delete zip file
Storage::disk('local')->delete("zip/$zip->basename");
// Delete zip record
$zip->delete();
});
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace Support\Scheduler\Actions;
use App\Users\Models\User;
class DeleteUnverifiedUsersAction
{
/**
* Delete unverified users older than 30 days
*/
public function __invoke(): void
{
User::where('created_at', '<=', now()->subDays(30)->toDateString())
->where('email_verified_at', null)
->get()
->each(fn ($user) => $user->delete());
}
}

View File

@@ -1,89 +0,0 @@
<?php
namespace Support\Scheduler\Actions;
use Carbon\Carbon;
use App\Users\Models\User;
use Domain\Zipping\Models\Zip;
use Domain\Sharing\Models\Share;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class SchedulerService
{
/**
* Delete old zips
*/
public function delete_old_zips(): void
{
Zip::where('created_at', '<=', now()->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());
}
}

View File

@@ -2,12 +2,15 @@
namespace Tests\Support\Scheduler; namespace Tests\Support\Scheduler;
use Storage; 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 Tests\TestCase;
use App\Users\Models\User; use App\Users\Models\User;
use Domain\Zipping\Models\Zip; use Domain\Zipping\Models\Zip;
use Domain\Sharing\Models\Share; use Domain\Sharing\Models\Share;
use Illuminate\Http\UploadedFile; use Illuminate\Http\UploadedFile;
use Support\Scheduler\Actions\SchedulerService;
class SchedulerTest extends TestCase class SchedulerTest extends TestCase
{ {
@@ -22,8 +25,7 @@ class SchedulerTest extends TestCase
'created_at' => now()->subDay(), 'created_at' => now()->subDay(),
]); ]);
resolve(SchedulerService::class) resolve(DeleteExpiredShareLinksAction::class)();
->delete_expired_shared_links();
$this->assertDatabaseMissing('shares', [ $this->assertDatabaseMissing('shares', [
'id' => $share->id, 'id' => $share->id,
@@ -45,8 +47,7 @@ class SchedulerTest extends TestCase
'created_at' => now()->subDay(), 'created_at' => now()->subDay(),
]); ]);
resolve(SchedulerService::class) resolve(DeleteOldZipsAction::class)();
->delete_old_zips();
$this->assertDatabaseMissing('zips', [ $this->assertDatabaseMissing('zips', [
'id' => $zip->id, 'id' => $zip->id,
@@ -71,8 +72,7 @@ class SchedulerTest extends TestCase
Storage::putFileAs($folder, $file, 'fake-file.zip'); Storage::putFileAs($folder, $file, 'fake-file.zip');
}); });
resolve(SchedulerService::class) resolve(DeleteFailedFilesAction::class)();
->delete_failed_files();
collect(['chunks']) collect(['chunks'])
->each(function ($folder) { ->each(function ($folder) {
@@ -104,8 +104,7 @@ class SchedulerTest extends TestCase
'created_at' => now()->subDays(31), 'created_at' => now()->subDays(31),
]); ]);
resolve(SchedulerService::class) resolve(DeleteUnverifiedUsersAction::class)();
->delete_unverified_users();
$this->assertDatabaseMissing('users', [ $this->assertDatabaseMissing('users', [
'id' => $expiredUser->id, 'id' => $expiredUser->id,