moell 11 месяцев назад
Родитель
Сommit
fb7338cdac

+ 9 - 1
app/Http/Controllers/API/RequirementController.php

@@ -11,11 +11,13 @@ use App\Http\Resources\API\AssetRequirementResource;
 use App\Http\Resources\API\RequirementResource;
 use App\Models\Asset;
 use App\Models\Enums\ActionObjectType;
+use App\Models\Enums\FileObjectType;
 use App\Models\Enums\RequirementStatus;
 use App\Models\Enums\ObjectAction;
 use App\Models\Plan;
 use App\Models\Requirement;
 use App\Repositories\ActionRepository;
+use App\Services\File\FileAssociationService;
 use App\Services\History\ModelChangeDetector;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -46,7 +48,7 @@ class RequirementController extends Controller
     /**
      * Store a newly created resource in storage.
      */
-    public function store(CreateOrUpdateRequest $request)
+    public function store(FileAssociationService $service, CreateOrUpdateRequest $request)
     {
         $requirement = new Requirement();
 
@@ -65,6 +67,12 @@ class RequirementController extends Controller
             $requirement, ObjectAction::CREATED
         );
 
+        $service->association(
+            $request->get("file_ids", []),
+            $requirement->id,
+            FileObjectType::REQUIREMENT
+        );
+
         return $this->created();
     }
 

+ 10 - 0
app/Models/Enums/FileSource.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models\Enums;
+
+enum FileSource: int
+{
+    case ATTACHMENT = 1;
+
+    case EDITOR = 2;
+}

+ 50 - 0
app/Services/File/FileAssociationService.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace App\Services\File;
+
+use App\Models\Enums\FileObjectType;
+use App\Models\Enums\FileSource;
+use App\Models\File;
+use Carbon\Carbon;
+use Illuminate\Support\Facades\Auth;
+
+class FileAssociationService
+{
+    /**
+     * @param array $fileIds
+     * @param string $objectId
+     * @param FileObjectType $fileObjectType
+     * @return void
+     */
+    public function association(array $fileIds, string $objectId, FileObjectType $fileObjectType)
+    {
+        if (! $fileIds) {
+            return;
+        }
+
+        $files = File::query()
+            ->whereIn("id", $fileIds)
+            ->where("created_by", Auth::id())
+            ->whereNull("object_id")
+            ->where("object_type", $fileObjectType->value)
+            ->where("created_at", ">=", Carbon::now()->subMinutes(10))
+            ->orderBy("created_at")
+            ->get();
+
+        foreach ($files as $file) {
+            if ($file->source == FileSource::ATTACHMENT->value) {
+                $version = File::query()
+                    ->where("created_at", ">=", Carbon::now()->subMinutes(10))
+                    ->where("created_by", Auth::id())
+                    ->where("object_id", $objectId)
+                    ->where("object_type", $fileObjectType->value)
+                    ->where("title", $file->title)
+                    ->count();
+                $file->version = $version + 1;
+            }
+
+            $file->object_id = $objectId;
+            $file->save();
+        }
+    }
+}