Browse Source

create plan

moell 1 year ago
parent
commit
ff75f003c3

+ 65 - 0
app/Http/Controllers/API/PlanController.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace App\Http\Controllers\API;
+
+use App\Http\Controllers\Controller;
+use App\Http\Requests\API\Plan\CreateOrUpdateRequest;
+use App\Models\Plan;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+
+class PlanController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     */
+    public function store(CreateOrUpdateRequest $request)
+    {
+        $plan = new Plan();
+
+        $plan->mergeFillable([
+            'company_id'
+        ]);
+
+        $plan->fill([
+            ...$request->all(),
+            'company_id' => Auth::user()->company_id,
+        ]);
+
+        $plan->save();
+
+        return $this->created();
+    }
+
+    /**
+     * Display the specified resource.
+     */
+    public function show(string $id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     */
+    public function update(Request $request, string $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     */
+    public function destroy(string $id)
+    {
+        //
+    }
+}

+ 41 - 0
app/Http/Requests/API/Plan/CreateOrUpdateRequest.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Http\Requests\API\Plan;
+
+use App\Http\Requests\RuleHelper;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Rule;
+
+class CreateOrUpdateRequest 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 [
+            'asset_id' => [
+                'required',
+                Rule::exists('assets', 'id')->where($this->userCompanyWhere()),
+            ],
+            'title' => 'required|max:255',
+            'begin' => 'date',
+            'end' => 'date',
+            'parent_id' => [
+                Rule::exists('plans', 'id')->where($this->userCompanyWhere())->where("asset_id", $this->post("asset_id")),
+            ]
+        ];
+    }
+}

+ 8 - 0
app/Models/Plan.php

@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use App\Models\Scopes\CompanyScope;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 
@@ -20,6 +21,13 @@ class Plan extends Model
 
     public $timestamps = false;
 
+    protected static function booted()
+    {
+        parent::booted(); // TODO: Change the autogenerated stub
+
+        static::addGlobalScope(new CompanyScope);
+    }
+
     public function requirements()
     {
         return $this->belongsToMany(Requirement::class, 'plan_requirement', 'plan_id', 'requirement_id');

+ 1 - 1
database/migrations/2024_01_24_124223_add_fields_to_plan_table.php

@@ -29,7 +29,7 @@ return new class extends Migration
     {
         Schema::table('plans', function (Blueprint $table) {
             $table->dropColumn([
-                'asset_id', 'parent_id', 'begin', 'end', 'description', 'deleted_at', 'created_at', 'udpated_at'
+                'asset_id', 'parent_id', 'begin', 'end', 'description', 'deleted_at', 'created_at', 'updated_at'
             ]);
         });
     }

+ 1 - 0
routes/api.php

@@ -31,6 +31,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
         'requirement-group' => API\RequirementGroupController::class,
         'requirement' => API\RequirementController::class,
         'project' => API\ProjectController::class,
+        'plan' => API\PlanController::class,
     ]);
 
     Route::patch("project/{project}/closed", [API\ProjectController::class, "closed"])->name("project.closed");

+ 20 - 0
tests/Feature/API/PlanTest.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace Tests\Feature\API;
+
+use App\Models\Plan;
+use Tests\Feature\TestCase;
+
+
+class PlanTest extends TestCase
+{
+    public function test_create_plan(): void
+    {
+        $form = Plan::factory()->make();
+        dump($form->toArray());
+
+        $response = $this->post(route('plan.store'), $form->toArray());
+
+        $response->assertStatus(201);
+    }
+}