Files
event-uploader/api/app/Http/Controllers/Admin/UploadsController.php
2026-02-03 10:38:46 +01:00

56 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Upload;
use App\Services\GoogleDrive\GoogleDriveService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UploadsController extends Controller
{
public function show(Upload $upload, Request $request): JsonResponse
{
$this->authorizeUpload($upload, $request);
return response()->json($upload);
}
public function destroy(Upload $upload, Request $request, GoogleDriveService $googleDrive): JsonResponse
{
$this->authorizeUpload($upload, $request);
if ($upload->google_drive_file_id) {
try {
$googleDrive->deleteFile($request->user(), $upload->google_drive_file_id);
} catch (\Throwable) {
// Continue to delete record even if Drive delete fails
}
}
$upload->delete();
return response()->json(null, 204);
}
public function downloadUrl(Upload $upload, Request $request, GoogleDriveService $googleDrive): JsonResponse
{
$this->authorizeUpload($upload, $request);
if (! $upload->google_drive_file_id) {
return response()->json(['message' => 'File not yet available'], 404);
}
$url = $googleDrive->getFileLink($request->user(), $upload->google_drive_file_id);
return response()->json(['url' => $url]);
}
protected function authorizeUpload(Upload $upload, Request $request): void
{
if ($upload->event->user_id !== $request->user()->id) {
abort(404);
}
}
}