where('role', '!=', 'instructor') ->when(array_key_exists('search', $data), function ($query) use ($data) { return $query->where('name', 'LIKE', '%' . $data['search'] . '%') ->orWhere('email', 'LIKE', '%' . $data['search'] . '%'); }) ->orderBy('created_at', 'desc'); if (array_key_exists('paginate', $data) && $data['paginate']) { return $users->paginate($page); } return $users->get(); } public function updateUser(int | string $id, array $data): void { DB::transaction(function () use ($data, $id) { User::find($id)->update($data); }, 5); } public function inviteUser(array $data): User { return DB::transaction(function () use ($data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'role' => UserType::STUDENT->value, 'status' => $data['status'] ?? 1, 'password' => Hash::make(Str::random(32)), ]); $token = Password::createToken($user); DB::afterCommit(function () use ($user, $token) { $user->notify(new ResetPasswordNotification($token)); }); return $user; }, 5); } }