fix: [menu-sync] import 시 tenant_id를 요청에서 받도록 수정

- import() API가 세션 없이 호출되어 항상 tenant_id=1로 저장되던 버그 수정
- push()에서 현재 선택된 tenant_id를 함께 전송
- importMenu()에 tenant_id 파라미터 추가하여 재귀 호출 시에도 올바른 테넌트 유지
This commit is contained in:
김보곤
2026-03-18 10:03:56 +09:00
parent a44bb85f76
commit 77c49c5351

View File

@@ -158,6 +158,7 @@ public function import(Request $request): JsonResponse
}
$validated = $request->validate([
'tenant_id' => 'nullable|integer',
'menus' => 'required|array',
'menus.*.name' => 'required|string|max:100',
'menus.*.url' => 'nullable|string|max:255',
@@ -168,9 +169,12 @@ public function import(Request $request): JsonResponse
'menus.*.children' => 'nullable|array',
]);
// 요청에서 tenant_id를 받으면 사용 (API 호출 시 세션 없으므로 필수)
$importTenantId = $validated['tenant_id'] ?? $this->getTenantId();
$imported = 0;
foreach ($validated['menus'] as $menuData) {
$this->importMenu($menuData);
$this->importMenu($menuData, null, $importTenantId);
$imported++;
}
@@ -232,6 +236,7 @@ public function push(Request $request): JsonResponse
'X-Menu-Sync-Key' => $env['api_key'],
'Accept' => 'application/json',
])->timeout(15)->post(rtrim($env['url'], '/').'/menu-sync/import', [
'tenant_id' => $this->getTenantId(),
'menus' => $menuData,
]);
@@ -683,12 +688,14 @@ private function applyOrder(array $orderMap, int $tenantId, ?int $parentId = nul
/**
* 메뉴 Import
*/
private function importMenu(array $data, ?int $parentId = null): void
private function importMenu(array $data, ?int $parentId = null, ?int $tenantId = null): void
{
$tenantId = $tenantId ?? $this->getTenantId();
// 부모 메뉴 찾기
if (! $parentId && ! empty($data['parent_name'])) {
$parent = Menu::withoutGlobalScopes()
->where('tenant_id', $this->getTenantId())
->where('tenant_id', $tenantId)
->where('name', $data['parent_name'])
->first();
$parentId = $parent?->id;
@@ -697,7 +704,7 @@ private function importMenu(array $data, ?int $parentId = null): void
// name + parent_id로 매칭 (동명 메뉴가 다른 계층에 있을 때 자기참조 방지)
$menu = Menu::withoutGlobalScopes()->updateOrCreate(
[
'tenant_id' => $this->getTenantId(),
'tenant_id' => $tenantId,
'name' => $data['name'],
'parent_id' => $parentId,
],
@@ -713,7 +720,7 @@ private function importMenu(array $data, ?int $parentId = null): void
// 자식 메뉴 처리
if (! empty($data['children'])) {
foreach ($data['children'] as $child) {
$this->importMenu($child, $menu->id);
$this->importMenu($child, $menu->id, $tenantId);
}
}
}