|
@@ -0,0 +1,60 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Controllers\API;
|
|
|
+
|
|
|
+use App\Http\Controllers\Controller;
|
|
|
+use App\Http\Requests\API\ShareFile\CreateRequest;
|
|
|
+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(),
|
|
|
+ };
|
|
|
+
|
|
|
+ ShareFile::query()->create([
|
|
|
+ ...$request->all(),
|
|
|
+ 'created_by' => Auth::id(),
|
|
|
+ 'uuid' => Uuid::uuid4(),
|
|
|
+ 'files' => $files->toArray(),
|
|
|
+ 'expiration_time' => $expirationTime,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return $this->created();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function destroy(string $id)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+}
|