validated()); $itemsQuery = $this->getQuery($requestData); CatEvent::dispatch(Filter::getBeforeActionEventName(), $requestData); $itemsQuery->withDepth()->withCount('projects')->defaultOrder(); $items = $request->header('X-Paginate', true) !== 'false' ? $itemsQuery->paginate($request->input('limit', null)) : $itemsQuery->get(); Filter::process( Filter::getActionFilterName(), $items, ); CatEvent::dispatch(Filter::getAfterActionEventName(), [$items, $requestData]); return responder()->success($items)->respond(); } /** * @throws Exception */ protected function getQuery(array $filter = []): QueryBuilder { $model = static::MODEL; $model = new $model; $query = new QueryBuilder($model::getQuery()); $query->setModel($model); $modelScopes = $model->getGlobalScopes(); foreach ($modelScopes as $key => $value) { $query->withGlobalScope($key, $value); } foreach (Filter::process(Filter::getQueryAdditionalRelationsFilterName(), []) as $with) { $query->with($with); } QueryHelper::apply($query, $model, $filter); return Filter::process( Filter::getQueryFilterName(), $query ); } /** * Show the form for creating a new resource. * * @param CreateProjectGroupRequest $request * @return JsonResponse * @throws Throwable */ public function create(CreateProjectGroupRequest $request): JsonResponse { if ($parent_id = $request->safe(['parent_id'])['parent_id'] ?? null) { CatEvent::listen( Filter::getAfterActionEventName(), static fn(ProjectGroup $group) => $group->parent()->associate($parent_id)->save(), ); } return $this->_create($request); } /** * Display the specified resource. * * @param ShowProjectGroupRequest $request * @return JsonResponse * @throws Throwable */ public function show(ShowProjectGroupRequest $request): JsonResponse { return $this->_show($request); } /** * Show the form for editing the specified resource. * * @param EditProjectGroupRequest $request * @return JsonResponse * @throws Throwable */ public function edit(EditProjectGroupRequest $request): JsonResponse { CatEvent::listen( Filter::getAfterActionEventName(), static function (ProjectGroup $group) use ($request) { if ($parent_id = $request->input('parent_id', null)) { $group->parent()->associate($parent_id)->save(); } else { $group->saveAsRoot(); } }, ); return $this->_edit($request); } /** * Remove the specified resource from storage. * * @param DestroyProjectGroupRequest $request * @return JsonResponse * @throws Throwable */ public function destroy(DestroyProjectGroupRequest $request): JsonResponse { return $this->_destroy($request); } /** * @throws Exception */ public function count(ListProjectGroupRequest $request): JsonResponse { return $this->_count($request); } }