From a3d51424fb0ca3ea958c1af1857bb56e0ed01173 Mon Sep 17 00:00:00 2001 From: mina-esn Date: Wed, 19 Aug 2026 13:54:37 +0330 Subject: [PATCH] feat: add UserController and implement user management in admin panel --- app/Http/Controllers/Admin/UserController.php | 120 ++++++++++++++++++ app/Http/Requests/Admin/UserUpdateRequest.php | 57 +++++++++ 2 files changed, 177 insertions(+) create mode 100644 app/Http/Controllers/Admin/UserController.php create mode 100644 app/Http/Requests/Admin/UserUpdateRequest.php diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php new file mode 100644 index 0000000..ae8b3b1 --- /dev/null +++ b/app/Http/Controllers/Admin/UserController.php @@ -0,0 +1,120 @@ +when($request->filled('search'), function (Builder $query) use ($request) { + $search = $request->input('search'); + + $query->whereAny([ + 'first_name', + 'last_name', + 'mobile', + 'email' + ], 'LIKE', "%$search%"); + }) + ->when($request->filled('sort'), function (Builder $query) use ($request) { + $sort = $request->input('sort'); + + switch ($sort) { + case 'name_asc': + { + $query + ->orderBy('first_name') + ->orderBy('last_name'); + break; + } + case 'name_desc': + { + $query + ->orderByDesc('first_name') + ->orderByDesc('last_name'); + break; + } + default: + { + $query + ->orderByDesc('created_at'); + } + } + }) + ->paginate(4); + + return view('admin.users.index', compact('title', 'users')); + } + + public function show(User $user) + { + $title = 'جزئیات کاربر'; + + + return view('admin.users.show', compact('title', 'user' )); + } + + public function edit(User $user) + { + $title = 'ویرایش کاربر'; + return view('admin.users.edit', compact('title', 'user')); + } + + public function update(UserUpdateRequest $request, User $user) + { + $inputs = $request->only([ + 'first_name', + 'last_name', + 'email', + 'mobile' + ]); + + if ($request->filled('password')) { + $inputs['password'] = Hash::make($request->input('password')); + } + $user->update($inputs); + + return redirect()->back()->with('success', 'ویرایش کاربر با موفقیت انجام شد'); + } + + public function trash(Request $request) + { + $title = 'سطل زباله کاربران'; + $users = User::onlyTrashed() + ->paginate(15); + + return view('admin.users.trash', compact('users')); + } + + public function destroy(User $user) + { + $user->delete(); + + return back()->with('success', 'کاربر با موفقیت غیرفعال شد.'); + } + + public function restore($id) + { + $user = User::onlyTrashed()->findOrFail($id); + $user->restore(); + + return back()->with('success', 'کاربر با موفقیت بازگردانی شد.'); + } + + public function forceDelete($id) + { + $user = User::onlyTrashed()->findOrFail($id); + $user->forceDelete(); + + return back()->with('success', 'کاربر برای همیشه حذف شد.'); + } +} diff --git a/app/Http/Requests/Admin/UserUpdateRequest.php b/app/Http/Requests/Admin/UserUpdateRequest.php new file mode 100644 index 0000000..2062673 --- /dev/null +++ b/app/Http/Requests/Admin/UserUpdateRequest.php @@ -0,0 +1,57 @@ +|string> + */ + public function rules(): array + { + return [ + 'first_name' => [ + 'required', + 'min:2', + 'max:64', + 'persian_alpha' + ], + 'last_name' =>[ + 'required', + 'min:3', + 'max:64', + 'persian_alpha' + ], + 'mobile' => [ + 'required', + 'string', + 'digits:11', + 'unique:App\Models\User,mobile,' . auth()->id(), + 'ir_mobile:zero' + ], + 'email' =>[ + 'required', + 'email', + 'max:150', + 'unique:App\Models\User,email,' . auth()->id() + ], + 'password'=>[ + 'nullable', + 'min:8', + ] + ]; + } +}