瀏覽代碼

增加接口-需求的批量创建

langshiyeye 1 年之前
父節點
當前提交
c061c08cca

+ 27 - 0
app/Http/Controllers/API/RequirementController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
 use App\Http\Requests\API\Requirement\ClosedRequest;
 use App\Http\Requests\API\Requirement\CreateOrUpdateRequest;
 use App\Http\Requests\API\Requirement\LinkPlanRequest;
+use App\Http\Requests\API\Requirement\BatchCreateRequest;
 use App\Http\Resources\API\AssetRequirementResource;
 use App\Http\Resources\API\RequirementResource;
 use App\Models\Enums\RequirementStatus;
@@ -13,6 +14,7 @@ use App\Models\Plan;
 use App\Models\Requirement;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Validation\Rules\Enum;
 
 class RequirementController extends Controller
@@ -109,4 +111,29 @@ class RequirementController extends Controller
 
         return $this->noContent();
     }
+
+    public function batchStore(BatchCreateRequest $request)
+    {
+        $requirementsData = $request->all();
+        $companyId = Auth::user()->company_id;
+        $created_by = Auth::id();
+
+        DB::transaction(function () use ($requirementsData,$companyId,$created_by) {
+            foreach ($requirementsData as $data) {
+                $requirement = new Requirement();
+                $requirement->mergeFillable([
+                    'company_id', 'created_by',
+                ]);
+                $requirement->fill([
+                    ...$data,
+                    'company_id' => $companyId,
+                    'created_by' =>  $created_by,
+                    'status' => RequirementStatus::ACTIVE,
+                    'mailto' => [],
+                ]);
+                $requirement->save();
+            }
+        });
+        return $this->created();
+    }
 }

+ 45 - 0
app/Http/Requests/API/Requirement/BatchCreateRequest.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Http\Requests\API\Requirement;
+
+use App\Http\Requests\RuleHelper;
+use App\Models\Enums\RequirementStatus;
+use App\Models\User;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Validation\Rule;
+use Illuminate\Validation\Rules\Enum;
+
+class BatchCreateRequest extends FormRequest
+{
+    use RuleHelper;
+
+    /**
+     * 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 [
+            '*.title' => 'required|max:255',
+            '*.asset_id' => [
+                'required',
+                Rule::exists('assets', 'id')->where($this->userCompanyWhere()),
+            ],
+            '*.priority' => 'required|in:1,2,3,4',
+            '*.requirement_group_id' => [
+                'required',
+                Rule::exists('requirement_groups', 'id')->where($this->userCompanyWhere()),
+            ]
+            ];
+    }
+}

+ 2 - 0
routes/api.php

@@ -79,5 +79,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("folder/{folder}", [API\FolderController::class, "show"])->name("folder.show");
         Route::patch("folder/{folder}", [API\FolderController::class, "update"])->name("folder.update");
         Route::delete("folder/{folder}", [API\FolderController::class, "destroy"])->name("folder.destroy");
+
+        Route::post("requirement/batch", [API\RequirementController::class, "batchStore"])->name("requirement.batchStore");
     });
 });