ShareFileController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\ShareFile\CreateRequest;
  5. use App\Http\Resources\API\ShareFileByObjectResource;
  6. use App\Models\Enums\ShareFileObjectType;
  7. use App\Models\File;
  8. use App\Models\ShareFile;
  9. use Carbon\Carbon;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Auth;
  12. use Ramsey\Uuid\Uuid;
  13. class ShareFileController extends Controller
  14. {
  15. public function store(CreateRequest $request)
  16. {
  17. $objectType = ShareFileObjectType::from($request->object_type);
  18. $object = $objectType->modelBuilderAllowed($request->object_id)->findOrFail($request->object_id);
  19. $objectFields = [
  20. 'object_type' => ShareFileObjectType::CONTAINER->value,
  21. 'object_id' => $object->id,
  22. ];
  23. $shareFile = ShareFile::query()->where($objectFields)->first();
  24. if ($shareFile) {
  25. return $this->badRequest("Please do not re-share");
  26. }
  27. $files = File::query()->where($objectFields)->whereIn("id", $request->file_ids)->pluck("id");
  28. if (! $files) {
  29. return $this->badRequest("Please select the file you want to share");
  30. }
  31. $expirationTime = match ($request->expiration_time) {
  32. 0 => null,
  33. 1 => Carbon::now()->addDay(),
  34. 2 => Carbon::now()->addWeek(),
  35. 3 => Carbon::now()->addMonth(),
  36. };
  37. ShareFile::query()->create([
  38. ...$request->all(),
  39. 'created_by' => Auth::id(),
  40. 'uuid' => Uuid::uuid4(),
  41. 'files' => $files->toArray(),
  42. 'expiration_time' => $expirationTime,
  43. ]);
  44. return $this->created();
  45. }
  46. public function byObject(string $objectType, string $objectId)
  47. {
  48. $objectType = ShareFileObjectType::from($objectType);
  49. $object = $objectType->modelBuilderAllowed($objectId)->findOrFail($objectId);
  50. $objectFields = [
  51. 'object_type' => ShareFileObjectType::CONTAINER->value,
  52. 'object_id' => $object->id,
  53. ];
  54. $shareFile = ShareFile::query()->where($objectFields)->first();
  55. return new ShareFileByObjectResource($shareFile);
  56. }
  57. public function destroy(string $id)
  58. {
  59. $shareFile = ShareFile::query()->findOrFail($id);
  60. $objectType = ShareFileObjectType::from($shareFile->object_type);
  61. $objectType->modelBuilderAllowed($shareFile->object_id)->findOrFail($shareFile->object_id);
  62. $shareFile->delete();
  63. return $this->noContent();
  64. }
  65. }