get('folder', 'all'); $client = $request->get('client_id'); $clients = Client::orderBy('name')->get(); $query = MediaFile::with('client')->latest(); if ($folder !== 'all') { $query->where('folder', $folder); } if ($client) { $query->where('client_id', $client); } $files = $query->paginate(20)->withQueryString(); $folders = MediaFile::select('folder')->distinct()->pluck('folder'); return view('files.index', compact('files', 'folders', 'folder', 'clients')); } public function store(Request $request): RedirectResponse|\Illuminate\Http\JsonResponse { $request->validate([ 'file' => 'required|file|max:51200', // 50 MB 'folder' => 'required|string|max:100', 'client_id' => 'nullable|exists:clients,id', ]); $this->fileService->uploadAsset( $request->file('file'), $request->input('folder'), $request->input('client_id') ); if ($request->expectsJson() || $request->ajax()) { return response()->json(['success' => true, 'message' => 'File uploaded successfully!']); } return back()->with('success', '📁 File uploaded successfully!'); } public function serve(MediaFile $mediaFile): StreamedResponse { abort_unless(Storage::disk($mediaFile->disk)->exists($mediaFile->path), 404); return Storage::disk($mediaFile->disk)->response( $mediaFile->path, $mediaFile->original_name, ['Content-Type' => $mediaFile->mime_type] ); } public function destroy(MediaFile $mediaFile): RedirectResponse { $this->fileService->delete($mediaFile); return back()->with('success', 'File deleted.'); } }