Bläddra i källkod

Merge remote-tracking branch 'origin/dev' into dev

lsm12139 1 månad sedan
förälder
incheckning
299e61ba51

+ 8 - 0
app/Http/Controllers/API/FolderController.php

@@ -12,7 +12,9 @@ use App\Models\Enums\FolderObjectType;
 use App\Models\File;
 use App\Models\Folder;
 use App\Models\Library;
+use App\Services\File\FileService;
 use App\Services\File\FolderUrlService;
+use App\Services\Folder\FoldersService;
 use App\Services\Folder\VersionFileTreeByObjectService;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
@@ -433,4 +435,10 @@ class FolderController extends Controller
         ]);
 
     }
+
+    public function applyNaming(string $folderId, string $namingId, FoldersService $foldersService): void
+    {
+        $foldersService->update($folderId, ['naming_rule_id' => $namingId]);
+        $this->noContent();
+    }
 }

+ 4 - 1
app/Libraries/ChunkedUpload/Disks/Cos.php

@@ -115,7 +115,10 @@ class Cos implements ChunkedUploadContact
                 'name/cos:ListMultipartUploads',
                 'name/cos:ListParts',
                 'name/cos:UploadPart',
-                'name/cos:CompleteMultipartUpload'
+                'name/cos:CompleteMultipartUpload',
+                //取消分块上传操作
+                "name/cos:AbortMultipartUpload",
+                "name/cos:DeleteObject"
             ],
             // 临时密钥生效条件,关于condition的详细设置规则和COS支持的condition类型可以参考 https://cloud.tencent.com/document/product/436/71306
             "condition" => []

+ 7 - 0
app/Models/Enums/ActionObjectType.php

@@ -5,6 +5,7 @@ namespace App\Models\Enums;
 use App\Models\Asset;
 use App\Models\Container;
 use App\Models\File;
+use App\Models\Folder;
 use App\Models\Plan;
 use App\Models\Project;
 use App\Models\Requirement;
@@ -13,6 +14,7 @@ use App\Services\History\Detector\AssetDetector;
 use App\Services\History\Detector\ContainerContentDetector;
 use App\Services\History\Detector\ContainerDetector;
 use App\Services\History\Detector\FileDetector;
+use App\Services\History\Detector\FoldersDetector;
 use App\Services\History\Detector\ProjectDetector;
 use App\Services\History\Detector\RequirementDetector;
 use App\Services\History\Detector\TaskDetector;
@@ -35,6 +37,8 @@ enum ActionObjectType: string
 
     case CONTAINER_FILE = "container_file";
 
+    case FOLDER = "folder";
+
     public function modelBuilder(): \Illuminate\Database\Eloquent\Builder
     {
         return match ($this) {
@@ -45,6 +49,7 @@ enum ActionObjectType: string
             self::REQUIREMENT => Requirement::query(),
             self::CONTAINER => Container::query(),
             self::CONTAINER_FILE => File::query(),
+            self::FOLDER => Folder::query(),
         };
     }
 
@@ -58,6 +63,7 @@ enum ActionObjectType: string
             self::REQUIREMENT => Requirement::query(),
             self::CONTAINER => Container::query()->allowed($id),
             self::CONTAINER_FILE => File::query(),
+            self::FOLDER => Folder::query(),
         };
     }
 
@@ -84,6 +90,7 @@ enum ActionObjectType: string
             ActionObjectType::CONTAINER => ContainerDetector::class,
             ActionObjectType::CONTAINER_CONTENT => ContainerContentDetector::class,
             ActionObjectType::CONTAINER_FILE => FileDetector::class,
+            ActionObjectType::FOLDER => FoldersDetector::class,
             default => null
         };
     }

+ 15 - 0
app/Repositories/ContainerRepository.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Repositories;
+
+use App\Models\Container;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
+
+class ContainerRepository
+{
+    public static function getContainer($id): Container|Collection|Builder|array|null
+    {
+        return Container::query()->findOrFail($id);
+    }
+}

+ 26 - 0
app/Services/Folder/FoldersService.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Services\Folder;
+
+use App\Models\Folder;
+use App\Repositories\CustomFieldRepository;
+
+class FoldersService
+{
+    private CustomFieldRepository $customFieldRepository;
+    public function __construct(CustomFieldRepository $customFieldRepository)
+    {
+        $this->customFieldRepository = $customFieldRepository;
+    }
+
+    public function update(string $id, array $updatedData): void
+    {
+        $folder = Folder::query()->findOrFail($id);
+
+        if ($updatedData['naming_rule_id']) {
+            $updatedData['naming_rules'] = $this->customFieldRepository->keysByGroup($updatedData['naming_rule_id']);
+        }
+        $folder->fill($updatedData);
+        $folder->save();
+    }
+}

+ 39 - 0
app/Services/History/Detector/FoldersDetector.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Services\History\Detector;
+
+use App\Services\History\Converter\CustomFieldSelectConverter;
+use App\Services\History\Converter\NamingRuleConverter;
+
+class FoldersDetector extends DetectorAbstract
+{
+    public static function fields(): array
+    {
+        return [
+            'name',
+            'naming_rules',
+        ];
+    }
+
+    public static function diffFields(): array
+    {
+        return [
+            'name',
+            'naming_rules',
+        ];
+    }
+
+    public static function converters():array
+    {
+        return [
+            "naming_rule_id" => new NamingRuleConverter(),
+        ];
+    }
+
+    public static function arrayFields(): array
+    {
+        return [
+
+        ];
+    }
+}

+ 32 - 0
database/migrations/2024_12_20_170029_add_naming_rule_id_to_folder_table.php

@@ -0,0 +1,32 @@
+<?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('folders', function (Blueprint $table) {
+            //
+            $table->integer('naming_rule_id')->default(null)->nullable();
+            $table->json('naming_rules')->default(null)->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('folders', function (Blueprint $table) {
+            //
+            $table->dropColumn('naming_rule_id');
+            $table->dropColumn('naming_rules');
+        });
+    }
+};

+ 2 - 0
routes/api.php

@@ -259,6 +259,8 @@ Route::middleware(['auth:sanctum','account.limit'])->group(function () {
 //            ->name("folder.file-version-tree-by-object");
         Route::patch("folder/{folder}/change-name", [API\FolderController::class, "changeName"])->name("folder.change-name");
         Route::get("folder/search/folder-file", [API\FolderController::class, "search"])->name("folder.search-folder-file");
+        Route::patch("folder/apply-naming/{folder_id}/{naming_id}", [API\FolderController::class, "applyNaming"])->name("folder.apply-naming");
+
 
         Route::post("requirement/batch", [API\RequirementController::class, "batchStore"])->name("requirement.batchStore");