fix: 덮어쓰기 시 외래키 제약조건 위반 문제 해결
문제: - 기존 메뉴 삭제 시 numbering_rules.fk_numbering_rules_menu 외래키 제약조건 위반 - category_column_mapping.fk_mapping_menu 외래키 제약조건도 위반 가능 원인: - 채번 규칙과 카테고리 설정이 menu_objid를 참조하는데, 메뉴를 먼저 삭제하려고 함 해결: deleteExistingCopy 함수의 삭제 순서 변경: 1. 화면 레이아웃 2. 화면-메뉴 할당 3. 화면 정의 4. 메뉴 권한 5. 채번 규칙 파트 (추가) 6. 채번 규칙 (추가) 7. 테이블 컬럼 카테고리 값 (추가) 8. 카테고리 컬럼 매핑 (추가) 9. 메뉴 (역순) 관련 파일: - backend-node/src/services/menuCopyService.ts 테스트: - 메뉴 덮어쓰기 재복사 시 외래키 제약조건 위반 없이 정상 동작
This commit is contained in:
parent
10526da1ac
commit
42435193cf
|
|
@ -709,7 +709,42 @@ export class MenuCopyService {
|
||||||
]);
|
]);
|
||||||
logger.info(` ✅ 메뉴 권한 삭제 완료`);
|
logger.info(` ✅ 메뉴 권한 삭제 완료`);
|
||||||
|
|
||||||
// 5-5. 메뉴 삭제 (역순: 하위 메뉴부터)
|
// 5-5. 채번 규칙 파트 삭제
|
||||||
|
await client.query(
|
||||||
|
`DELETE FROM numbering_rule_parts
|
||||||
|
WHERE rule_id IN (
|
||||||
|
SELECT rule_id FROM numbering_rules
|
||||||
|
WHERE menu_objid = ANY($1) AND company_code = $2
|
||||||
|
)`,
|
||||||
|
[existingMenuIds, targetCompanyCode]
|
||||||
|
);
|
||||||
|
logger.info(` ✅ 채번 규칙 파트 삭제 완료`);
|
||||||
|
|
||||||
|
// 5-6. 채번 규칙 삭제
|
||||||
|
await client.query(
|
||||||
|
`DELETE FROM numbering_rules
|
||||||
|
WHERE menu_objid = ANY($1) AND company_code = $2`,
|
||||||
|
[existingMenuIds, targetCompanyCode]
|
||||||
|
);
|
||||||
|
logger.info(` ✅ 채번 규칙 삭제 완료`);
|
||||||
|
|
||||||
|
// 5-7. 테이블 컬럼 카테고리 값 삭제
|
||||||
|
await client.query(
|
||||||
|
`DELETE FROM table_column_category_values
|
||||||
|
WHERE menu_objid = ANY($1) AND company_code = $2`,
|
||||||
|
[existingMenuIds, targetCompanyCode]
|
||||||
|
);
|
||||||
|
logger.info(` ✅ 카테고리 값 삭제 완료`);
|
||||||
|
|
||||||
|
// 5-8. 카테고리 컬럼 매핑 삭제
|
||||||
|
await client.query(
|
||||||
|
`DELETE FROM category_column_mapping
|
||||||
|
WHERE menu_objid = ANY($1) AND company_code = $2`,
|
||||||
|
[existingMenuIds, targetCompanyCode]
|
||||||
|
);
|
||||||
|
logger.info(` ✅ 카테고리 매핑 삭제 완료`);
|
||||||
|
|
||||||
|
// 5-9. 메뉴 삭제 (역순: 하위 메뉴부터)
|
||||||
for (let i = existingMenus.length - 1; i >= 0; i--) {
|
for (let i = existingMenus.length - 1; i >= 0; i--) {
|
||||||
await client.query(`DELETE FROM menu_info WHERE objid = $1`, [
|
await client.query(`DELETE FROM menu_info WHERE objid = $1`, [
|
||||||
existingMenus[i].objid,
|
existingMenus[i].objid,
|
||||||
|
|
@ -1660,9 +1695,7 @@ export class MenuCopyService {
|
||||||
WHERE table_name = $1 AND column_name = $2 AND company_code = $3`,
|
WHERE table_name = $1 AND column_name = $2 AND company_code = $3`,
|
||||||
[tableName, columnName, targetCompanyCode]
|
[tableName, columnName, targetCompanyCode]
|
||||||
);
|
);
|
||||||
logger.debug(
|
logger.debug(` 🗑️ 기존 카테고리 값 삭제: ${tableName}.${columnName}`);
|
||||||
` 🗑️ 기존 카테고리 값 삭제: ${tableName}.${columnName}`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 새 값 추가
|
// 새 값 추가
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue