withCount(['videos', 'downline']) ->when(auth()->user()->role->type !== 'superadmin', fn ($query) => $query->where('parent_id', auth()->id())->whereHas('role.permissions', fn ($query) => $query->where('route', 'downline'))) ->paginate(); return UserResource::collection($users); } public function unassignedUsers(Request $request, MLMDownlineStaff $mLMDownlineStaff) { $users = MLMDownlineUser::query() ->with(['staff', 'role']) ->whereHas('role.permissions', fn ($query) => $query->where('route', 'downline')) ->whereHas('staff', fn ($query) => $query->where('id', '!=', $mLMDownlineStaff->id)) ->where(fn ($query) => $query->whereNull('parent_id')->orWhere('parent_id', $mLMDownlineStaff->user->id)) ->paginate(); return UserResource::collection($users); } public function assign(Request $request, MLMDownlineStaff $mLMDownlineStaff) { $validated = $request->validate([ 'users' => ['required', 'array'] ]); $user = $mLMDownlineStaff->user; $user->downline()->update(['parent_id' => null]); MLMDownlineUser::query() ->whereIn('id', $validated['users']) ->update(['parent_id' => $user->id]); return response()->noContent(); } public function canRoleBeDownline(Request $request) { $role = explode('-', $request->role); $role_id = $role[0]; $role = \Modules\RolePermission\Entities\Role::where('id', $role_id)->whereHas('permissions', function ($q) { $q->where('route', 'downline'); })->first(); return response()->json([ 'allowed' => $role ? true : false ]); } }