laravel-vue-file-share/app/Http/Controllers/FileController.php
2023-10-08 14:20:03 -07:00

76 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreFolderRequest;
use App\Http\Requests\StoreFileRequest;
use App\Http\Resources\FileResource;
use App\Models\File;
use Inertia\Inertia;
use Illuminate\Support\Facades\Auth;
class FileController extends Controller
{
// render user's files
public function userFiles(string $folder = null) {
// validate passed in $folder param
// if passed in,
if ($folder) {
$folder = File::query()
->where('created_by', Auth::id()) // ensure matching user for access
->where('path', $folder) // ensure that the specified folder exists in the database
->firstOrFail(); // if none found, fail
}
else {
// use root folder if $folder not passed in
$folder = $this->getRoot();
}
// get all files and folders where parent_id = root
$files = File::query()->where('parent_id', $folder->id)
// that are created by the current user
->where('created_by', Auth::id())
// that have not been deleted
->whereNull('deleted_at')
// order by folders first
->orderByDesc('is_folder')
// then order by creation date
->orderByDesc('created_at')
// return x amount (default 8)
->paginate(8);
$files = FileResource::collection($files);
$ancestors = FileResource::collection([...$folder->ancestors, $folder]);
$folder = new FileResource($folder);
return Inertia::render('UserFiles', compact('files', 'folder', 'ancestors'));
}
// create new folder based on passed in StoreFolderRequest
public function newFolder(StoreFolderRequest $request) {
// get validated data
$data = $request->validated();
// get parent folder from StoreFolderRequest
$parent = $request->parent;
// check for parent
if (!$parent) {
$parent = $this->getRoot();
}
$file = new File();
$file->is_folder = 1;
$file->name = $data['name'];
$parent->appendNode($file);
}
public function upload(StoreFileRequest $request) {
// get validated data
$data = $request->validated();
// get parent folder from StoreFolderRequest
dd ($data);
}
private function getRoot() {
return File::query()->whereIsRoot()->where('created_by', Auth::id())->firstOrFail();
}
}