ShareFileController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. $createShareFile=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. 'share_uuid' => $createShareFile->uuid
  46. ]);
  47. }
  48. public function byObject(string $objectType, string $objectId)
  49. {
  50. $objectType = ShareFileObjectType::from($objectType);
  51. $object = $objectType->modelBuilderAllowed($objectId)->findOrFail($objectId);
  52. $objectFields = [
  53. 'object_type' => ShareFileObjectType::CONTAINER->value,
  54. 'object_id' => $object->id,
  55. ];
  56. $shareFile = ShareFile::query()->where($objectFields)->first();
  57. return new ShareFileByObjectResource($shareFile);
  58. }
  59. public function destroy(string $id)
  60. {
  61. $shareFile = ShareFile::query()->findOrFail($id);
  62. $objectType = ShareFileObjectType::from($shareFile->object_type);
  63. $objectType->modelBuilderAllowed($shareFile->object_id)->findOrFail($shareFile->object_id);
  64. $shareFile->delete();
  65. return $this->noContent();
  66. }
  67. }