getDepartments($request); } public function publicSearch(Request $request) { return $this->getDepartments($request); } protected function getDepartments(Request $request) { $sort = $request->input('sort', 'desc'); $pageSize = $request->get('page_size') ?? 10; $departments = Department::filter($request->all())->orderBy('created_at', $sort)->paginate($pageSize); $departmentTree = !empty(make_tree($departments->toArray()['data'])) ? make_tree($departments->toArray()['data']) : $departments->toArray()['data']; return [ 'data' => $departmentTree, 'total' => $departments->total(), ]; } public function store(CreateOrUpdateRequest $request) { $department=new Department(); $department->mergeFillable([ 'company_id' ]); $department->fill([ ...$request->all(), 'company_id' => Auth::user()->company_id, ]); $department->save(); return $this->created(); } public function show(string $id) { $department=Department::query()->findOrFail($id); return new DepartmentResource($department); } public function update(CreateOrUpdateRequest $request,string $id) { $department=Department::findOrFail($id); $department->fill($request->all()); $department->save(); return $this->noContent(); } public function destroy(string $id) { $department = Department::findOrFail($id); if(!empty($department->children()->first())){ throw new \Exception("Please remove the sub-level departments."); } $department->delete(); return $this->noContent(); } public function departmentUserIndex(){ $companyId=Auth::user()->company_id; $department=Department::query()->where('company_id',$companyId)->with(['users'=>function($query){ $query->select('id','name','department_id'); }])->get(['id','name','parent_id']); return $this->success([ 'data' => make_tree($department->toArray()) ]); } }