Browse Source

task list

moell 1 year ago
parent
commit
fb1ba0183a

+ 5 - 2
app/Http/Controllers/API/TaskController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\API;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\API\Task\CreateOrUpdateRequest;
 use App\Http\Resources\API\TaskDetailResource;
+use App\Http\Resources\API\TaskResource;
 use App\Models\Task;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -14,9 +15,11 @@ class TaskController extends Controller
     /**
      * Display a listing of the resource.
      */
-    public function index()
+    public function index(Request $request)
     {
-        //
+        $tasks = Task::query()->filter($request->all())->paginate();
+
+        return TaskResource::collection($tasks);
     }
 
     /**

+ 28 - 0
app/Http/Resources/API/TaskResource.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Http\Resources\API;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class TaskResource 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,
+            "parent_id" => $this->parent_id,
+            "begin" => $this->begin,
+            "end" => $this->end,
+            "status" => $this->status,
+            "assign_to" => new UserProfileResource($this->assignTo),
+            "created_by" => new UserProfileResource($this->createdBy),
+        ];
+    }
+}

+ 12 - 1
app/ModelFilters/TaskFilter.php

@@ -1,8 +1,9 @@
-<?php 
+<?php
 
 namespace App\ModelFilters;
 
 use EloquentFilter\ModelFilter;
+use Illuminate\Support\Facades\Auth;
 
 class TaskFilter extends ModelFilter
 {
@@ -13,4 +14,14 @@ class TaskFilter extends ModelFilter
     * @var array
     */
     public $relations = [];
+
+    public function status(string $status): TaskFilter
+    {
+        return $this->where("status", $status);
+    }
+
+    public function my(string $my): TaskFilter
+    {
+        return $my == "yes" ? $this->where("assign", Auth::id()) : $this;
+    }
 }

+ 5 - 0
app/Models/Task.php

@@ -70,4 +70,9 @@ class Task extends Model
         return $this->belongsTo(User::class, 'closed_by');
     }
 
+    public function assignTo(): \Illuminate\Database\Eloquent\Relations\BelongsTo
+    {
+        return $this->belongsTo(User::class, 'assign');
+    }
+
 }

+ 9 - 6
tests/Feature/API/TaskTest.php

@@ -23,7 +23,7 @@ class TaskTest extends TestCase
         $response->assertStatus(201);
     }
 
-    protected function test_task_list()
+    public function test_task_list()
     {
         Task::factory(30)->create();
 
@@ -33,11 +33,14 @@ class TaskTest extends TestCase
             ->assertJsonStructure([
                 'data' => [
                     '*' => [
-                        'id',
-                        'name',
-                        'global',
-                        'status',
-                        'company'
+                        "id",
+                        "name",
+                        "parent_id",
+                        "begin",
+                        "end",
+                        "status",
+                        "assign_to",
+                        "created_by",
                     ]
                 ]
             ]);