56 lines
1.6 KiB
PHP
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);
|
|
}
|
|
}
|
|
}
|