feat(board): 게시판 수정 시 메뉴 URL/이름 자동 업데이트
- MenuService::updateMenuForBoard() 메서드 추가 - 시스템 게시판: global_menus + 연결된 모든 menus URL 업데이트 - 테넌트 게시판: 해당 테넌트의 menus만 URL 업데이트 - BoardService::updateAnyBoard()에서 board_code/name 변경 감지 시 호출 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -406,10 +406,17 @@ public function getAllBoards(array $filters = [], int $perPage = 15): LengthAwar
|
|||||||
->withCount('fields')
|
->withCount('fields')
|
||||||
->withTrashed();
|
->withTrashed();
|
||||||
|
|
||||||
// 테넌트 필터: 선택 없으면 시스템만, 선택하면 해당 테넌트만
|
// 헤더에서 선택한 테넌트 기준: 시스템 게시판 + 해당 테넌트 게시판
|
||||||
if (! empty($filters['tenant_id'])) {
|
$selectedTenantId = session('selected_tenant_id');
|
||||||
$query->where('tenant_id', $filters['tenant_id']);
|
|
||||||
|
if ($selectedTenantId && $selectedTenantId !== 'all') {
|
||||||
|
// 시스템 게시판 + 선택된 테넌트 게시판
|
||||||
|
$query->where(function ($q) use ($selectedTenantId) {
|
||||||
|
$q->where('is_system', true)
|
||||||
|
->orWhere('tenant_id', $selectedTenantId);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
|
// 전체 보기: 시스템 게시판만 (테넌트 게시판은 테넌트 선택 후 표시)
|
||||||
$query->where('is_system', true);
|
$query->where('is_system', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,12 +506,32 @@ public function updateAnyBoard(int $id, array $data): bool
|
|||||||
{
|
{
|
||||||
$board = Board::findOrFail($id);
|
$board = Board::findOrFail($id);
|
||||||
|
|
||||||
|
// 기존 값 저장 (메뉴 업데이트용)
|
||||||
|
$oldCode = $board->board_code;
|
||||||
|
$oldName = $board->name;
|
||||||
|
|
||||||
$data['updated_by'] = auth()->id();
|
$data['updated_by'] = auth()->id();
|
||||||
|
|
||||||
// tenant_id 변경 방지 (시스템 ↔ 테넌트 전환 불가)
|
// tenant_id 변경 방지 (시스템 ↔ 테넌트 전환 불가)
|
||||||
unset($data['tenant_id'], $data['is_system']);
|
unset($data['tenant_id'], $data['is_system']);
|
||||||
|
|
||||||
return $board->update($data);
|
$result = $board->update($data);
|
||||||
|
|
||||||
|
// board_code 또는 name 변경 시 메뉴도 업데이트
|
||||||
|
$newCode = $data['board_code'] ?? $oldCode;
|
||||||
|
$newName = $data['name'] ?? $oldName;
|
||||||
|
|
||||||
|
if ($oldCode !== $newCode || $oldName !== $newName) {
|
||||||
|
$this->menuService->updateMenuForBoard(
|
||||||
|
$oldCode,
|
||||||
|
$newCode,
|
||||||
|
$newName,
|
||||||
|
$board->is_system,
|
||||||
|
$board->tenant_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1498,4 +1498,58 @@ public function restoreMenuForBoard(string $boardCode, string $boardName, bool $
|
|||||||
return $created !== null;
|
return $created !== null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 게시판 코드 변경 시 연결된 메뉴 URL도 업데이트
|
||||||
|
*
|
||||||
|
* @param string $oldCode 기존 게시판 코드
|
||||||
|
* @param string $newCode 새 게시판 코드
|
||||||
|
* @param string $newName 새 게시판 이름
|
||||||
|
* @param bool $isSystem 시스템 게시판 여부
|
||||||
|
* @param int|null $tenantId 테넌트 ID (테넌트 게시판인 경우)
|
||||||
|
*/
|
||||||
|
public function updateMenuForBoard(string $oldCode, string $newCode, string $newName, bool $isSystem, ?int $tenantId = null): bool
|
||||||
|
{
|
||||||
|
if ($isSystem) {
|
||||||
|
// 시스템 게시판: global_menus + 연결된 모든 menus 업데이트
|
||||||
|
$oldUrl = '/customer-center/'.$oldCode;
|
||||||
|
$newUrl = '/customer-center/'.$newCode;
|
||||||
|
|
||||||
|
// 1. GlobalMenu 업데이트
|
||||||
|
$globalMenu = GlobalMenu::where('url', $oldUrl)->first();
|
||||||
|
if ($globalMenu) {
|
||||||
|
$globalMenu->update([
|
||||||
|
'url' => $newUrl,
|
||||||
|
'name' => $newName,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 2. 해당 global_menu_id를 참조하는 모든 menus 업데이트
|
||||||
|
Menu::where('global_menu_id', $globalMenu->id)
|
||||||
|
->update([
|
||||||
|
'url' => $newUrl,
|
||||||
|
'name' => $newName,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
// 테넌트 게시판: 해당 테넌트의 menus만 업데이트
|
||||||
|
$oldUrl = '/boards/'.$oldCode;
|
||||||
|
$newUrl = '/boards/'.$newCode;
|
||||||
|
|
||||||
|
$query = Menu::where('url', $oldUrl);
|
||||||
|
if ($tenantId) {
|
||||||
|
$query->where('tenant_id', $tenantId);
|
||||||
|
} else {
|
||||||
|
$query->whereNull('tenant_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$query->update([
|
||||||
|
'url' => $newUrl,
|
||||||
|
'name' => $newName,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user