Browse Source

Added level calculation to asset tree

moell 1 year ago
parent
commit
5853b7bd73

+ 14 - 2
app/Http/Controllers/API/AssetController.php

@@ -18,9 +18,21 @@ class AssetController extends Controller
      */
     public function index(Request $request)
     {
+        $assets = Asset::query()->where("parent_id", 0)->where('company_id',Auth::user()->company_id)->with(['children','children.children'])->paginate();
 
-        $assets = Asset::filter($request->all())->where("parent_id", 0)->where('company_id',Auth::user()->company_id)->with(['children','children.children'])->simplePaginate();
-        return AssetResource::collection($assets);
+        $items = [];
+        foreach ($assets as $asset) {
+            $items[] = new AssetResource($asset);
+        }
+
+        return $this->success([
+            'data' => $items,
+            'meta' => [
+                "current_page" => $assets->currentPage(),
+                "per_page" => $assets->perPage(),
+                "total" => $assets->total(),
+            ]
+        ]);
     }
 
     /**

+ 11 - 2
app/Http/Resources/API/AssetResource.php

@@ -7,6 +7,15 @@ use Illuminate\Http\Resources\Json\JsonResource;
 
 class AssetResource extends JsonResource
 {
+    protected int $level = 1;
+
+    public function __construct($resource, int $level = 0)
+    {
+        parent::__construct($resource);
+
+        $this->level = $level + 1;
+    }
+
     /**
      * Transform the resource into an array.
      *
@@ -30,10 +39,10 @@ class AssetResource extends JsonResource
             'latitude' => $this->latitude,
             'longitude' => $this->longitude,
             'parent_id' => $this->parent_id,
-//            'children' => $this->parent_id == 0 ? AssetResource::collection($this->children) : [],
+            'level' => $this->level,
             'children' =>  $this->when($this->children->isNotEmpty(), function () {
                 return $this->children->map(function ($child) {
-                    return new AssetResource($child);
+                    return new AssetResource($child, $this->level);
                 })->all();
             }),
         ];