fix(menu): 테넌트 Menu 생성 시 global_menu_id 연결 추가

- 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 <noreply@anthropic.com>
This commit is contained in:
2025-12-27 23:18:24 +09:00
parent cfb6b3edc2
commit e241b96c72

View File

@@ -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(),
]);
}