Browse Source

by object info

moell 10 months ago
parent
commit
c40772915c

+ 17 - 0
app/Http/Controllers/API/ShareFileController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\API;
 
 
 use App\Http\Controllers\Controller;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\API\ShareFile\CreateRequest;
 use App\Http\Requests\API\ShareFile\CreateRequest;
+use App\Http\Resources\API\ShareFileByObjectResource;
 use App\Models\Enums\ShareFileObjectType;
 use App\Models\Enums\ShareFileObjectType;
 use App\Models\File;
 use App\Models\File;
 use App\Models\ShareFile;
 use App\Models\ShareFile;
@@ -53,6 +54,22 @@ class ShareFileController extends Controller
         return $this->created();
         return $this->created();
     }
     }
 
 
+    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)
     public function destroy(string $id)
     {
     {
 
 

+ 25 - 0
app/Http/Resources/API/ShareFileByObjectResource.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Http\Resources\API;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class ShareFileByObjectResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @return array<string, mixed>
+     */
+    public function toArray(Request $request): array
+    {
+        return [
+            'id' => $this->id,
+            'uuid' => $this->uuid,
+            'expiration_time' => (string)$this->expiration_time,
+            'created_by' => new UserProfileResource($this->createdBy),
+            'file_ids' => $this->files,
+        ];
+    }
+}

+ 5 - 0
app/Models/ShareFile.php

@@ -16,4 +16,9 @@ class ShareFile extends Model
     protected $casts = [
     protected $casts = [
         'files' => 'array',
         'files' => 'array',
     ];
     ];
+
+    public function createdBy()
+    {
+        return $this->belongsTo(User::class, "created_by");
+    }
 }
 }

+ 4 - 1
routes/api.php

@@ -172,6 +172,9 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("container-linkage/{library_id}", [API\ContainerController::class, "linkage"])->name("container.linkage");
         Route::get("container-linkage/{library_id}", [API\ContainerController::class, "linkage"])->name("container.linkage");
 
 
         Route::post("share-file", [API\ShareFileController::class, "store"])->name("share-file.store");
         Route::post("share-file", [API\ShareFileController::class, "store"])->name("share-file.store");
-        Route::delete("share-file/{share_file}", [API\ShareFileController::class, "destroy"])->name("share-file.destroy");
+        Route::delete("share-file/{share_file}", [API\ShareFileController::class, "destroy"])
+            ->name("share-file.destroy");
+        Route::get("share-file/{object_type}/{object_id}", [API\ShareFileController::class, "byObject"])
+            ->name("share-file.by-object");
     });
     });
 });
 });