Browse Source

api :file update

peterguo 2 months ago
parent
commit
480625e067

+ 14 - 1
app/Http/Controllers/API/FileController.php

@@ -18,14 +18,17 @@ use App\Models\Enums\FileObjectType;
 use App\Models\Enums\ObjectAction;
 use App\Models\File;
 use App\Repositories\ActionRepository;
+use App\Repositories\CustomFieldRepository;
 use App\Services\File\BimService;
 use App\Services\File\DownloadService;
 use App\Services\File\FileHideService;
+use App\Services\File\FileService;
 use App\Services\File\Upload\CompanyUploadService;
 use App\Services\File\Upload\FilesUploadService;
 use App\Services\File\Upload\KeepDirectoryUploadService;
 use App\Services\File\Upload\ProgressBar;
 use Illuminate\Http\Request;
+use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Storage;
 
@@ -241,7 +244,7 @@ class FileController extends Controller
      *
      * @param string $id
      * @param FileHideService $service
-     * @return \Illuminate\Http\Response
+     * @return Response
      */
     public function hide(string $id, FileHideService $service)
     {
@@ -372,4 +375,14 @@ class FileController extends Controller
 
         return new FileByObjectResource($file);
     }
+
+    public function update(
+        Request $request,
+        FileService $fileService,
+        string $id
+    ): Response
+    {
+        $fileService->update($id, $request->all());
+        return $this->noContent();
+    }
 }

+ 34 - 0
app/Services/File/FileService.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Services\File;
+
+use App\Models\Enums\ActionObjectType;
+use App\Models\Enums\ObjectAction;
+use App\Models\File;
+use App\Repositories\ActionRepository;
+use App\Repositories\CustomFieldRepository;
+use App\Services\History\ModelChangeDetector;
+
+class FileService
+{
+    private CustomFieldRepository $customFieldRepository;
+    public function __construct(CustomFieldRepository $customFieldRepository)
+    {
+        $this->customFieldRepository = $customFieldRepository;
+    }
+
+    public function update(string $id, array $updatedData): void
+    {
+        $file = File::query()->findOrFail($id);
+
+        if ($updatedData['naming_rule_id']) {
+            $updatedData['naming_rules'] = $this->customFieldRepository->keysByGroup($updatedData['naming_rule_id'])->value;
+        }
+        $file->fill($updatedData);
+
+        $changes = ModelChangeDetector::detector(ActionObjectType::CONTAINER_FILE, $file);
+        ActionRepository::create($id, ActionObjectType::CONTAINER_FILE, ObjectAction::EDITED_FILE, null, null, [], $changes);
+
+        $file->save();
+    }
+}

+ 17 - 13
app/Services/History/Detector/FileDetector.php

@@ -2,37 +2,41 @@
 
 namespace App\Services\History\Detector;
 
-use App\Services\History\Converter\AssetConverter;
-use App\Services\History\Converter\AssetGroupConverter;
-use App\Services\History\Converter\ConverterContact;
-use App\Services\History\Converter\EmailConverter;
-use App\Services\History\Converter\ModelConverter;
-use App\Services\History\Converter\ModelEnumConverter;
-use App\Services\History\Converter\PlanConverter;
-use App\Services\History\Converter\RequirementGroupConverter;
-use App\Services\History\Converter\UserConverter;
-use App\Services\History\Converter\WhitelistConverter;
+use App\Services\History\Converter\CustomFieldSelectConverter;
+use App\Services\History\Converter\NamingRuleConverter;
 
 class FileDetector extends DetectorAbstract
 {
     public static function fields(): array
     {
         return [
-            'created_by'
+            'title',
+            'source',
+            'is_hide',
+            'version',
+            'naming_rules',
+            'doc_stage',
+            'doc_type'
         ];
     }
 
     public static function diffFields(): array
     {
         return [
-            'description',
+            'title',
+            'source',
+            'is_hide',
+            'version',
+            'naming_rules',
+            'doc_stage',
+            'doc_type'
         ];
     }
 
     public static function converters():array
     {
         return [
-            "whitelist" => new WhitelistConverter(),
+            "naming_rule_id" => new NamingRuleConverter(),
         ];
     }
 

+ 30 - 0
database/migrations/2024_12_18_153818_add_doc_to_files_table.php

@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::table('files', function (Blueprint $table) {
+            $table->string("doc_stage", 50)->nullable();
+            $table->string("doc_type", 50)->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('files', function (Blueprint $table) {
+            $table->dropColumn('doc_stage');
+            $table->dropColumn('doc_type');
+        });
+    }
+};

+ 3 - 0
routes/api.php

@@ -290,6 +290,9 @@ Route::middleware(['auth:sanctum','account.limit'])->group(function () {
         Route::get("file/models", [API\FileController::class, "models"])->name("file.models");
         Route::get("file/model-history", [API\FileController::class, "modelHistory"])->name("file.model-history");
         Route::get("file/{fileId}", [API\FileController::class, "detail"])->name("file.detail");
+        Route::apiResource("file", API\FileController::class)->only([
+            'update'
+        ]);
 
 
         Route::get("bim/multiple-views", [API\BimController::class, "multipleViews"])->name("bim.multiple-views");