Bladeren bron

修改项目关联的资产

langshiyeye 1 jaar geleden
bovenliggende
commit
3cf0ac5fdc

+ 20 - 0
app/Http/Controllers/API/ProjectController.php

@@ -8,6 +8,7 @@ use App\Http\Requests\API\Project\LinkRequirementByPlanRequest;
 use App\Http\Requests\API\Project\LinkRequirementRequest;
 use App\Http\Requests\API\Project\PostponeRequest;
 use App\Http\Requests\API\Project\UnlinkRequirementRequest;
+use App\Http\Requests\API\Project\UpdateLinkAssetsRequest;
 use App\Http\Resources\API\AssetRequirementResource;
 use App\Http\Resources\API\ProjectAssetResource;
 use App\Http\Resources\API\ProjectDetailResource;
@@ -302,4 +303,23 @@ class ProjectController extends Controller
 
         return AssetRequirementResource::collection($requirements);
     }
+
+    public function updateLinkAssets(UpdateLinkAssetsRequest $request,string $project_id)
+    {
+        $project = Project::find($project_id);
+        if (is_null($project)){
+        return   $this->badRequest('project does not exist');
+        }
+        $assetsIds = $request->assets;
+        DB::transaction(function () use ($project_id,$assetsIds) {
+            ProjectAsset::where('project_id', $project_id)->delete();
+            foreach ($assetsIds as $assetId) {
+                ProjectAsset::create([
+                    'project_id' => $project_id,
+                    'asset_id' => $assetId,
+                ]);
+            }
+        });
+        return $this->noContent();
+    }
 }

+ 47 - 0
app/Http/Requests/API/Project/UpdateLinkAssetsRequest.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Http\Requests\API\Project;
+
+use App\Models\Asset;
+use App\Models\Enums\AssetStatus;
+use App\Models\Plan;
+use App\Models\User;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Validation\Rule;
+use Illuminate\Validation\Rules\Enum;
+
+class UpdateLinkAssetsRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     */
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
+     */
+    public function rules(): array
+    {
+        return [
+            'project_id' =>[
+                'email'
+            ],
+            'assets' => [
+                'array',
+                function ($attribute, $value, $fail) {
+                    $assetIds = Asset::query()->whereIn('id', $value)->pluck('id')->toArray();
+
+                    if (count(array_diff($value, $assetIds)) > 0) {
+                        $fail('The selected asset is invalid.');
+                    }
+                }
+            ],
+        ];
+    }
+}

+ 2 - 0
routes/api.php

@@ -55,6 +55,8 @@ Route::middleware(['auth:sanctum'])->group(function () {
             ->name("project.unlink-requirement");
         Route::patch("project/{project}/link-requirement-by-plan", [API\ProjectController::class, "linkRequirementByPlan"])
             ->name("project.link-requirement-by-plan");
+        Route::patch("project/{project_id}/update-link-assets", [API\ProjectController::class, "updateLinkAssets"])
+            ->name("project.update-link-assets");
 
         Route::get("project/{project}/plan", [API\ProjectController::class, "plan"])
             ->name("project.plan"); //项目关联计划