feat: Global Menu 계층 이동 기능 추가 및 Role 삭제 오류 수정

Global Menu indent/outdent 기능:
- GlobalMenuController에 move() 메서드 추가
- MenuService에 moveGlobalMenu(), isGlobalDescendant(), reorderGlobalSiblings(), compactGlobalSiblings() 추가
- global-index.blade.php에 드래그 계층 이동 JavaScript 추가
- routes/api.php에 POST /move 라우트 추가

Role 삭제 500 에러 수정:
- config/auth.php에 api guard 추가 (Spatie Permission getModelForGuard 오류 해결)
- RoleService에서 불필요한 users()->detach() 제거 (FK CASCADE 처리)
- RoleController에서 HTMX 요청 시 View 직접 반환 (JSON 파싱 에러 해결)
- index.blade.php에서 불필요한 afterSwap 핸들러 제거

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-20 22:43:48 +09:00
parent 6525bfd715
commit 00a4920b7a
8 changed files with 416 additions and 27 deletions

View File

@@ -277,6 +277,37 @@ public function toggleHidden(Request $request, int $id): JsonResponse
}
}
/**
* 글로벌 메뉴 계층 이동 (인덴트/아웃덴트)
*/
public function move(Request $request): JsonResponse
{
$validated = $request->validate([
'menu_id' => 'required|integer',
'new_parent_id' => 'nullable|integer',
'sort_order' => 'required|integer|min:1',
]);
try {
$result = $this->menuService->moveGlobalMenu(
$validated['menu_id'],
$validated['new_parent_id'],
$validated['sort_order']
);
if (! $result['success']) {
return response()->json($result, 400);
}
return response()->json($result);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => '글로벌 메뉴 이동에 실패했습니다: '.$e->getMessage(),
], 500);
}
}
/**
* 글로벌 메뉴 순서 변경
*/