수정
This commit is contained in:
@@ -738,43 +738,28 @@ export class MenuCopyService {
|
||||
]);
|
||||
logger.info(` ✅ 메뉴 권한 삭제 완료`);
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 5-4. 채번 규칙 처리 (외래키 제약조건 해결)
|
||||
// scope_type = 'menu'인 채번 규칙: 메뉴 전용이므로 삭제 (파트 포함)
|
||||
=======
|
||||
// 5-4. 채번 규칙 처리 (체크 제약조건 고려)
|
||||
// scope_type = 'menu'인 채번 규칙: 메뉴 전용이므로 삭제 (파트 포함)
|
||||
// check_menu_scope_requires_menu_objid 제약: scope_type='menu'이면 menu_objid NOT NULL 필수
|
||||
>>>>>>> 932eb288c6feae85cf7808513b4e1f0b7e709176
|
||||
const menuScopedRulesResult = await client.query(
|
||||
`SELECT rule_id FROM numbering_rules
|
||||
WHERE menu_objid = ANY($1) AND company_code = $2 AND scope_type = 'menu'`,
|
||||
[existingMenuIds, targetCompanyCode]
|
||||
);
|
||||
if (menuScopedRulesResult.rows.length > 0) {
|
||||
<<<<<<< HEAD
|
||||
const menuScopedRuleIds = menuScopedRulesResult.rows.map(r => r.rule_id);
|
||||
=======
|
||||
const menuScopedRuleIds = menuScopedRulesResult.rows.map(
|
||||
(r) => r.rule_id
|
||||
);
|
||||
>>>>>>> 932eb288c6feae85cf7808513b4e1f0b7e709176
|
||||
// 채번 규칙 파트 먼저 삭제
|
||||
await client.query(
|
||||
`DELETE FROM numbering_rule_parts WHERE rule_id = ANY($1)`,
|
||||
[menuScopedRuleIds]
|
||||
);
|
||||
// 채번 규칙 삭제
|
||||
<<<<<<< HEAD
|
||||
await client.query(
|
||||
`DELETE FROM numbering_rules WHERE rule_id = ANY($1)`,
|
||||
[menuScopedRuleIds]
|
||||
);
|
||||
logger.info(` ✅ 메뉴 전용 채번 규칙 삭제: ${menuScopedRuleIds.length}개`);
|
||||
=======
|
||||
await client.query(`DELETE FROM numbering_rules WHERE rule_id = ANY($1)`, [
|
||||
menuScopedRuleIds,
|
||||
]);
|
||||
logger.info(
|
||||
` ✅ 메뉴 전용 채번 규칙 삭제: ${menuScopedRuleIds.length}개`
|
||||
);
|
||||
@@ -818,37 +803,7 @@ export class MenuCopyService {
|
||||
await client.query(`DELETE FROM menu_info WHERE objid = ANY($1)`, [
|
||||
existingMenuIds,
|
||||
]);
|
||||
>>>>>>> 932eb288c6feae85cf7808513b4e1f0b7e709176
|
||||
}
|
||||
|
||||
// scope_type != 'menu'인 채번 규칙: menu_objid만 NULL로 설정 (규칙 보존)
|
||||
const tableScopedRulesResult = await client.query(
|
||||
`UPDATE numbering_rules
|
||||
SET menu_objid = NULL
|
||||
WHERE menu_objid = ANY($1) AND company_code = $2 AND (scope_type IS NULL OR scope_type != 'menu')
|
||||
RETURNING rule_id`,
|
||||
[existingMenuIds, targetCompanyCode]
|
||||
);
|
||||
if (tableScopedRulesResult.rows.length > 0) {
|
||||
logger.info(` ✅ 테이블 스코프 채번 규칙 연결 해제: ${tableScopedRulesResult.rows.length}개 (데이터 보존)`);
|
||||
}
|
||||
|
||||
// 5-5. 카테고리 컬럼 매핑 삭제 (NOT NULL 제약조건으로 인해 삭제)
|
||||
const deletedCategoryMappings = await client.query(
|
||||
`DELETE FROM category_column_mapping
|
||||
WHERE menu_objid = ANY($1) AND company_code = $2
|
||||
RETURNING mapping_id`,
|
||||
[existingMenuIds, targetCompanyCode]
|
||||
);
|
||||
if (deletedCategoryMappings.rows.length > 0) {
|
||||
logger.info(` ✅ 카테고리 매핑 삭제: ${deletedCategoryMappings.rows.length}개`);
|
||||
}
|
||||
|
||||
// 5-6. 메뉴 삭제 (배치)
|
||||
await client.query(
|
||||
`DELETE FROM menu_info WHERE objid = ANY($1)`,
|
||||
[existingMenuIds]
|
||||
);
|
||||
logger.info(` ✅ 메뉴 삭제 완료: ${existingMenus.length}개`);
|
||||
|
||||
logger.info("✅ 기존 복사본 삭제 완료 - 덮어쓰기 준비됨");
|
||||
@@ -2416,12 +2371,8 @@ export class MenuCopyService {
|
||||
return { copiedCount, ruleIdMap };
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 2. 대상 회사에 이미 존재하는 모든 채번 규칙 조회 (원본 ID + 새로 생성될 ID 모두 체크)
|
||||
=======
|
||||
// 2. 대상 회사에 이미 존재하는 채번 규칙 한 번에 조회
|
||||
const ruleIds = allRulesResult.rows.map((r) => r.rule_id);
|
||||
>>>>>>> 932eb288c6feae85cf7808513b4e1f0b7e709176
|
||||
const existingRulesResult = await client.query(
|
||||
`SELECT rule_id FROM numbering_rules WHERE company_code = $1`,
|
||||
[targetCompanyCode]
|
||||
@@ -2438,22 +2389,9 @@ export class MenuCopyService {
|
||||
const rulesToUpdate: Array<{ ruleId: string; newMenuObjid: number }> = [];
|
||||
|
||||
for (const rule of allRulesResult.rows) {
|
||||
// 새 rule_id 생성
|
||||
const originalSuffix = rule.rule_id.includes('_')
|
||||
? rule.rule_id.replace(/^[^_]*_/, '')
|
||||
: rule.rule_id;
|
||||
const newRuleId = `${targetCompanyCode}_${originalSuffix}`;
|
||||
|
||||
// 원본 ID 또는 새로 생성될 ID가 이미 존재하는 경우 스킵
|
||||
if (existingRuleIds.has(rule.rule_id)) {
|
||||
// 기존 규칙은 동일한 ID로 매핑
|
||||
ruleIdMap.set(rule.rule_id, rule.rule_id);
|
||||
<<<<<<< HEAD
|
||||
logger.info(` ♻️ 채번규칙 이미 존재 (원본 ID): ${rule.rule_id}`);
|
||||
} else if (existingRuleIds.has(newRuleId)) {
|
||||
ruleIdMap.set(rule.rule_id, newRuleId);
|
||||
logger.info(` ♻️ 채번규칙 이미 존재 (대상 ID): ${newRuleId}`);
|
||||
} else {
|
||||
=======
|
||||
|
||||
// 새 메뉴 ID로 연결 업데이트 필요
|
||||
const newMenuObjid = menuIdMap.get(rule.menu_objid);
|
||||
@@ -2470,7 +2408,6 @@ export class MenuCopyService {
|
||||
: rule.rule_id;
|
||||
const newRuleId = `${targetCompanyCode}_${originalSuffix}`;
|
||||
|
||||
>>>>>>> 932eb288c6feae85cf7808513b4e1f0b7e709176
|
||||
ruleIdMap.set(rule.rule_id, newRuleId);
|
||||
originalToNewRuleMap.push({ original: rule.rule_id, new: newRuleId });
|
||||
rulesToCopy.push({ ...rule, newRuleId });
|
||||
|
||||
Reference in New Issue
Block a user