when($request->filled('name'), function ($query) use ($request) { $query->where('name', 'like', '%' . $request->name . '%'); })->when($request->filled('email'), function ($query) use ($request) { $query->where('email', 'like', '%' . $request->email . '%'); }); return $query->get(); } public static function storeUser(array $userData): User { return DB::transaction(function () use ($userData) { $user = User::create([ 'name' => $userData['name'], 'email' => $userData['email'], 'password' => Hash::make($userData['password'] ?? "password"), 'can_login' => $userData['can_login'] ?? false, 'order' => $userData['order'], ]); return $user; }); } public static function getUserById(int $id) { return User::findOrFail($id); } public function updateUser(int $id, array $userData) { $user = $this->getUserById($id); return DB::transaction(function () use ($user, $userData) { $user->name = $userData['name']; $user->email = $userData['email']; $user->is_admin = !empty($userData['is_admin']); if (isset($userData['password'])) { $user->password = Hash::make($userData['password']); } $user->save(); return $user; }); } public function deleteUser(int $id) { return DB::transaction(function () use ($id) { $user = $this->getUserById($id); $user->delete(); return $user; }); } public function pluck(callable $query = null) { $baseQuery = User::query(); if (is_callable($query)) { $query($baseQuery); } return $baseQuery->pluck('name', 'id'); } }