From e241b96c72ce77edc8e9f3a51c17291bf5d676f6 Mon Sep 17 00:00:00 2001 From: kent Date: Sat, 27 Dec 2025 23:18:24 +0900 Subject: [PATCH] =?UTF-8?q?fix(menu):=20=ED=85=8C=EB=84=8C=ED=8A=B8=20Menu?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20global=5Fmenu=5Fid=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - createMenuForBoard(): GlobalMenu 조회/생성 후 테넌트 Menu에 global_menu_id 설정 - restoreMenuForBoard(): 복원/생성 시에도 global_menu_id 연결 - is_customized: false 추가하여 글로벌 메뉴 연동 표시 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- app/Services/MenuService.php | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/app/Services/MenuService.php b/app/Services/MenuService.php index 0561b5ff..db240f70 100644 --- a/app/Services/MenuService.php +++ b/app/Services/MenuService.php @@ -1237,10 +1237,9 @@ public function createMenuForBoard(array $boardData): GlobalMenu|Menu|null // 시스템 게시판 → global_menus + 모든 테넌트 menus에 추가 $url = '/customer-center/'.$boardCode; - // 1. GlobalMenu에 추가 - $globalMenu = null; - $globalExists = GlobalMenu::where('url', $url)->exists(); - if (! $globalExists) { + // 1. GlobalMenu 조회 또는 생성 + $globalMenu = GlobalMenu::where('url', $url)->first(); + if (! $globalMenu) { $maxOrder = GlobalMenu::where('parent_id', $parentId)->max('sort_order') ?? 0; $globalMenu = GlobalMenu::create([ @@ -1255,7 +1254,7 @@ public function createMenuForBoard(array $boardData): GlobalMenu|Menu|null ]); } - // 2. 모든 테넌트의 Menu에 추가 + // 2. 모든 테넌트의 Menu에 추가 (global_menu_id 연결) $tenants = Tenant::active()->get(); foreach ($tenants as $tenant) { $menuParentId = $this->findParentMenuForBoard(false, $tenant->id); @@ -1268,6 +1267,7 @@ public function createMenuForBoard(array $boardData): GlobalMenu|Menu|null Menu::create([ 'tenant_id' => $tenant->id, 'parent_id' => $menuParentId, + 'global_menu_id' => $globalMenu->id, 'name' => $boardName, 'url' => $url, 'icon' => 'document-text', @@ -1275,6 +1275,7 @@ public function createMenuForBoard(array $boardData): GlobalMenu|Menu|null 'is_active' => true, 'hidden' => false, 'is_external' => false, + 'is_customized' => false, 'created_by' => auth()->id(), ]); } @@ -1400,17 +1401,17 @@ public function restoreMenuForBoard(string $boardCode, string $boardName, bool $ if ($isSystem) { $url = '/customer-center/'.$boardCode; - // === GlobalMenu 처리 === - $globalTrashed = GlobalMenu::onlyTrashed()->where('url', $url)->first(); - if ($globalTrashed) { - $globalTrashed->restore(); - $globalTrashed->deleted_by = null; - $globalTrashed->save(); - } elseif (! GlobalMenu::where('url', $url)->exists()) { + // === GlobalMenu 복원 또는 생성 === + $globalMenu = GlobalMenu::withTrashed()->where('url', $url)->first(); + if ($globalMenu && $globalMenu->trashed()) { + $globalMenu->restore(); + $globalMenu->deleted_by = null; + $globalMenu->save(); + } elseif (! $globalMenu) { // 없으면 생성 $parentId = $this->findParentMenuForBoard(true, null); $maxOrder = GlobalMenu::where('parent_id', $parentId)->max('sort_order') ?? 0; - GlobalMenu::create([ + $globalMenu = GlobalMenu::create([ 'parent_id' => $parentId, 'name' => $boardName, 'url' => $url, @@ -1422,13 +1423,14 @@ public function restoreMenuForBoard(string $boardCode, string $boardName, bool $ ]); } - // === 모든 활성 테넌트의 Menu 복원/생성 === + // === 모든 활성 테넌트의 Menu 복원/생성 (global_menu_id 연결) === $tenants = Tenant::active()->get(); foreach ($tenants as $tenant) { $menuTrashed = Menu::onlyTrashed()->where('url', $url)->where('tenant_id', $tenant->id)->first(); if ($menuTrashed) { $menuTrashed->restore(); $menuTrashed->deleted_by = null; + $menuTrashed->global_menu_id = $globalMenu->id; $menuTrashed->save(); } elseif (! Menu::where('url', $url)->where('tenant_id', $tenant->id)->exists()) { // 없으면 생성 @@ -1437,6 +1439,7 @@ public function restoreMenuForBoard(string $boardCode, string $boardName, bool $ Menu::create([ 'tenant_id' => $tenant->id, 'parent_id' => $menuParentId, + 'global_menu_id' => $globalMenu->id, 'name' => $boardName, 'url' => $url, 'icon' => 'document-text', @@ -1444,6 +1447,7 @@ public function restoreMenuForBoard(string $boardCode, string $boardName, bool $ 'is_active' => true, 'hidden' => false, 'is_external' => false, + 'is_customized' => false, 'created_by' => auth()->id(), ]); }