auto expiration after latest upload

This commit is contained in:
Čarodej
2022-02-22 16:41:17 +01:00
parent 6feadfd188
commit f15c81d342
4 changed files with 54 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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