ShareFileController.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. }
  60. }