input('sort','desc'); $pageSize=$request->get('page_size') ?? 10; $plans = Plan::filter($request->all())->where("parent_id", 0)->orderBy('created_at',$sort)->with(['children','asset'=>function($query){ $query->with('parent'); }])->paginate($pageSize); return PlanResource::collection($plans); } public function byAssets(Request $request) { $assetIds = $request->get("assets", []); $emptyResponse = $this->success(['data' => []]); if (! $assetIds) { return $emptyResponse; } $assets = Asset::query()->where(function ($query) use ($assetIds) { foreach ($assetIds as $index => $assetId) { $where = $index == 0 ? "where" : "orWhere"; $query->$where("path", "like", "%,". $assetId . ",%"); } })->pluck("id"); if ($assets->isEmpty()) { return $emptyResponse; } $plans = Plan::query()->with(['asset'])->whereIn("asset_id", $assets->toArray())->get(); return PlanByAssetResource::collection($plans); } /** * Store a newly created resource in storage. */ public function store(FileAssociationService $service, CreateOrUpdateRequest $request) { $plan = new Plan(); $plan->mergeFillable([ 'company_id' ]); $service->check( $request->get("file_ids", []), FileObjectType::PLAN, $request->get("file_uuid"), ); $plan->fill([ ...$request->all(), 'company_id' => Auth::user()->company_id, 'description' => $request->description? (new \App\Services\File\ImageUrlService)->interceptImageUrl($request->description) : null, ]); $plan->save(); $service->association($plan->id); return $this->created(); } /** * Display the specified resource. */ public function show(string $id) { $plan = Plan::findOrFail($id); return new PlanResource($plan); } /** * Update the specified resource in storage. */ public function update(CreateOrUpdateRequest $request, string $id) { $plan = Plan::findOrFail($id); $plan->fill([ ...$request->all(), 'description' => $request->description? (new \App\Services\File\ImageUrlService)->interceptImageUrl($request->description) : null, ]); $plan->save(); return $this->noContent(); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $plan = Plan::findOrFail($id); if(!empty($plan->children()->first())){ throw new \Exception("Please remove the sub-level plan."); } $plan->delete(); return $this->noContent(); } }