Sfoglia il codice sorgente

Set naming rules to generate combination rules for names

moell 1 anno fa
parent
commit
e97b779c38

+ 11 - 0
app/Http/Controllers/API/NameRuleController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\API;
 
 use App\Http\Controllers\Controller;
+use App\Http\Requests\API\CombinationSettingRequest;
 use App\Http\Requests\API\NamingRule\CreateOrUpdateRequest;
 use App\Http\Resources\API\NamingRuleResource;
 use App\Models\NamingRule;
@@ -84,4 +85,14 @@ class NameRuleController extends Controller
             'data' => $namingRules
         ]);
     }
+
+    public function combinationSetting(CombinationSettingRequest $request, string $id)
+    {
+        $namingRule = NamingRule::query()->allowed()->findOrFail($id);
+
+        $namingRule->combination_rules = $request->all();
+        $namingRule->save();
+
+        return $this->noContent();
+    }
 }

+ 33 - 0
app/Http/Requests/API/CombinationSettingRequest.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Requests\API;
+
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Rule;
+
+class CombinationSettingRequest 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 [
+            "*.field" => [
+                "required",
+                Rule::exists("custom_fields", "key")->where("group", $this->route("naming_rule"))
+            ],
+            "*.link" => "required"
+        ];
+    }
+}

+ 4 - 0
app/Models/NamingRule.php

@@ -18,6 +18,10 @@ class NamingRule extends Model
         'id'
     ];
 
+    protected $casts = [
+        'combination_rules' => 'array'
+    ];
+
     public function scopeAllowed(Builder $query)
     {
         if (!Auth::user()->super_admin) {

+ 28 - 0
database/migrations/2024_03_11_211444_add_combination_rules_to_naming_rules_table.php

@@ -0,0 +1,28 @@
+<?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('naming_rules', function (Blueprint $table) {
+            $table->json("combination_rules");
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('naming_rules', function (Blueprint $table) {
+            $table->dropColumn(['combination_rules']);
+        });
+    }
+};

+ 1 - 0
routes/api.php

@@ -72,6 +72,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("custom-field-group", [API\CustomFieldController::class, "groups"])->name("custom-field.groups");
 
         Route::get("naming-rule-enabled", [API\NameRuleController::class, "enabled"])->name("naming-rule.enabled");
+        Route::post("naming-rule/{naming_rule}/combination", [API\NameRuleController::class, "combinationSetting"])->name("naming-rule.combination-setting");
 
         Route::get("team-member/{project}", [API\TeamMemberController::class, "members"])->name("team-member.list");
         Route::delete("team-member/{team_member}", [API\TeamMemberController::class, "destroy"])->name("team-member.destroy");