Role::with('permissions')->latest()->get(), ]); } public function create(): Response { return Inertia::render('admin/system/role/create', [ 'permissions' => Permission::all(), ]); } public function store(RoleRequest $request): RedirectResponse { $validated = $request->validated(); try { DB::transaction(function () use ($validated) { $role = Role::create([ 'name' => $validated['name'], 'guard_name' => $validated['guard_name'], ]); $role->syncPermissions($validated['permissions'] ?? []); }); return redirect()->route('system.role.index')->with('success', 'Data berhasil disimpan'); } catch (\Throwable $e) { LogHelper::logException($e, 'Failed to store role', [ 'name' => $validated['name'] ?? null, ]); return redirect() ->back() ->withInput() ->with('error', 'Terjadi kesalahan, silakan hubungi pengembang'); } } public function edit(Role $role): Response { $role->load('permissions'); return Inertia::render('admin/system/role/edit', [ 'role' => $role, 'permissions' => Permission::all(), ]); } public function update(RoleRequest $request, Role $role): RedirectResponse { $validated = $request->validated(); try { DB::transaction(function () use ($role, $validated) { $role->update([ 'name' => $validated['name'], 'guard_name' => $validated['guard_name'], ]); $role->syncPermissions($validated['permissions'] ?? []); }); return redirect()->route('system.role.index')->with('success', 'Data berhasil diperbarui'); } catch (\Throwable $e) { LogHelper::logException($e, 'Failed to update role', [ 'role_id' => $role->id, 'name' => $validated['name'] ?? null, ]); return redirect() ->back() ->withInput() ->with('error', 'Terjadi kesalahan, silakan hubungi pengembang'); } } public function destroy(Role $role): RedirectResponse { $role->delete(); return redirect()->back()->with('success', 'Data berhasil dihapus'); } public function bulkDestroy(Request $request): RedirectResponse { $ids = $request->input('ids'); Role::whereIn('id', $ids)->delete(); return redirect()->back()->with('success', 'Data terpilih berhasil dihapus'); } }