diff --git a/src/Domain/UploadRequest/Controllers/SetUploadRequestAsFilledController.php b/src/Domain/UploadRequest/Controllers/SetUploadRequestAsFilledController.php index 7036da9e..c334e389 100644 --- a/src/Domain/UploadRequest/Controllers/SetUploadRequestAsFilledController.php +++ b/src/Domain/UploadRequest/Controllers/SetUploadRequestAsFilledController.php @@ -1,12 +1,11 @@ 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) { diff --git a/src/Support/Scheduler/Actions/ExpireUnfilledUploadRequestAction.php b/src/Support/Scheduler/Actions/ExpireUnfilledUploadRequestAction.php index 4501f8b8..97d5868f 100644 --- a/src/Support/Scheduler/Actions/ExpireUnfilledUploadRequestAction.php +++ b/src/Support/Scheduler/Actions/ExpireUnfilledUploadRequestAction.php @@ -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']); } }); } diff --git a/tests/Domain/UploadRequest/UploadRequestTest.php b/tests/Domain/UploadRequest/UploadRequestTest.php index a590d64f..cef6c7ac 100644 --- a/tests/Domain/UploadRequest/UploadRequestTest.php +++ b/tests/Domain/UploadRequest/UploadRequestTest.php @@ -1,4 +1,5 @@ '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', + ]); + } }