browsing through upload request

This commit is contained in:
Čarodej
2022-02-24 10:20:38 +01:00
parent 06b28aeee3
commit a589ee5f7a
31 changed files with 311 additions and 118 deletions

View File

@@ -0,0 +1,40 @@
<?php
namespace Domain\UploadRequest\Controllers;
use Illuminate\Support\Str;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderResource;
use Domain\Folders\Resources\FolderCollection;
use Domain\UploadRequest\Models\UploadRequest;
class BrowseUploadRequestController extends Controller
{
public function __invoke(UploadRequest $uploadRequest, $id): array
{
$rootId = Str::isUuid($id) ? $id : $uploadRequest->id;
$folders = Folder::with(['parent:id,name'])
->where('parent_id', $rootId)
->where('user_id', $uploadRequest->user_id)
->sortable()
->get();
// TODO: security check
$files = File::with(['parent:id,name'])
->where('parent_id', $rootId)
->where('user_id', $uploadRequest->user_id)
->sortable()
->get()
->each(fn ($file) => $file->setUploadRequestPublicUrl($uploadRequest->id));
// Collect folders and files to single array
return [
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
'root' => new FolderResource(Folder::find($rootId)),
];
}
}

View File

@@ -1,12 +1,11 @@
<?php
namespace Domain\UploadRequest\Controllers;
use Domain\Folders\Actions\CreateFolderAction;
use Domain\Folders\Models\Folder;
use Domain\Folders\Requests\CreateFolderRequest;
use Domain\Folders\Resources\FolderResource;
use Domain\Folders\Actions\CreateFolderAction;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\Folders\Requests\CreateFolderRequest;
use Support\Demo\Actions\FakeCreateFolderAction;
class CreateFolderController
@@ -38,4 +37,4 @@ class CreateFolderController
// Return new folder
return response(new FolderResource($folder), 201);
}
}
}

View File

@@ -1,13 +1,12 @@
<?php
namespace Domain\UploadRequest\Controllers;
use Illuminate\Support\Arr;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Storage;
use Domain\Items\Requests\DeleteItemRequest;
use Domain\UploadRequest\Models\UploadRequest;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Storage;
class DeleteFileOrFolderController
{
@@ -69,4 +68,4 @@ class DeleteFileOrFolderController
$folder->forceDelete();
}
}
}

View File

@@ -25,15 +25,9 @@ class GetFileFromUploadRequestController
string $filename,
UploadRequest $uploadRequest
): Application|ResponseFactory|Response|BinaryFileResponse {
// Check if upload request is active
if ($uploadRequest->status !== 'active') {
return response('Gone', 410);
}
// Get file
$file = File::where('user_id', $uploadRequest->user_id)
->where('basename', $filename)
->where('parent_id', $uploadRequest->id)
->firstOrFail();
// Store user download size

View File

@@ -26,15 +26,9 @@ class GetThumbnailFromUploadRequestController extends Controller
string $filename,
UploadRequest $uploadRequest
): Application|ResponseFactory|Response|StreamedResponse {
// Check if upload request is active
if ($uploadRequest->status !== 'active') {
return response('Gone', 410);
}
// Get file
$file = File::where('user_id', $uploadRequest->user_id)
->where('basename', substr($filename, 3))
->where('parent_id', $uploadRequest->id)
->firstOrFail();
// Store user download size

View File

@@ -1,13 +1,12 @@
<?php
namespace Domain\UploadRequest\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Domain\UploadRequest\Models\UploadRequest;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
class GetFolderTreeForUploadRequestController extends Controller
{
@@ -30,4 +29,4 @@ class GetFolderTreeForUploadRequestController extends Controller
],
];
}
}
}

View File

@@ -1,5 +1,4 @@
<?php
namespace Domain\UploadRequest\Controllers;
use App\Http\Controllers\Controller;
@@ -25,4 +24,4 @@ class MoveItemInUploadRequestController extends Controller
return response('Done.', 204);
}
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace Domain\UploadRequest\Controllers;
use App\Http\Controllers\Controller;
use Domain\Files\Resources\FileResource;
use Domain\Folders\Resources\FolderResource;
use Domain\Items\Requests\RenameItemRequest;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\Folders\Actions\UpdateFolderPropertyAction;
use Support\Demo\Actions\FakeRenameFileOrFolderAction;
class RenameFileOrFolderController extends Controller
{
public function __construct(
public UpdateFolderPropertyAction $updateFolderProperty,
public FakeRenameFileOrFolderAction $fakeRenameFileOrFolder,
) {
}
public function __invoke(UploadRequest $uploadRequest, string $id, RenameItemRequest $request)
{
// Get item
$item = get_item($request->input('type'), $id);
// Check privileges
if (! in_array($item->parent_id, getChildrenFolderIds($uploadRequest->id))) {
return response('Access Denied', 403);
}
// If request contain icon or color, then change it
if ($request->input('type') === 'folder' && $request->hasAny(['emoji', 'color'])) {
($this->updateFolderProperty)($request, $id);
}
// Update item
$item->update(['name' => $request->input('name')]);
if ($request->input('type') === 'folder') {
return new FolderResource($item);
}
return new FileResource($item);
}
}

View File

@@ -59,13 +59,20 @@ class UploadFilesForUploadRequestController
*/
private function createFolder(UploadRequest $uploadRequest): void
{
// Format timestamp
$timestampName = format_date($uploadRequest->created_at, 'd. M. Y');
// Create folder
DB::table('folders')->insert([
'id' => $uploadRequest->id,
'parent_id' => $uploadRequest->folder_id,
'user_id' => $uploadRequest->user_id,
'name' => "Upload Request from $timestampName",
]);
// Update upload request status
$uploadRequest->update([
'status' => 'filling',
]);
}
}

View File

@@ -11,8 +11,11 @@ class ProtectUploadRequestRoutes
*/
public function handle(Request $request, Closure $next): mixed
{
// Get upload request
$uploadRequest = $request->route()->parameter('uploadRequest');
// Check if upload request is active
if ($request->route()->parameter('uploadRequest')->status !== 'active') {
if (! in_array($uploadRequest->status, ['active', 'filling'])) {
return response('Gone', 410);
}

View File

@@ -13,11 +13,11 @@ class UploadRequestResource extends JsonResource
'id' => $this->id,
'type' => 'upload-request',
'attributes' => [
'folder_id' => $this->folder_id,
'status' => $this->status,
'email' => $this->email,
'notes' => $this->notes,
'url' => url("/request/$this->id/upload"),
'folder_id' => $this->folder_id,
'status' => $this->status,
'email' => $this->email,
'notes' => $this->notes,
'url' => url("/request/$this->id/upload"),
],
'relationships' => [
$this->mergeWhen($this->folder, fn () => [