From 27c048dc4f8e54498f4212c115b42da59f59d888 Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 18 Aug 2026 19:51:44 -0700 Subject: [PATCH] feat: complete admins controllers and requests --- .../Controllers/Admin/AdminController.php | 151 ++++++++++++++++++ .../Admin/Admins/adminEditRequest.php | 68 ++++++++ .../Admin/Admins/adminStoreRequest.php | 65 ++++++++ 3 files changed, 284 insertions(+) create mode 100644 app/Http/Controllers/Admin/AdminController.php create mode 100644 app/Http/Requests/Admin/Admins/adminEditRequest.php create mode 100644 app/Http/Requests/Admin/Admins/adminStoreRequest.php diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php new file mode 100644 index 0000000..f37de67 --- /dev/null +++ b/app/Http/Controllers/Admin/AdminController.php @@ -0,0 +1,151 @@ +when($request->filled('search'), function (Builder $query) use ($request) { + $search = $request->input('search'); + + $query->whereAny([ + 'first_name', + 'last_name', + 'username', + 'id', + 'status', + 'email', + 'created_at' + ], 'LIKE', "%$search%"); + }) + ->when($request->filled('sort'), function (Builder $query) use ($request) { + switch ($request->input('sort')) { + case 'newest': + $query->orderByDesc('created_at'); + break; + + case 'email': + $query->orderBy('email'); + break; + + case 'name_desc': + $query + ->orderByDesc('first_name') + ->orderByDesc('last_name'); + break; + + default: + $query + ->orderBy('first_name') + ->orderBy('last_name'); + break; + } + }) + ->paginate(); + + return view('admin.admins.index', compact('admins')); + } + + public function create() + { + return view('admin.admins.create'); + } + + public function store(adminStoreRequest $request) + { + $inputs = $request->validated(); + + try { + DB::beginTransaction(); + + $inputs['password'] = Hash::make($inputs['password']); + + Admin::create($inputs); + + DB::commit(); + + } catch (\Exception $exception) { + + DB::rollBack(); + + Log::error($exception); + + return back() + ->withErrors([ + 'general' => 'خطایی رخ داده است' + ]) + ->withInput(); + } + + return redirect() + ->route('admin.admins.index') + ->withErrors([ + 'success' => 'عملیات با موفقیت انجام شد' + ]); + } + + public function edit(Admin $admin) + { + return view('admin.admins.edit', compact('admin')); + } + + public function update(adminEditRequest $request, Admin $admin) + { + $inputs = $request->validated(); + + try { + DB::beginTransaction(); + + if (!empty($inputs['password'])) { + $inputs['password'] = Hash::make($inputs['password']); + } else { + unset($inputs['password']); + } + + $admin->update($inputs); + + DB::commit(); + + } catch (\Exception $exception) { + + DB::rollBack(); + + Log::error($exception); + + return back() + ->withErrors([ + 'general' => 'خطایی رخ داده است' + ]) + ->withInput(); + } + + return redirect() + ->route('admin.admins.index') + ->withErrors([ + 'success' => 'عملیات با موفقیت انجام شد' + ]); + } + + public function destroy(Admin $admin) + { + $admin->delete(); + + return redirect() + ->route('admin.admins.index') + ->withErrors([ + 'success' => 'عملیات با موفقیت انجام شد' + ]); + } +} diff --git a/app/Http/Requests/Admin/Admins/adminEditRequest.php b/app/Http/Requests/Admin/Admins/adminEditRequest.php new file mode 100644 index 0000000..ea1c3dd --- /dev/null +++ b/app/Http/Requests/Admin/Admins/adminEditRequest.php @@ -0,0 +1,68 @@ +|string> + */ + public function rules(): array + { + return [ + 'first_name' => [ + 'required', + 'min:2', + 'max:100', + ], + 'last_name' => [ + 'required', + 'min:3', + 'max:100', + ], + 'username' => [ + 'required', + 'min:4', + 'max:10', + Rule::unique('users', 'mobile')->ignore( + $this->route('admin')?->id ?? auth()->id() + ) + ], + 'email' => [ + 'required', + 'max:150', + 'email', + Rule::unique('users', 'mobile')->ignore( + $this->route('admin')?->id ?? auth()->id() + ) + ], + 'password' => [ + 'nullable', + 'min:6', + + ], + 'image' => [ + 'nullable', + 'image', + ' mimes:jpg,jpeg,png,webp' + ], + 'status' => [ + 'required', + ] + ]; + } +} diff --git a/app/Http/Requests/Admin/Admins/adminStoreRequest.php b/app/Http/Requests/Admin/Admins/adminStoreRequest.php new file mode 100644 index 0000000..fa03529 --- /dev/null +++ b/app/Http/Requests/Admin/Admins/adminStoreRequest.php @@ -0,0 +1,65 @@ +|string> + */ + public function rules(): array + { + return [ + 'first_name' => [ + 'required', + 'min:2', + 'max:100', + 'persian_alpha' + ], + 'last_name' => [ + 'required', + 'min:3', + 'max:100', + 'persian_alpha' + ], + 'username' => [ + 'required', + 'min:4', + 'max:10', + 'unique:App\Models\Admin', + ], + 'email' => [ + 'required', + 'max:150', + 'email', + 'unique:App\Models\Admin' + ], + 'password' => [ + 'required', + 'min:6', + + ], + 'image' => [ + 'nullable', + 'image', + ' mimes:jpg,jpeg,png,webp' + ], + 'status' => [ + 'required', + ] + ]; + } +}