all()); }, '메뉴 목록 조회'); } public function show($id) { return ApiResponse::handle(function () use ($id) { return MenuService::show(['id' => (int) $id]); }, '메뉴 단건 조회'); } public function store(Request $request) { return ApiResponse::handle(function () use ($request) { return MenuService::store($request->all()); }, '메뉴 등록'); } public function update(Request $request, $id) { return ApiResponse::handle(function () use ($request, $id) { $params = $request->all(); $params['id'] = (int) $id; return MenuService::update($params); }, '메뉴 수정'); } public function destroy($id) { return ApiResponse::handle(function () use ($id) { return MenuService::destroy(['id' => (int) $id]); }, '메뉴 삭제'); } public function reorder(Request $request) { return ApiResponse::handle(function () use ($request) { return MenuService::reorder($request->all()); }, '메뉴 정렬 변경'); } public function toggle(Request $request, $id) { return ApiResponse::handle(function () use ($request, $id) { $params = $request->all(); $params['id'] = (int) $id; return MenuService::toggle($params); }, '메뉴 상태 토글'); } /** * 삭제된 메뉴 복원 */ public function restore($id) { return ApiResponse::handle(function () use ($id) { return MenuService::restore(['id' => (int) $id]); }, '메뉴 복원'); } /** * 삭제된 메뉴 목록 조회 */ public function trashed() { return ApiResponse::handle(function () { return MenuService::trashedList(); }, '삭제된 메뉴 목록 조회'); } /** * 복제 가능한 글로벌 메뉴 목록 */ public function availableGlobal() { return ApiResponse::handle(function () { return $this->menuSyncService->getAvailableGlobalMenus(); }, '복제 가능한 글로벌 메뉴 목록'); } /** * 동기화 상태 목록 조회 */ public function syncStatus(Request $request) { return ApiResponse::handle(function () use ($request) { $statusFilter = $request->query('status'); return $this->menuSyncService->getSyncStatus($statusFilter); }, '동기화 상태 조회'); } /** * 선택 동기화 (신규 생성 또는 기존 업데이트) */ public function sync(Request $request) { return ApiResponse::handle(function () use ($request) { $menuIds = $request->input('menu_ids', []); $force = $request->boolean('force', false); return $this->menuSyncService->syncMenus($menuIds, $force); }, '메뉴 동기화'); } /** * 신규 글로벌 메뉴 일괄 가져오기 */ public function syncNew() { return ApiResponse::handle(function () { return $this->menuSyncService->importNewMenus(); }, '신규 메뉴 가져오기'); } /** * 변경된 기존 메뉴 일괄 업데이트 (커스텀 제외) */ public function syncUpdates() { return ApiResponse::handle(function () { return $this->menuSyncService->syncUpdates(); }, '메뉴 업데이트 동기화'); } }