mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-06 02:33:48 +00:00
auto expiration after latest upload
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\UploadRequest\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\UploadRequest\Models\UploadRequest;
|
||||
use Domain\UploadRequest\Resources\UploadRequestResource;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\UploadRequest\Resources\UploadRequestResource;
|
||||
|
||||
class SetUploadRequestAsFilledController
|
||||
{
|
||||
@@ -18,4 +17,4 @@ class SetUploadRequestAsFilledController
|
||||
|
||||
return response(new UploadRequestResource($uploadRequest), 201);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,9 @@ class UploadFilesForUploadRequestController
|
||||
// Set public access url
|
||||
$file->setUploadRequestPublicUrl($uploadRequest->id);
|
||||
|
||||
// Set timestamp for auto filling
|
||||
cache()->set("auto-filling.$uploadRequest->id", now()->toString());
|
||||
|
||||
// Return new uploaded file
|
||||
return response(new FileResource($file), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
|
||||
@@ -11,14 +11,17 @@ class ExpireUnfilledUploadRequestAction
|
||||
UploadRequest::where('status', 'active')
|
||||
->cursor()
|
||||
->each(function ($uploadRequest) {
|
||||
// Get dates
|
||||
$created_at = Carbon::parse($uploadRequest->created_at);
|
||||
// Get timestamp of last upload if exist
|
||||
$isLastUpload = cache()->has("auto-filling.$uploadRequest->id");
|
||||
|
||||
// If time was over, then expire record
|
||||
if ($created_at->diffInHours(now()) >= 72) {
|
||||
$uploadRequest->update([
|
||||
'status' => 'expired',
|
||||
]);
|
||||
// Set as filled 3 hours after last upload
|
||||
if ($isLastUpload && Carbon::parse(cache()->get("auto-filling.$uploadRequest->id"))->diffInHours(now()) >= 3) {
|
||||
$uploadRequest->update(['status' => 'filled']);
|
||||
}
|
||||
|
||||
// If upload request exist more than 72 hours, then expire it
|
||||
if (! $isLastUpload && $uploadRequest->created_at->diffInHours(now()) >= 72) {
|
||||
$uploadRequest->update(['status' => 'expired']);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Domain\UploadRequest;
|
||||
|
||||
use Storage;
|
||||
@@ -210,4 +211,41 @@ class UploadRequestTest extends TestCase
|
||||
'status' => 'expired',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_mark_upload_request_as_filled_3_hours_after_last_upload()
|
||||
{
|
||||
$user = User::factory()
|
||||
->hasSettings()
|
||||
->create();
|
||||
|
||||
$uploadRequest = UploadRequest::factory()
|
||||
->create([
|
||||
'status' => 'active',
|
||||
'user_id' => $user->id,
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
$file = UploadedFile::fake()
|
||||
->create('fake-file.pdf', 12000000, 'application/pdf');
|
||||
|
||||
$this
|
||||
->postJson("/api/upload-request/$uploadRequest->id/upload", [
|
||||
'filename' => $file->name,
|
||||
'file' => $file,
|
||||
'parent_id' => null,
|
||||
'path' => "/$file->name",
|
||||
'is_last' => 'true',
|
||||
])->assertCreated();
|
||||
|
||||
$this->travel(3)->hours();
|
||||
|
||||
resolve(ExpireUnfilledUploadRequestAction::class)();
|
||||
|
||||
$this->assertDatabaseHas('upload_requests', [
|
||||
'status' => 'filled',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user