validateUser($request); User::create([...$data, 'password' => Hash::make($data['password']), 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, ]); return redirect()->route('admin.settings.users.index') ->with('success', 'User berhasil dibuat.'); } public function show(User $user): View { return view('admin.setting.user.show', compact('user')); } public function edit(User $user): View { return view('admin.setting.user.edit', compact('user')); } public function update(Request $request, User $user): RedirectResponse { $validated = $this->validateUser($request, $user); $user->update([...$validated, 'updated_by' => auth()->user()->id, ]); return redirect()->route('admin.settings.users.index') ->with('success', 'User berhasil diperbarui.'); } public function destroy(User $user): RedirectResponse { $user->update([ 'deleted_by' => auth()->user()->id, ]); $user->delete(); return redirect()->route('admin.settings.users.index') ->with('success', 'User berhasil dihapus.'); } protected function validateUser(Request $request, ?User $user = null): array { $rules = [ 'name' => ['required', 'string', 'max:255'], 'username' => [ 'required', 'string', 'max:255', Rule::unique('users', 'username')->ignore($user?->id), ], 'password' => $user ? ['nullable', 'string', 'min:8'] : ['required', 'string', 'min:8'], ]; $messages = [ 'name.required' => 'Nama harus diisi.', 'username.required' => 'Username harus diisi.', 'username.unique' => 'Username sudah digunakan.', 'password.required' => 'Password harus diisi.', 'password.min' => 'Password minimal 8 karakter.', ]; return $request->validate($rules, $messages); } public function editPassword(User $user): View { return view('admin.setting.user.edit-password', compact('user')); } public function updatePassword(Request $request, User $user): RedirectResponse { $validated = $request->validate([ 'password' => ['required', 'string', 'min:8', 'confirmed'], ], [ 'password.required' => 'Password harus diisi.', 'password.min' => 'Password minimal 8 karakter.', 'password.confirmed' => 'Konfirmasi password tidak cocok.', ]); $validated['password'] = Hash::make($validated['password']); $user->update([...$validated, 'updated_by' => auth()->user()->id, ]); return redirect()->route('admin.settings.users.index') ->with('success', 'User berhasil diperbarui.'); } }