mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-06 02:33:48 +00:00
controller refactoring part 19
This commit is contained in:
@@ -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']);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
44
src/Support/Scheduler/Actions/DeleteFailedFilesAction.php
Normal file
44
src/Support/Scheduler/Actions/DeleteFailedFilesAction.php
Normal 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
27
src/Support/Scheduler/Actions/DeleteOldZipsAction.php
Normal file
27
src/Support/Scheduler/Actions/DeleteOldZipsAction.php
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user