Kaynağa Gözat

requirement detail

moell 1 yıl önce
ebeveyn
işleme
2361d2de15

+ 4 - 1
app/Http/Controllers/API/RequirementController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
 use App\Http\Requests\API\Requirement\CreateOrUpdateRequest;
 use App\Http\Requests\API\Requirement\LinkPlanRequest;
 use App\Http\Resources\API\AssetRequirementResource;
+use App\Http\Resources\API\RequirementResource;
 use App\Models\Plan;
 use App\Models\Requirement;
 use Illuminate\Http\Request;
@@ -57,7 +58,9 @@ class RequirementController extends Controller
      */
     public function show(string $id)
     {
-        //
+        $requirement = Requirement::query()->findOrFail($id);
+
+        return new RequirementResource($requirement);
     }
 
     /**

+ 1 - 0
app/Http/Requests/API/Requirement/CreateOrUpdateRequest.php

@@ -43,6 +43,7 @@ class CreateOrUpdateRequest extends FormRequest
                 'array',
                 function ($attribute, $value, $fail) {
                     $userCount = User::where("company_id", Auth::user()->company_id)->whereIn('id', $value)->count();
+
                     if ($userCount != count($value)) {
                         $fail('The selected user is invalid.');
                     }

+ 18 - 1
app/Http/Resources/API/RequirementResource.php

@@ -14,6 +14,23 @@ class RequirementResource extends JsonResource
      */
     public function toArray(Request $request): array
     {
-        return parent::toArray($request);
+        return [
+            'title' => $this->title,
+            'status' => $this->status,
+            'asset_id' => $this->asset_id,
+            'plan_id' => $this->plan_id,
+            'requirement_group_id' => $this->requirement_group_id,
+            'requirement_group' => new RequirementGroupResource($this->group),
+            'asset' => new SimpleAssetResource($this->asset),
+            'reviewed_by' => $this->reviewed_by,
+            'priority' => $this->priority,
+            'note' => $this->note,
+            'description' => $this->description,
+            'acceptance' => $this->acceptance,
+            'mailto' => $this->mailto,
+            'created_by' => new UserProfileResource($this->createdBy),
+            'created_at' => (string)$this->created_at,
+            'updated_at' => (string)$this->updated_at,
+        ];
     }
 }

+ 22 - 0
app/Http/Resources/API/SimpleAssetResource.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace App\Http\Resources\API;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class SimpleAssetResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @return array<string, mixed>
+     */
+    public function toArray(Request $request): array
+    {
+        return [
+            'id'  => $this->id,
+            'name' => $this->name,
+        ];
+    }
+}

+ 15 - 0
app/Models/Requirement.php

@@ -39,8 +39,23 @@ class Requirement extends Model
         return $this->belongsTo(User::class, 'created_by');
     }
 
+    public function reviewedBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
+        return $this->belongsTo(User::class, 'reviewed_by');
+    }
+
+    public function asset(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
+        return $this->belongsTo(Asset::class);
+    }
+
     public function plan(): \Illuminate\Database\Eloquent\Relations\BelongsTo
     {
         return $this->belongsTo(Plan::class);
     }
+
+    public function group(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
+        return $this->belongsTo(RequirementGroup::class, "requirement_group_id");
+    }
 }

+ 6 - 2
database/factories/RequirementFactory.php

@@ -33,8 +33,12 @@ class RequirementFactory extends Factory
             'description' => fake()->text(),
             'acceptance' => fake()->text(),
             'mailto' => [
-                User::factory()->create()->id,
-                User::factory()->create()->id
+                User::factory()->create([
+                    'company_id' => Auth::user()->company_id,
+                ])->id,
+                User::factory()->create([
+                    'company_id' => Auth::user()->company_id,
+                ])->id,
             ],
         ];
     }

+ 28 - 0
tests/Feature/API/RequirementTest.php

@@ -41,6 +41,34 @@ class RequirementTest extends TestCase
         ]));
     }
 
+    public function test_requirement_show(): void
+    {
+        $requirement = Requirement::factory()->create();
+
+        $response = $this->get(route('requirement.show', ['requirement' => $requirement->id]));
+
+        $response->assertStatus(200)->assertJsonStructure([
+            'data' => [
+                'title',
+                'status',
+                'asset_id',
+                'plan_id',
+                'requirement_group_id',
+                'requirement_group',
+                'asset',
+                'reviewed_by',
+                'priority',
+                'note',
+                'description',
+                'acceptance',
+                'mailto',
+                'created_by',
+                'created_at',
+                'updated_at',
+            ]
+        ]);
+    }
+
     public function test_link_plan(): void
     {
         $asset = Asset::factory()->create();