mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 16:22:14 +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 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']);
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
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,
|
||||||
|
|||||||
Reference in New Issue
Block a user