mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-28 15:24:43 +00:00
auto expiration after latest upload
This commit is contained in:
@@ -1,12 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Domain\UploadRequest\Controllers;
|
namespace Domain\UploadRequest\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Response;
|
||||||
use Domain\UploadRequest\Models\UploadRequest;
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
use Domain\UploadRequest\Resources\UploadRequestResource;
|
|
||||||
use Illuminate\Contracts\Foundation\Application;
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||||
use Illuminate\Http\Response;
|
use Domain\UploadRequest\Resources\UploadRequestResource;
|
||||||
|
|
||||||
class SetUploadRequestAsFilledController
|
class SetUploadRequestAsFilledController
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ class UploadFilesForUploadRequestController
|
|||||||
// Set public access url
|
// Set public access url
|
||||||
$file->setUploadRequestPublicUrl($uploadRequest->id);
|
$file->setUploadRequestPublicUrl($uploadRequest->id);
|
||||||
|
|
||||||
|
// Set timestamp for auto filling
|
||||||
|
cache()->set("auto-filling.$uploadRequest->id", now()->toString());
|
||||||
|
|
||||||
// Return new uploaded file
|
// Return new uploaded file
|
||||||
return response(new FileResource($file), 201);
|
return response(new FileResource($file), 201);
|
||||||
} catch (InvalidUserActionException $e) {
|
} catch (InvalidUserActionException $e) {
|
||||||
|
|||||||
@@ -11,14 +11,17 @@ class ExpireUnfilledUploadRequestAction
|
|||||||
UploadRequest::where('status', 'active')
|
UploadRequest::where('status', 'active')
|
||||||
->cursor()
|
->cursor()
|
||||||
->each(function ($uploadRequest) {
|
->each(function ($uploadRequest) {
|
||||||
// Get dates
|
// Get timestamp of last upload if exist
|
||||||
$created_at = Carbon::parse($uploadRequest->created_at);
|
$isLastUpload = cache()->has("auto-filling.$uploadRequest->id");
|
||||||
|
|
||||||
// If time was over, then expire record
|
// Set as filled 3 hours after last upload
|
||||||
if ($created_at->diffInHours(now()) >= 72) {
|
if ($isLastUpload && Carbon::parse(cache()->get("auto-filling.$uploadRequest->id"))->diffInHours(now()) >= 3) {
|
||||||
$uploadRequest->update([
|
$uploadRequest->update(['status' => 'filled']);
|
||||||
'status' => 'expired',
|
}
|
||||||
]);
|
|
||||||
|
// 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
|
<?php
|
||||||
|
|
||||||
namespace Tests\Domain\UploadRequest;
|
namespace Tests\Domain\UploadRequest;
|
||||||
|
|
||||||
use Storage;
|
use Storage;
|
||||||
@@ -210,4 +211,41 @@ class UploadRequestTest extends TestCase
|
|||||||
'status' => 'expired',
|
'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