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 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']);

View File

@@ -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()

View File

@@ -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

View File

@@ -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;

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;
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,