123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- namespace App\Http\Controllers\API;
- use App\Http\Controllers\Controller;
- use App\Http\Requests\API\ShareFile\CreateRequest;
- use App\Http\Resources\API\ShareFileByObjectResource;
- use App\Models\Enums\ShareFileObjectType;
- use App\Models\File;
- use App\Models\ShareFile;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Ramsey\Uuid\Uuid;
- class ShareFileController extends Controller
- {
- public function store(CreateRequest $request)
- {
- $objectType = ShareFileObjectType::from($request->object_type);
- $object = $objectType->modelBuilderAllowed($request->object_id)->findOrFail($request->object_id);
- $objectFields = [
- 'object_type' => ShareFileObjectType::CONTAINER->value,
- 'object_id' => $object->id,
- ];
- // $shareFile = ShareFile::query()->where($objectFields)->first();
- // if ($shareFile) {
- // return $this->badRequest("Please do not re-share");
- // }
- $files = File::query()->where($objectFields)->whereIn("id", $request->file_ids)->pluck("id");
- if (! $files) {
- return $this->badRequest("Please select the file you want to share");
- }
- $expirationTime = match ($request->expiration_time) {
- 0 => null,
- 1 => Carbon::now()->addDay(),
- 2 => Carbon::now()->addWeek(),
- 3 => Carbon::now()->addMonth(),
- };
- $createShareFile=ShareFile::query()->create([
- ...$request->all(),
- 'created_by' => Auth::id(),
- 'uuid' => Uuid::uuid4(),
- 'files' => $files->toArray(),
- 'expiration_time' => $expirationTime,
- ]);
- return $this->created([
- 'share_uuid' => $createShareFile->uuid
- ]);
- }
- public function byObject(string $objectType, string $objectId)
- {
- $objectType = ShareFileObjectType::from($objectType);
- $object = $objectType->modelBuilderAllowed($objectId)->findOrFail($objectId);
- $objectFields = [
- 'object_type' => ShareFileObjectType::CONTAINER->value,
- 'object_id' => $object->id,
- ];
- $shareFile = ShareFile::query()->where($objectFields)->first();
- return new ShareFileByObjectResource($shareFile);
- }
- public function destroy(string $id)
- {
- $shareFile = ShareFile::query()->findOrFail($id);
- $objectType = ShareFileObjectType::from($shareFile->object_type);
- $objectType->modelBuilderAllowed($shareFile->object_id)->findOrFail($shareFile->object_id);
- $shareFile->delete();
- return $this->noContent();
- }
- }
|